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 ); } // Check for Image Service extension status changes. if ( 'imageservice' === $extension ) { $w3_config->set( 'extension.imageservice', true ); } // Save the config, unless told not to. 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 ); // Check for Image Service extension status changes. if ( 'imageservice' === $extension ) { $config->set( 'extension.imageservice', false ); } // Save the config, unless told not to. 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; } }