/home/arranoyd/energyclinic.com.hr/wp-content/plugins/docket-cache/includes/src/Command.php
<?php
/**
* Docket Cache.
*
* @author Nawawi Jamili
* @license MIT
*
* @see https://github.com/nawawi/docket-cache
*/
namespace Nawawi\DocketCache;
\defined('ABSPATH') || exit;
use WP_CLI;
use WP_CLI_Command;
/**
* Enables, disabled, updates, and checks the status of the Docket object cache.
*/
class Command extends WP_CLI_Command
{
private $pt;
public function __construct(Plugin $pt)
{
if (empty($_SERVER['HTTP_HOST'])) {
$_SERVER['HTTP_HOST'] = wp_parse_url(site_url(), \PHP_URL_HOST);
}
$this->pt = $pt;
}
private function print_stdout($text, $nl = true)
{
if (!empty($_SERVER['argv']) && \in_array('--quiet', $_SERVER['argv'])) {
return;
}
fwrite(\STDOUT, $text.($nl ? "\n" : ''));
}
private function clear_line()
{
$this->print_stdout("\r".str_repeat(' ', 100)."\r", false);
}
private function halt_warning($warning)
{
WP_CLI::warning($warning);
WP_CLI::halt(2);
}
private function halt_error($error)
{
WP_CLI::error($error, false);
WP_CLI::halt(1);
}
private function halt_success($success)
{
WP_CLI::success($success, false);
WP_CLI::halt(0);
}
private function halt_status($text, $status = 0)
{
$this->print_stdout($text);
WP_CLI::halt($status);
}
private function title($text, $pad = 15)
{
return str_pad($text, $pad).': ';
}
private function status_color($status, $text)
{
switch ($status) {
case 1:
$text = WP_CLI::colorize("%g{$text}%n");
break;
default:
$text = WP_CLI::colorize("%r{$text}%n");
break;
}
return $text;
}
private function dropino_runtime_status()
{
$info = (object) $this->pt->get_info();
if (2 === $info->status_code) {
$this->print_stdout($this->title('Cache Status').$this->status_color($info->status_code, $info->status_text));
unset($info);
WP_CLI::halt(1);
}
unset($info);
}
/**
* Display the Docket Cache status.
*
* ## EXAMPLES
*
* wp cache status
*/
public function status()
{
$info = (object) $this->pt->get_info();
$halt = $info->status_code ? 0 : 1;
$line = str_repeat('-', 15).':'.str_repeat('-', \strlen($info->cache_path) + 2);
$this->print_stdout($line);
$this->print_stdout($this->title('Cache Status').$this->status_color($info->status_code, $info->status_text));
$this->print_stdout($this->title('Cache Path').$info->cache_path);
if ($this->pt->cf()->is_dctrue('STATS')) {
$this->print_stdout($this->title('Cache Size').$info->cache_size);
}
$this->print_stdout($line);
unset($info);
WP_CLI::halt($halt);
}
/**
* Enables the Docket Cache Drop-In file.
*
* Default behavior is to create the object cache Drop-In,
* unless an unknown object cache Drop-In is present.
*
* ## EXAMPLES
*
* wp cache dropin:enable
*/
public function dropino_enable()
{
$this->dropino_runtime_status();
if ($this->pt->cx()->exists()) {
if ($this->pt->cx()->validate()) {
$this->halt_success(__('Docket object cache already enabled.', 'docket-cache'));
}
$this->halt_error(__('An unknown object cache Drop-In was found. To use Docket object cache, run: wp cache dropin:update.', 'docket-cache'));
}
if ($this->pt->cx()->install()) {
$this->halt_success(__('Object cache enabled.', 'docket-cache'));
}
$this->halt_error(__('Object cache could not be enabled.', 'docket-cache'));
}
/**
* Disables the Docket Cache Drop-In file.
*
* Default behavior is to delete the object cache Drop-In,
* unless an unknown object cache Drop-In is present.
*
* ## EXAMPLES
*
* wp cache dropin:disable
*/
public function dropino_disable()
{
$this->dropino_runtime_status();
if (!$this->pt->cx()->exists()) {
$this->halt_error(__('No object cache Drop-In found.', 'docket-cache'));
}
if (!$this->pt->cx()->validate()) {
$this->halt_error(__('An unknown object cache Drop-In was found. To use Docket run: wp cache dropin:update.', 'docket-cache'));
}
if ($this->pt->cx()->uninstall()) {
$this->halt_success(__('Object cache disabled.', 'docket-cache'));
}
$this->halt_error(__('Object cache could not be disabled.', 'docket-cache'));
}
/**
* Updates the Docket Cache Drop-In file.
*
* Default behavior is to overwrite any existing object cache Drop-In.
*
* ## EXAMPLES
*
* wp cache update
*
* @subcommand dropin:update
*/
public function dropino_update()
{
$this->dropino_runtime_status();
if ($this->pt->cx()->install()) {
$this->halt_success(__('Updated object cache Drop-In and enabled Docket object cache.', 'docket-cache'));
}
$this->halt_error(__('Object cache Drop-In could not be updated.', 'docket-cache'));
}
/**
* Flushes the object cache.
*
* Remove the object cache files.
*
* ## EXAMPLES
*
* wp cache flush
*
* @subcommand flush
*/
public function flush_cache()
{
$this->print_stdout(__('Flushing cache. Please wait..', 'docket-cache'), false);
sleep(1);
$is_timeout = false;
$total = $this->pt->flush_cache(true, $is_timeout);
$this->clear_line();
$this->pt->cx()->undelay();
if ($is_timeout) {
/* translators: %d = seconds */
$this->halt_error(sprintf(__('Process aborted. The object cache is not fully flushed. The maximum execution time of %d seconds was exceeded.', 'docket-cache'), $result));
}
if (empty($total)) {
$this->halt_error(__('The cache is empty, no cache needs to be flushed.', 'docket-cache'));
}
/* translators: %d = count */
$this->halt_success(sprintf(__('The cache was flushed. Total cache flushed: %d', 'docket-cache'), $total));
}
/**
* Removes the Docket Cache lock files.
*
* Remove lock file.
*
* ## EXAMPLES
*
* wp cache reset:lock
*
* @subcommand reset:lock
*/
public function reset_lock()
{
$this->pt->co()->clear_lock();
$this->halt_success(__('The lock has been removed.', 'docket-cache'));
}
/**
* Reset the Docket Cache cron event.
*
* Reset cron event.
*
* ## EXAMPLES
*
* wp cache reset:cron
*
* @subcommand reset:cron
*/
public function reset_cron()
{
$this->print_stdout(__('Resetting cron event. Please wait..', 'docket-cache'), false);
( new Event($this->pt) )->reset();
sleep(1);
$this->clear_line();
WP_CLI::runcommand('cron event list');
$this->halt_success(__('Cron event has been reset.', 'docket-cache'));
}
/**
* Removes the Docket Cache runtime code.
*
* Remove runtime code.
*
* ## EXAMPLES
*
* wp cache runtime:remove
*
* @subcommand runtime:remove
*/
public function runtime_remove()
{
if (WpConfig::is_bedrock()) {
$this->print_stdout(__('This command does not support Bedrock. Please manually remove the runtime code.', 'docket-cache'));
WP_CLI::halt(1);
}
if (WpConfig::runtime_remove()) {
$this->halt_success(__('The runtime code has been removed.', 'docket-cache'));
}
$this->halt_error(__('Failed to remove runtime code.', 'docket-cache'));
}
/**
* Install the Docket Cache runtime code.
*
* Install runtime code in wp-config file.
*
* ## EXAMPLES
*
* wp cache runtime:install
*
* @subcommand runtime:install
*/
public function runtime_install()
{
if (WpConfig::is_bedrock()) {
$this->print_stdout(__('This command does not support Bedrock. Please manually install the runtime code.', 'docket-cache'));
WP_CLI::halt(1);
}
if (WpConfig::runtime_install()) {
$this->halt_success(__('Updating wp-config.php file successful', 'docket-cache'));
}
$this->halt_error(__('Failed to update wp-config.php file.', 'docket-cache'));
}
/**
* Flushes the precaching files.
*
* Remove the precaching files.
*
* ## EXAMPLES
*
* wp cache flush:precache
*
* @subcommand flush:precache
*/
public function flush_precache()
{
if (!\function_exists('wp_cache_flush_group') || !method_exists('WP_Object_Cache', 'dc_remove_group')) {
$this->halt_error(__('Object Precache could not be flushed. Docket Cache object-cache.php Drop-in is inactive.', 'docket-cache'));
}
$this->print_stdout(__('Flushing precache. Please wait..', 'docket-cache'), false);
sleep(1);
$total = wp_cache_flush_group(['docketcache-precache', 'docketcache-precache-gc']);
$this->clear_line();
/* translators: %d = count */
$this->halt_success(sprintf(__('The precache was flushed. Total cache flushed: %d', 'docket-cache'), $total));
}
/**
* Flushes the transient files.
*
* Remove the transient files.
*
* ## EXAMPLES
*
* wp cache flush:transient
*
* @subcommand flush:transient
*/
public function flush_transient()
{
if (!\function_exists('wp_cache_flush_group') || !method_exists('WP_Object_Cache', 'dc_remove_group')) {
$this->halt_error(__('Transient could not be flushed. Docket Cache object-cache.php Drop-in is inactive.', 'docket-cache'));
}
$this->print_stdout(__('Flushing transient. Please wait..', 'docket-cache'), false);
sleep(1);
$total = wp_cache_flush_group(['transient', 'site-transient']);
$this->clear_line();
/* translators: %d = couint */
$this->halt_success(sprintf(__('The transient was flushed. Total cache flushed: %d', 'docket-cache'), $total));
}
/**
* Flushes the Advanced Post Cache files.
*
* Remove the Advanced Post Cache files.
*
* ## EXAMPLES
*
* wp cache flush:advcpost
*
* @subcommand flush:advcpost
*/
public function flush_advcpost()
{
if (!\function_exists('wp_cache_flush_group_match') || !method_exists('WP_Object_Cache', 'dc_remove_group')) {
$this->halt_error(__('Advanced Post Cache could not be flushed. Docket Cache object-cache.php Drop-in is inactive.', 'docket-cache'));
}
$this->print_stdout(__('Flushing Advanced Post Cache. Please wait..', 'docket-cache'), false);
sleep(1);
$total = wp_cache_flush_group_match('docketcache-post');
$this->clear_line();
/* translators: %d = count */
$this->halt_success(sprintf(__('The Advanced Post Cache was flushed. Total cache flushed: %d', 'docket-cache'), $total));
}
/**
* Flushes the Menu Cache files.
*
* Remove the Menu Cache files.
*
* ## EXAMPLES
*
* wp cache flush:menucache
*
* @subcommand flush:menucache
*/
public function flush_menucache()
{
if (!\function_exists('wp_cache_flush_group') || !method_exists('WP_Object_Cache', 'dc_remove_group')) {
$this->halt_error(__('Menu Cache could not be flushed. Docket Cache object-cache.php Drop-in is inactive.', 'docket-cache'));
}
$this->print_stdout(__('Flushing Menu Cache. Please wait..', 'docket-cache'), false);
sleep(1);
$total = wp_cache_flush_group('docketcache-menu');
$this->clear_line();
/* translators: %d = count */
$this->halt_success(sprintf(__('The Menu Cache was flushed. Total cache flushed: %d', 'docket-cache'), $total));
}
/**
* Flushes the Translation Cache files.
*
* Remove the Translation Cache files.
*
* ## EXAMPLES
*
* wp cache flush:mocache
*
* @subcommand flush:mocache
*/
public function flush_mocache()
{
if (!\function_exists('wp_cache_flush_group') || !method_exists('WP_Object_Cache', 'dc_remove_group')) {
$this->halt_error(__('Translation Cache could not be flushed. Docket Cache object-cache.php Drop-in is inactive.', 'docket-cache'));
}
$this->print_stdout(__('Flushing Translation Cache. Please wait..', 'docket-cache'), false);
sleep(1);
$total = wp_cache_flush_group('docketcache-mo');
$this->clear_line();
/* translators: %d = count */
$this->halt_success(sprintf(__('The Translation Cache was flushed. Total cache flushed: %d', 'docket-cache'), $total));
}
/**
* Runs all cron event.
*
* Runs all cron event.
*
* ## EXAMPLES
*
* wp cache run:cron
*
* @subcommand run:cron
*/
public function run_cron()
{
$this->print_stdout(__('Executing the cron event. Please wait..', 'docket-cache'), false);
sleep(1);
$this->clear_line();
WP_CLI::runcommand('cron event run --all');
WP_CLI::runcommand('cron event list');
}
/**
* Runs the Docket Cache cache stats.
*
* Collect cache stats data.
*
* ## EXAMPLES
*
* wp cache run:stats
*
* @subcommand run:stats
*/
public function run_stats()
{
$this->print_stdout(__('Executing the cache stats. Please wait..', 'docket-cache'), false);
sleep(1);
$pad = 15;
$stats = $this->pt->get_cache_stats(true);
$this->clear_line();
$padr = 10;
if (\strlen($stats->files) > 10) {
$padr = \strlen($stats->files);
}
$line = str_repeat('-', $pad).':'.str_repeat('-', $padr);
$this->print_stdout($line);
$this->print_stdout($this->title(__('Object size', 'docket-cache'), $pad).$this->pt->normalize_size($stats->size));
$this->print_stdout($this->title(__('File size', 'docket-cache'), $pad).$this->pt->normalize_size($stats->filesize));
$this->print_stdout($this->title(__('Total file', 'docket-cache'), $pad).$stats->files);
$this->print_stdout($line);
$this->halt_success(__('Executing the cache stats completed.', 'docket-cache'));
}
/**
* Runs the Docket Cache Optimizedb.
*
* Optimize DB.
*
* ## EXAMPLES
*
* wp cache run:optimizedb
*
* @subcommand run:stats
*/
public function run_optimizedb()
{
$this->print_stdout(__('Executing the optimizedb. Please wait..', 'docket-cache'), false);
sleep(1);
( new Event($this->pt) )->optimizedb();
$this->clear_line();
$this->halt_success(__('Executing the optimizedb completed.', 'docket-cache'));
}
/**
* Runs the Docket Cache garbage collector (GC).
*
* Remove empty and older files, and execute various actions.
*
* ## EXAMPLES
*
* wp cache run:gc
*
* @subcommand run:gc
*/
public function run_gc()
{
$this->print_stdout(__('Executing the garbage collector. Please wait..', 'docket-cache'), false);
sleep(1);
$pad = 35;
$collect = ( new Event($this->pt) )->garbage_collector(true);
$this->clear_line();
if ($collect->is_locked) {
$this->halt_warning(__('Process locked. The garbage collector is in process. Try again in a few seconds.', 'docket-cache'));
}
$line = str_repeat('-', $pad).':'.str_repeat('-', 10);
$this->print_stdout($line);
$this->print_stdout($this->title(__('Cache MaxTTL', 'docket-cache'), $pad).$collect->cache_maxttl);
$this->print_stdout($this->title(__('Cache File Limit', 'docket-cache'), $pad).$collect->cache_maxfile);
$this->print_stdout($this->title(__('Cache Disk Limit', 'docket-cache'), $pad).$this->pt->normalize_size($collect->cache_maxdisk));
$this->print_stdout($line);
$this->print_stdout($this->title(__('Cleanup Cache MaxTTL', 'docket-cache'), $pad).$collect->cleanup_maxttl);
$this->print_stdout($this->title(__('Cleanup Cache File Limit', 'docket-cache'), $pad).$collect->cleanup_maxfile);
$this->print_stdout($this->title(__('Cleanup Cache Disk Limit', 'docket-cache'), $pad).$collect->cleanup_maxdisk);
if ($collect->cleanup_expire > 0) {
$this->print_stdout($this->title(__('Cleanup Cache Expire', 'docket-cache'), $pad).$collect->cleanup_expire);
}
if ($this->pt->get_precache_maxfile() > 0 && $collect->cleanup_precache_maxfile > 0) {
$this->print_stdout($this->title(__('Cleanup Precache Limit', 'docket-cache'), $pad).$collect->cleanup_precache_maxfile);
}
if ($this->pt->cf()->is_dctrue('FLUSH_STALECACHE') && $collect->cleanup_stalecache > 0) {
$this->print_stdout($this->title(__('Cleanup Stale Cache', 'docket-cache'), $pad).$collect->cleanup_stalecache);
}
$this->print_stdout($line);
$this->print_stdout($this->title(__('Total Cache Cleanup', 'docket-cache'), $pad).$collect->cache_cleanup);
$this->print_stdout($this->title(__('Total Cache Ignored', 'docket-cache'), $pad).$collect->cache_ignore);
$this->print_stdout($this->title(__('Total Cache File', 'docket-cache'), $pad).$collect->cache_file);
$this->print_stdout($line);
$this->halt_success(__('Executing the garbage collector completed.', 'docket-cache'));
}
/**
* Attempts to determine which object cache is being used.
*
* Note that the guesses made by this function are based on the
* WP_Object_Cache classes that define the 3rd party object cache extension.
* Changes to those classes could render problems with this function's
* ability to determine which object cache is being used.
*
* ## EXAMPLES
*
* wp cache type
*/
public function type()
{
$this->halt_status($this->pt->slug.' (v'.$this->pt->version().')');
}
}