laipower/wp-content/plugins/w3-total-cache/Extensions_Util.php

183 lines
4.4 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 );
}
// 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;
}
}