171 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * File: Extensions_Util.php
 | |
|  *
 | |
|  * @package W3TC
 | |
|  */
 | |
| 
 | |
| namespace W3TC;
 | |
| 
 | |
| /**
 | |
|  * Class: Extensions_Util
 | |
|  */
 | |
| class Extensions_Util {
 | |
| 	/**
 | |
| 	 * Get registered extensions
 | |
| 	 *
 | |
| 	 * @static
 | |
| 	 *
 | |
| 	 * @param Config $config Configuration object.
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	public static function get_extensions( $config ) {
 | |
| 		return apply_filters( 'w3tc_extensions', __return_empty_array(), $config );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get registered extension
 | |
| 	 *
 | |
| 	 * @static
 | |
| 	 *
 | |
| 	 * @param Config $config Configuration object.
 | |
| 	 * @param string $extension Extension.
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	public static function get_extension( $config, $extension ) {
 | |
| 		$exts = self::get_extensions( $config );
 | |
| 
 | |
| 		if ( ! isset( $exts[ $extension ] ) ) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		return $exts[ $extension ];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns the inactive extensions
 | |
| 	 *
 | |
| 	 * @static
 | |
| 	 *
 | |
| 	 * @param Config $config Configuration object.
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	public static function get_inactive_extensions( $config ) {
 | |
| 		$extensions        = self::get_extensions( $config );
 | |
| 		$config            = Dispatcher::config();
 | |
| 		$active_extensions = $config->get_array( 'extensions.active' );
 | |
| 
 | |
| 		return array_diff_key( $extensions, $active_extensions );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns the active extensions.
 | |
| 	 *
 | |
| 	 * @static
 | |
| 	 *
 | |
| 	 * @param Config $config Configuration object.
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	public static function get_active_extensions( $config ) {
 | |
| 		$extensions        = self::get_extensions( $config );
 | |
| 		$extensions_keys   = array_keys( $extensions );
 | |
| 		$config            = Dispatcher::config();
 | |
| 		$active_extensions = $config->get_array( 'extensions.active' );
 | |
| 
 | |
| 		return array_intersect_key( $extensions, $active_extensions );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Activate extension.
 | |
| 	 *
 | |
| 	 * @static
 | |
| 	 *
 | |
| 	 * @param string $extension        Extension.
 | |
| 	 * @param Config $w3_config        Configuration object.
 | |
| 	 * @param bool   $dont_save_config Whether or not to save configuration.  Default: false.
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public static function activate_extension( $extension, $w3_config, $dont_save_config = false ) {
 | |
| 		$all_extensions = self::get_extensions( $w3_config );
 | |
| 		$extensions     = $w3_config->get_array( 'extensions.active' );
 | |
| 
 | |
| 		if ( ! $w3_config->is_extension_active( $extension ) ) {
 | |
| 			$meta = $all_extensions[ $extension ];
 | |
| 
 | |
| 			$filename = W3TC_EXTENSION_DIR . '/' . trim( $meta['path'], '/' );
 | |
| 
 | |
| 			if ( ! file_exists( $filename ) ) {
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			include $filename;
 | |
| 
 | |
| 			$extensions[ $extension ] = $meta['path'];
 | |
| 
 | |
| 			ksort( $extensions, SORT_STRING );
 | |
| 
 | |
| 			$w3_config->set( 'extensions.active', $extensions );
 | |
| 
 | |
| 			// if extensions doesnt want to control frontend activity - activate it there too.
 | |
| 			if ( ! isset( $meta['active_frontend_own_control'] ) || ! $meta['active_frontend_own_control'] ) {
 | |
| 				$w3_config->set_extension_active_frontend( $extension, true );
 | |
| 			}
 | |
| 
 | |
| 			try {
 | |
| 				if ( ! $dont_save_config ) {
 | |
| 					$w3_config->save();
 | |
| 				}
 | |
| 
 | |
| 				// Set transient for displaying activation notice.
 | |
| 				set_transient( 'w3tc_activation_' . $extension, true, DAY_IN_SECONDS );
 | |
| 
 | |
| 				return true;
 | |
| 			} catch ( \Exception $ex ) {
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Deactivate extension.
 | |
| 	 *
 | |
| 	 * @static
 | |
| 	 *
 | |
| 	 * @param string $extension        Extension.
 | |
| 	 * @param Config $config           Configuration object.
 | |
| 	 * @param bool   $dont_save_config Whether or not to save configuration.  Default: false.
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public static function deactivate_extension( $extension, $config, $dont_save_config = false ) {
 | |
| 		$extensions = $config->get_array( 'extensions.active' );
 | |
| 
 | |
| 		if ( array_key_exists( $extension, $extensions ) ) {
 | |
| 			unset( $extensions[ $extension ] );
 | |
| 			ksort( $extensions, SORT_STRING );
 | |
| 			$config->set( 'extensions.active', $extensions );
 | |
| 		}
 | |
| 
 | |
| 		$config->set_extension_active_frontend( $extension, false );
 | |
| 
 | |
| 		try {
 | |
| 			if ( ! $dont_save_config ) {
 | |
| 				$config->save();
 | |
| 			}
 | |
| 
 | |
| 			// Delete transient for displaying activation notice.
 | |
| 			delete_transient( 'w3tc_activation_' . $extension );
 | |
| 
 | |
| 			do_action( 'w3tc_deactivate_extension_' . $extension );
 | |
| 
 | |
| 			return true;
 | |
| 		} catch ( \Exception $ex ) {
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| }
 |