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

431 lines
12 KiB
PHP

<?php
namespace W3TC;
/**
* The W3 Total Cache plugin integration
*
* @package wp-cli
* @subpackage commands/third-party
*/
class W3TotalCache_Command extends \WP_CLI_Command {
/**
* Creates missing files, writes apache/nginx rules.
*
* ## OPTIONS
* [<server>]
* : Subcommand defines server type:
* apache create rules for apache server
* nginx create rules for nginx server
*/
function fix_environment( $args = array(), $vars = array() ) {
$server_type = array_shift( $args );
switch ( $server_type ) {
case 'apache':
$_SERVER['SERVER_SOFTWARE'] = 'Apache';
break;
case 'nginx':
$_SERVER['SERVER_SOFTWARE'] = 'nginx';
break;
}
try {
$config = Dispatcher::config();
$environment = Dispatcher::component( 'Root_Environment' );
$environment->fix_in_wpadmin( $config, true );
} catch ( Util_Environment_Exceptions $e ) {
\WP_CLI::error( __( 'Environment adjustment failed with error', 'w3-total-cache' ),
$e->getCombinedMessage() );
}
\WP_CLI::success( __( 'Environment adjusted.', 'w3-total-cache' ) );
}
/**
* Clear something from the cache.
*
* ## OPTIONS
* <cache>
* : Cache to flush
* all flush all caches
* posts flush posts (pagecache and further)
* post flush the page cache
* database flush the database cache
* object flush the object cache
* minify flush the minify cache
*
* [--post_id=<id>]
* : flush a specific post ID
*
* [--permalink=<post-permalink>]
* : flush a specific permalink
*
* ## EXAMPLES
* # Flush all
* $ wp w3-total-cache flush all
*
* # Flush pagecache and reverse proxies
* $ wp w3-total-cache flush posts
*/
function flush( $args = array(), $vars = array() ) {
$args = array_unique( $args );
do {
$cache_type = array_shift( $args );
switch ( $cache_type ) {
case 'all':
try {
w3tc_flush_all();
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing all failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'Everything flushed successfully.', 'w3-total-cache' ) );
break;
case 'posts':
try {
w3tc_flush_posts();
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing posts/pages failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'Posts/pages flushed successfully.', 'w3-total-cache' ) );
break;
case 'db':
case 'database':
try {
$w3_db = Dispatcher::component( 'CacheFlush' );
$w3_db->dbcache_flush();
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing the DB cache failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'The DB cache is flushed successfully.', 'w3-total-cache' ) );
break;
case 'minify':
try {
$w3_minify = Dispatcher::component( 'CacheFlush' );
$w3_minify->minifycache_flush();
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing the minify cache failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'The minify cache is flushed successfully.', 'w3-total-cache' ) );
break;
case 'object':
try {
$w3_objectcache = Dispatcher::component( 'CacheFlush' );
$w3_objectcache->objectcache_flush();
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing the object cache failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'The object cache is flushed successfully.', 'w3-total-cache' ) );
break;
case 'post':
if ( isset( $vars['post_id'] ) ) {
if ( is_numeric( $vars['post_id'] ) ) {
try {
w3tc_flush_post( $vars['post_id'], true );
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing the page from cache failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'The page is flushed from cache successfully.', 'w3-total-cache' ) );
} else {
\WP_CLI::error( __( 'This is not a valid post id.', 'w3-total-cache' ) );
}
}
elseif ( isset( $vars['permalink'] ) ) {
try {
w3tc_flush_url( $vars['permalink'] );
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing the page from cache failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'The page is flushed from cache successfully.', 'w3-total-cache' ) );
} else {
if ( isset( $flushed_page_cache ) && $flushed_page_cache )
break;
try {
w3tc_flush_posts();
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Flushing the page cache failed.', 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'The page cache is flushed successfully.', 'w3-total-cache' ) );
}
break;
default:
\WP_CLI::error( __( 'Not specified what to flush', 'w3-total-cache' ) );
}
} while ( !empty( $args ) );
}
/**
* Get or set option.
*
* Options modifications don't update your .htaccess automatically.
* Use fix_environment command afterwards to do it.
*
* ## OPTIONS
* <operation>
* : operation to do
* get get option value
* set set option value
* <name>
* : option name
*
* [<value>]
* : (for set operation) Value to set
*
* [--state]
* : use state, not config
* state is used for backend notifications
*
* [--master]
* : use master config/state
*
* [--type=<type>]
* : type of data used boolean/string/integer/array. Default string
*
* [--delimiter=<delimiter>]
* : delimiter to use for array type values
*
* ## EXAMPLES
* # get if pagecache enabled
* $ wp w3-total-cache option get pgcache.enabled --type=boolean
*
* # enable pagecache
* $ wp w3-total-cache option set pgcache.enabled true --type=boolean
*
* # don't show wp-content permissions notification
* $ wp w3-total-cache option set common.hide_note_wp_content_permissions true --state --type=boolean
*/
function option( $args = array(), $vars = array() ) {
$op = array_shift( $args );
$name = array_shift( $args );
if ( empty( $name ) ) {
\WP_CLI::error( __( '<name> parameter is not specified', 'w3-total-cache' ) );
return;
}
if ( strpos( $name, '::' ) !== FALSE ) {
$name = explode('::', $name);
}
$c = null;
if ( isset( $vars['state'] ) ) {
if ( isset( $vars['master'] ) )
$c = Dispatcher::config_state_master();
else
$c = Dispatcher::config_state();
} else {
if ( isset( $vars['master'] ) )
$c = Dispatcher::config_master();
else
$c = Dispatcher::config();
}
if ( $op == 'get') {
$type =( isset( $vars['type'] ) ? $vars['type'] : 'string' );
if ( $type == 'boolean' )
$v = $c->get_boolean( $name ) ? 'true' : 'false';
elseif ( $type == 'integer' )
$v = $c->get_integer( $name );
elseif ( $type == 'string' )
$v = $c->get_string( $name );
elseif ( $type == 'array' )
$v = json_encode( $c->get_array( $name ), JSON_PRETTY_PRINT );
else {
\WP_CLI::error( __( 'Unknown type ' . $type, 'w3-total-cache' ) );
return;
}
echo esc_html( $v ) . "\n";
} elseif ( $op == 'set' ) {
$type =( isset( $vars['type'] ) ? $vars['type'] : 'string' );
if ( count( $args ) <= 0 ) {
\WP_CLI::error( __( '<value> parameter is not specified', 'w3-total-cache' ) );
return;
}
$value = array_shift( $args );
if ( $type == 'boolean' ) {
if ( $value == 'true' || $value == '1' || $value == 'on' )
$v = true;
elseif ( $value == 'false' || $value == '0' || $value == 'off' )
$v = false;
else {
\WP_CLI::error( __( '<value> parameter ' . $value . ' is not boolean', 'w3-total-cache' ) );
return;
}
} elseif ( $type == 'integer' )
$v = (integer)$value;
elseif ( $type == 'string' )
$v = $value;
elseif ( $type == 'array' ) {
$delimiter =( isset( $vars['delimiter'] ) ? $vars['delimiter'] : ',' );
$v = explode($delimiter, $value );
} else {
\WP_CLI::error( __( 'Unknown type ' . $type, 'w3-total-cache' ) );
return;
}
try {
$c->set( $name, $v );
$c->save();
\WP_CLI::success( __( 'Option updated successfully.', 'w3-total-cache' ) );
} catch ( \Exception $e ) {
\WP_CLI::error( __( 'Option value update failed.', 'w3-total-cache' ) );
}
} else {
\WP_CLI::error( __( '<operation> parameter is not specified', 'w3-total-cache' ) );
}
}
/**
* Imports configuration file
*
* ## OPTIONS
* <filename>
* : Filename to import
*/
function import( $args = array(), $vars = array() ) {
$filename = array_shift( $args );
try {
$config = new Config();
if ( !file_exists( $filename ) || !is_readable( $filename ) ) {
throw new \Exception( 'Cant read file: ' . $filename );
}
if ( !$config->import( $filename ) ) {
throw new \Exception( 'import failed' );
}
$config->save();
} catch ( \Exception $e ) {
\WP_CLI::error( __( 'Config import failed: ' . $e->getMessage(), 'w3-total-cache' ) );
}
\WP_CLI::success( __( 'Configuration successfully imported.', 'w3-total-cache' ) );
}
/**
* Update query string for all static files
*/
function querystring() {
try {
$w3_querystring = Dispatcher::component( 'CacheFlush' );
$w3_querystring->browsercache_flush();
}
catch ( \Exception $e ) {
\WP_CLI::error( sprintf(
__( 'updating the query string failed. with error %s', 'w3-total-cache' ),
$e ) );
}
\WP_CLI::success( __( 'The query string was updated successfully.', 'w3-total-cache' ) );
}
/**
* Purges URL's from cdn and varnish if enabled
*
* @param array $args List if files to be purged, absolute path or relative to wordpress installation path
*/
function cdn_purge( $args = array() ) {
$purgeitems = array();
foreach ( $args as $file ) {
$cdncommon = Dispatcher::component( 'Cdn_Core' );
if (file_exists($file)) {
$local_path = $file;
} else {
$local_path = ABSPATH . $file;
}
$remote_path = $file;
$purgeitems[] = $cdncommon->build_file_descriptor( $local_path, $remote_path );
}
try {
$w3_cdn_purge = Dispatcher::component( 'CacheFlush' );
$w3_cdn_purge->cdn_purge_files( $purgeitems );
}
catch ( \Exception $e ) {
\WP_CLI::error( __( 'Files did not successfully purge with error %s', 'w3-total-cache' ), $e );
}
\WP_CLI::success( __( 'Files purged successfully.', 'w3-total-cache' ) );
}
/**
* Generally triggered from a cronjob, performs manual page cache Garbage collection
*/
function pgcache_cleanup() {
try {
$o = Dispatcher::component( 'PgCache_Plugin_Admin' );
$o->cleanup();
} catch ( \Exception $e ) {
\WP_CLI::error( __( 'PageCache Garbage cleanup failed: %s',
'w3-total-cache' ), $e );
}
\WP_CLI::success( __( 'PageCache Garbage cleanup triggered successfully.',
'w3-total-cache' ) );
}
/**
* Generally triggered from a cronjob, performs manual page cache priming
* ## OPTIONS
* [--start=<start>]
* : Start since <start> entry of sitemap
*
* [--limit=<limit>]
* : load no more than <limit> pages
*
*/
function pgcache_prime( $args = array(), $vars = array() ) {
try {
$log_callback = function($m) {
\WP_CLI::log($m);
};
$o = Dispatcher::component( 'PgCache_Plugin_Admin' );
$o->prime( ( isset( $vars['start'] ) ? $vars['start'] - 1 : null ),
( isset( $vars['limit'] ) ? $vars['limit'] : null ),
$log_callback );
} catch ( \Exception $e ) {
\WP_CLI::error( __( 'PageCache Priming did failed: %s',
'w3-total-cache' ), $e );
}
\WP_CLI::success( __( 'PageCache Priming triggered successfully.',
'w3-total-cache' ) );
}
}
if ( method_exists( '\WP_CLI', 'add_command' ) ) {
\WP_CLI::add_command( 'w3-total-cache', '\W3TC\W3TotalCache_Command' );
\WP_CLI::add_command( 'total-cache', '\W3TC\W3TotalCache_Command' );
} else {
// backward compatibility
\WP_CLI::addCommand( 'w3-total-cache', '\W3TC\W3TotalCache_Command' );
\WP_CLI::addCommand( 'total-cache', '\W3TC\W3TotalCache_Command' );
}