File "cache.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/mojo-marketplace-wp-plugin/inc/cli/cache.php
File size: 7.19 KB
MIME-type: text/x-php
Charset: utf-8
<?php
use \WP_CLI\Utils;
/**
* Class EIG_WP_CLI_Cache
*
* This class is instantiated in /inc/cli-init.php
*/
class EIG_WP_CLI_Cache extends EIG_WP_CLI_Command {
/**
* @var string - Organization Raw Content URL Base.
*/
protected static $org_url = 'https://raw.githubusercontent.com/bluehost';
/**
* @var array - Types of caching available.
*/
protected static $cache_types = array(
'page',
'browser',
'object',
);
/**
* @var array - Actions taken with all caching types.
*/
protected static $cache_actions = array(
'add',
'remove',
'status',
);
/**
* @var string - GitHub Repo + Brand Slug.
*/
protected static $page_repo_branch = 'endurance-page-cache/production';
/**
* @var string - Page Cache Filename.
*/
protected static $page_filename = 'endurance-page-cache.php';
/**
* @var string - GitHub Repo + Brand Slug.
*/
protected static $browser_repo_branch = 'endurance-browser-cache/production';
/**
* @var string - Browser Cache Filename.
*/
protected static $browser_filename = 'endurance-browser-cache.php';
/**
* @var string - /wp-content/mu path on server.
*/
protected static $mu_plugin_dir = WP_CONTENT_DIR . '/mu-plugins';
/**
* @var string|null - user-provided provided action.
*/
protected $current_action;
/**
* @var string|null - user-provided caching type.
*/
protected $current_type;
/**
* @var string|null - determined filename based on caching type.
*/
protected $current_filename;
/**
* @var string|null - current path for mu plugin file.
*/
protected $current_plugin_path;
/**
* @var string|null - current url for remote copy of plugin file.
*/
protected $current_remote;
/**
* Manage Full-Page Caching, Browser Caching and Object Caching.
*/
public function __invoke( $args, $assoc_args ) {
if ( ! isset( $args[0] ) || ! isset( $args[1] ) ) {
$this->error( 'Arguments didn\'t have first two params set' );
WP_CLI::halt( 400 );
}
$this->current_type = $args[0];
$this->current_action = $args[1];
if ( ! in_array( $this->current_type, static::$cache_types ) ) {
$this->error( 'Cache type bad.' );
WP_CLI::halt( 400 );
}
if ( ! in_array( $this->current_action, static::$cache_actions ) ) {
$this->error( 'Cache action bad.' );
WP_CLI::halt( 400 );
}
switch ( $this->current_action ) {
case 'add':
$this->add();
break;
case 'remove';
$this->remove();
break;
}
}
/**
* wp {alias} cache {$this->current_type} add
*/
private function add() {
switch ( $this->current_type ) {
case 'page':
$this->current_plugin_path = trailingslashit( static::$mu_plugin_dir ) . static::$page_filename;
$this->current_remote = $this->build_url(
static::$org_url,
static::$page_repo_branch,
static::$page_filename
);
$this->current_filename = static::$page_filename;
$this->handle_remote_mu_plugin_load();
break;
case 'browser':
$this->current_plugin_path = trailingslashit( static::$mu_plugin_dir ) . static::$browser_filename;
$this->current_remote = $this->build_url(
static::$org_url,
static::$browser_repo_branch,
static::$browser_filename
);
$this->current_filename = static::$browser_filename;
$this->handle_remote_mu_plugin_load();
break;
case 'object':
$this->colorize_log( 'Object caching isn\'t available right now.' );
break;
}
}
/**
* wp {alias} cache {$this->current_type} remove
*/
private function remove() {
switch ( $this->current_type ) {
case 'page':
$this->current_plugin_path = Utils\trailingslashit( static::$mu_plugin_dir ) . static::$page_filename;
$this->remove_mu_plugin();
break;
case 'browser':
$this->current_plugin_path = Utils\trailingslashit( static::$mu_plugin_dir ) . static::$browser_filename;
$this->remove_mu_plugin();
break;
case 'object':
$this->colorize_log( 'Object caching isn\'t available right now.' );
break;
}
}
private function handle_remote_mu_plugin_load() {
$this->assure_mu_plugin_dir();
if ( file_exists( $this->current_plugin_path ) ) {
$this->confirm(
ucfirst( $this->current_type ) . ' caching plugin already exists. Replace with fresh copy?',
'underline'
);
}
$this->get_plugin_from_githubraw( $this->current_remote, $this->current_filename );
}
/**
* Use WordPress HTTP Library to Retrieve Single-File Drop-In Plugin from GitHub Repository
*
* @param $url
* @param $filename
* @param string $dir
*
* @throws \WP_CLI\ExitException
*/
private function get_plugin_from_githubraw( $url, $filename, $dir = '' ) {
$this->colorize_log( 'Downloading ' . ucfirst( $this->current_type ) . ' Cache from GitHub...' );
$dir = ! empty( $dir ) ? Utils\trailingslashit( $dir ) : Utils\trailingslashit( static::$mu_plugin_dir );
$response = Utils\http_request( 'GET', $url );
if (
is_object( $response )
&& isset( $response->status_code )
&& isset( $response->body )
&& 200 === $response->status_code
) {
$this->colorize_log( 'Adding timestamp to file...' );
$file_contents = $response->body . '/**' . PHP_EOL . '* FILE CREATED VIA WP-CLI' . PHP_EOL . '* ' . current_time( 'mysql' ) . PHP_EOL . '*/' . PHP_EOL;
file_put_contents( $dir . $filename, $file_contents );
if ( file_exists( $dir . $filename ) ) {
save_mod_rewrite_rules();
$this->success( ucfirst( $this->current_type ) . ' Cache placed in /mu-plugins/' . $filename . '. It\'s active!' );
} else {
$this->error( 'Couldn\'t write ' . $this->current_type . ' cache file to ' . $dir );
}
} else {
$this->error( 'Couldn\'t download ' . $this->current_type . ' cache from ' . $url );
}
}
/**
* Check for and create /wp-content/mu-plugins directory prior to writing to it.
*/
private function assure_mu_plugin_dir() {
if ( is_dir( static::$mu_plugin_dir ) ) {
$this->colorize_log( 'Found ' . static::$mu_plugin_dir, '', 'G' );
return;
} else {
$tried_making_dir = true;
$this->colorize_log( 'Creating ' . static::$mu_plugin_dir . '...' );
mkdir( static::$mu_plugin_dir );
}
if ( $tried_making_dir && is_dir( static::$mu_plugin_dir ) ) {
$this->success( 'Created ' . static::$mu_plugin_dir );
} else {
$this->error( 'Failed to create ' . static::$mu_plugin_dir . '. Update write permissions and try again.' );
}
}
/**
* Remove $this->current_plugin_path from directory, report failure or if it wasn't there.
*/
private function remove_mu_plugin() {
if ( file_exists( $this->current_plugin_path ) ) {
if ( unlink( $this->current_plugin_path ) ) {
save_mod_rewrite_rules();
$this->success( ucfirst( $this->current_type ) . ' caching disabled.' );
} else {
$this->error( 'Failed to remove ' . ucfirst( $this->current_type ) . ' cache file from ' . static::$mu_plugin_dir );
}
} else {
$this->warning( ucfirst( $this->current_type ) . ' caching plugin file does not exist.' );
}
}
/**
* Simple URL construction method from class constants
*
* @param string $root
* @param string $repo_branch
* @param string $filename
*
* @return string
*/
private function build_url( $root, $repo_branch, $filename ) {
return Utils\trailingslashit( $root ) . Utils\trailingslashit( $repo_branch ) . $filename;
}
}