Sid Gifari File Manager
🏠 Root
/
home
/
alianzatejedoras
/
public_html
/
wp-content
/
plugins
/
wp-optimize
/
includes
/
📝 Editing: class-wp-optimize-commands.php
<?php if (!defined('WPO_PLUGIN_MAIN_PATH')) die('No direct access allowed'); /** * All commands that are intended to be available for calling from any sort of control interface (e.g. wp-admin, UpdraftCentral) go in here. All public methods should either return the data to be returned, or a WP_Error with associated error code, message and error data. */ class WP_Optimize_Commands { private $optimizer; protected $options; private $wpo_sites; // used in get_optimizations_info command. public function __construct() { $this->optimizer = WP_Optimize()->get_optimizer(); $this->options = WP_Optimize()->get_options(); } public function get_version() { return WPO_VERSION; } public function enable_or_disable_feature($data) { $type = (string) $data['type']; $enable = (boolean) $data['enable']; $options = array($type => $enable); return $this->optimizer->trackback_comment_actions($options); } public function save_manual_run_optimization_options($sent_options) { return $this->options->save_sent_manual_run_optimization_options($sent_options); } public function get_status_box_contents() { $status_data = $this->get_all_status_data(); return WP_Optimize()->include_template('database/status-box-contents.php', true, $status_data); } /** * Get the database tabs information. * * @return string auto cleanup content. */ public function get_settings_auto_cleanup_contents() { $settings_cleanup_data = $this->get_wp_optimize_schedule_cleanup_settings_data(); return WP_Optimize()->include_template('database/settings-auto-cleanup.php', true, array('show_innodb_option' => WP_Optimize()->template_should_include_data() && $this->optimizer->show_innodb_force_optimize(), 'settings_cleanup_data' => $settings_cleanup_data)); } /** * Get the settings tab information. * * @return string logging settings content. */ public function get_logging_settings_contents() { $loggers_data = $this->get_wp_optimize_logging_settings_data(); return WP_Optimize()->include_template('settings/settings-logging.php', true, array('loggers_data' => $loggers_data)); } /** * Get the database tabs information * * @return string database table optimization rendered content */ public function get_optimizations_table() { $optimization_data = $this->get_wp_optimize_data(); return WP_Optimize()->include_template('database/optimizations-table.php', true, $optimization_data); } /** * [For UpdraftCentral] Returns the file content containing the list of unused images * * @return WP_Error|void */ public function download_csv() { if (!current_user_can(WP_Optimize()->capability_required())) { return $this->request_error('insufficient_privilege'); } WP_Optimize()->get_optimizer()->get_optimization('images')->output_csv(); } /** * [For UpdraftCentral] Retrieves the tabs and their corresponding contents, assets basing * from the current page or section requested (e.g. database, images, cache, minify or settings) * * @param array $params Parameters needed for the requested action * @return array|WP_Error */ public function get_section($params) { if (!current_user_can(WP_Optimize()->capability_required())) { return $this->request_error('insufficient_privilege'); } $section_id = $params['section']; $section = $this->get_section_to_tab_name($section_id); $tabs = WP_Optimize()->get_admin_instance()->get_tabs($section); // We remove the UpdraftCentral management tab when managing WP-Optimize // plugin from the UpdraftCentral dashboard if it exists. if (isset($tabs['updraftcentral'])) unset($tabs['updraftcentral']); $this->load_action_hooks_for_content($section_id); return array( 'tabs' => $tabs, 'tabs_content' => $this->get_tab_contents($tabs, $section), 'assets' => $this->get_localized_variables(), 'wposmush' => $this->get_wposmush(), 'is_premium' => WP_Optimize::is_premium(), 'modal_template' => WP_Optimize()->include_template('modal.php', true), ); } /** * [For UpdraftCentral] Retrieves the list of items to optimize from the current database * * @return array|WP_Error */ public function get_database_tabs_info() { if (!current_user_can(WP_Optimize()->capability_required())) { return $this->request_error('insufficient_privilege'); } return $this->get_database_tabs(); } /** * [For UpdraftCentral] Processes specific Smush commands from ajax requests * * @param array $params Parameters needed for the requested action * @return array|WP_Error */ public function updraft_smush_ajax($params) { if (!current_user_can(WP_Optimize()->capability_required())) { return $this->request_error('insufficient_privilege'); } $subaction = $params['subaction']; $data = $params['data']; $allowed_commands = Updraft_Smush_Manager_Commands::get_allowed_ajax_commands(); if (in_array($subaction, $allowed_commands)) { if (in_array($subaction, array('get_smush_logs', 'process_bulk_smush'))) { switch ($subaction) { case 'get_smush_logs': $results = $this->get_smush_logs(); break; case 'process_bulk_smush': $results = $this->process_bulk_smush($data); break; default: break; } } else { if (!empty($data)) { $results = call_user_func(array(Updraft_Smush_Manager()->commands, $subaction), $data); } else { $results = call_user_func(array(Updraft_Smush_Manager()->commands, $subaction)); } } if (is_wp_error($results)) { return $this->request_error($results->get_error_code(), null, array( 'status' => true, 'error_message' => $results->get_error_message(), 'error_data' => $results->get_error_data(), )); } else { return $results; } } else { return $this->request_error('command_not_found'); } } /** * [For UpdraftCentral] Processes general WP-Optimize commands from ajax requests * * @param array $params Parameters needed for the requested action * @return array|WP_Error */ public function handle_ajax_requests($params) { if (!current_user_can(WP_Optimize()->capability_required())) { return $this->request_error('insufficient_privilege'); } $subaction = $params['subaction']; $data = $params['data']; $response = array(); if (is_multisite() && !current_user_can('manage_network_options')) { $allowed_multisite_commands = apply_filters('wpo_multisite_allowed_commands', array('check_server_status', 'compress_single_image', 'restore_single_image')); if (!in_array($subaction, $allowed_multisite_commands)) { return $this->request_error('network_admin_only'); } } $dismiss_actions = array( 'dismiss_dash_notice_until', 'dismiss_season', 'dismiss_page_notice_until', 'dismiss_notice', 'dismiss_review_notice', ); if (in_array($subaction, $dismiss_actions)) { $options = WP_Optimize()->get_options(); // Some commands that are available via AJAX only. if (in_array($subaction, array('dismiss_dash_notice_until', 'dismiss_season'))) { $options->update_option($subaction, (time() + 366 * 86400)); } elseif (in_array($subaction, array('dismiss_page_notice_until', 'dismiss_notice'))) { $options->update_option($subaction, (time() + 84 * 86400)); } elseif ('dismiss_review_notice' === $subaction) { if (empty($data['dismiss_forever'])) { $options->update_option($subaction, time() + 84 * 86400); } else { $options->update_option($subaction, 100 * (365.25 * 86400)); } } } else { $commands = new WP_Optimize_Commands(); $minify_commands = new WP_Optimize_Minify_Commands(); if (!is_callable(array($commands, $subaction)) && is_callable(array($minify_commands, $subaction))) { $commands = $minify_commands; } if (WP_Optimize::is_premium()) { $cache_commands = new WP_Optimize_Cache_Commands_Premium(); } else { $cache_commands = new WP_Optimize_Cache_Commands(); } if (!is_callable(array($commands, $subaction)) && is_callable(array($cache_commands, $subaction))) { $commands = $cache_commands; } // Check if command is valid if (!is_callable(array($commands, $subaction))) { return $this->request_error('command_not_found'); } else { $response = call_user_func(array($commands, $subaction), $data); if (is_wp_error($response)) { return $this->request_error($response->get_error_code(), null, array( 'error_message' => $response->get_error_message(), 'error_data' => $response->get_error_data(), )); } elseif (empty($response)) { $response = array( 'result' => null ); } else { if (isset($response['status_box_contents'])) { $response['status_box_contents'] = str_replace(array("\n", "\t"), '', $response['status_box_contents']); } } } } return $response; } /** * [For UpdraftCentral] Retrieves a list of posts to purge as options to be displayed under * cache - advanced settings * * @param array $params Parameters needed for the requested action * @return array|WP_Error */ public function get_posts_list($params) { if (!current_user_can(WP_Optimize()->capability_required())) { return $this->request_error('insufficient_privilege'); } $response = array(); if (WP_Optimize::is_premium()) { $commands = new WP_Optimize_Cache_Commands_Premium(); if (is_callable(array($commands, 'get_posts_list'))) { $response = $commands->get_posts_list($params); } } return $response; } /** * [For UpdraftCentral] loads the settings page * * @return void */ public function output_dashboard_settings_tab() { $wpo_admin = WP_Optimize()->get_admin_instance(); if (WP_Optimize()->can_manage_options()) { $loggers_data = $this->get_wp_optimize_logging_settings_data(); $settings_trackback_data = $this->get_wp_optimize_trackback_toggle_settings_data(); $settings_comments_data = $this->get_wp_optimize_comments_toggle_settings_data(); WP_Optimize()->include_template('settings/settings.php', false, array('loggers_data' => $loggers_data, 'settings_trackback_data' => $settings_trackback_data, 'settings_comments_data' => $settings_comments_data)); } else { $wpo_admin->prevent_manage_options_info(); } } /** * [For UpdraftCentral] Retrieves Smush JS variables * * @return array */ private function get_wposmush() { if (!class_exists('Updraft_Smush_Manager')) return array(); $js_variables = Updraft_Smush_Manager()->smush_js_translations(); $js_variables['ajaxurl'] = admin_url('admin-ajax.php'); $js_variables['features'] = Updraft_Smush_Manager()->get_features(); return $js_variables; } /** * [For UpdraftCentral] Execute smush process in bulk * * @param array $data Parameters to be pass as argument for the requested action * @return string */ private function process_bulk_smush($data) { ob_start(); Updraft_Smush_Manager()->commands->process_bulk_smush($data); $content = ob_get_contents(); ob_end_clean(); return $content; } /** * [For UpdraftCentral] Retrieves the content of a Smush log file * * @return string|false|WP_Error */ private function get_smush_logs() { $logfile = Updraft_Smush_Manager()->get_logfile_path(); if (!file_exists($logfile)) { Updraft_Smush_Manager()->write_log_header(); } if (is_file($logfile)) { return file_get_contents($logfile); } else { return $this->request_error('log_file_not_exist'); } } /** * [For UpdraftCentral] Loads the WP-Optimize hooks needed to pull the tab contents for * the requested page/section * * @param string $section_id The id of the page or section where the content is to be pulled from * @return void */ private function load_action_hooks_for_content($section_id) { $wpo = WP_Optimize(); $wpo_admin = $wpo->get_admin_instance(); // Database if ('database' === $section_id) { add_action('wp_optimize_admin_page_WP-Optimize_optimize', array($wpo_admin, 'output_database_optimize_tab'), 20); add_action('wp_optimize_admin_page_WP-Optimize_tables', array($wpo_admin, 'output_database_tables_tab'), 20); add_action('wp_optimize_admin_page_WP-Optimize_settings', array($wpo_admin, 'output_database_settings_tab'), 20); } // Images if ('images' === $section_id) { add_action('wp_optimize_admin_page_wpo_images_smush', array($wpo, 'admin_page_wpo_images_smush')); if (!WP_Optimize::is_premium()) { add_action('wp_optimize_admin_page_wpo_images_unused', array($wpo_admin, 'admin_page_wpo_images_unused')); add_action('wp_optimize_admin_page_wpo_images_lazyload', array($wpo_admin, 'admin_page_wpo_images_lazyload')); } } // Cache if ('cache' === $section_id) { add_action('wp_optimize_admin_page_wpo_cache_cache', array($wpo_admin, 'output_page_cache_tab'), 20); add_action('wp_optimize_admin_page_wpo_cache_preload', array($wpo_admin, 'output_page_cache_preload_tab'), 20); add_action('wp_optimize_admin_page_wpo_cache_advanced', array($wpo_admin, 'output_page_cache_advanced_tab'), 20); add_action('wp_optimize_admin_page_wpo_cache_gzip', array($wpo_admin, 'output_cache_gzip_tab'), 20); add_action('wp_optimize_admin_page_wpo_cache_settings', array($wpo_admin, 'output_cache_settings_tab'), 20); } // Minify if ('minify' === $section_id) { if (class_exists('WP_Optimize_Minify_Admin')) { do_action('wp_optimize_register_admin_content'); } } // Settings if ('settings' === $section_id) { add_action('wp_optimize_admin_page_wpo_settings_settings', array($this, 'output_dashboard_settings_tab'), 20); } } /** * [For UpdraftCentral] Execute the hooks needed to pull the content of the tabs under the requested page/section * * @param array $tabs The list of tabs available under the current page/section * @param string $section The id of the page or section * @return array */ private function get_tab_contents($tabs, $section) { $contents = array(); foreach ($tabs as $tab_id => $tab_description) { ob_start(); // output wrap div for tab with id #wp-optimize-nav-tab-contents-'.$section.'-'.$tab_id echo '<div class="wp-optimize-nav-tab-contents" id="wp-optimize-nav-tab-'.esc_attr($section).'-'.esc_attr($tab_id).'-contents">'; echo '<div class="postbox wpo-tab-postbox">'; // call action for generate tab content. do_action('wp_optimize_admin_page_'.$section.'_'.$tab_id); // closes postbox. echo '</div><!-- END .postbox -->'; // closes tab wrapper. echo '</div><!-- END .wp-optimize-nav-tab-contents -->'; $tab_content = ob_get_contents(); ob_end_clean(); $contents[$tab_id] = $tab_content; } return $contents; } /** * [For UpdraftCentral] Replaces the names/id used in UpdraftCentral with the actual name used in WP-Optimize * * @param string $section_id The id of the page or section * @return string */ private function get_section_to_tab_name($section_id) { $tab = ''; switch ($section_id) { case 'database': $tab = 'WP-Optimize'; break; default: $tab = 'wpo_'.$section_id; break; } return $tab; } /** * [For UpdraftCentral] Retrieves the localized scripts/variables (e.g. translations, etc.) used by WP-Optimize * * @return array */ private function get_localized_variables() { $wpo = WP_Optimize(); $js_variables = $wpo->wpo_js_translations(); $js_variables['loggers_classes_info'] = $wpo->get_loggers_classes_info(); $js_variables['ajaxurl'] = admin_url('admin-ajax.php'); $localized_variables = array( 'wpoptimize' => $js_variables, 'wp_optimize_send_command_data' => array('nonce' => wp_create_nonce('wp-optimize-ajax-nonce')), 'wpo_heartbeat_ajax' => array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('heartbeat-nonce'), 'interval' => WPO_Ajax::HEARTBEAT_INTERVAL ), ); if (WP_Optimize::is_premium()) { $localized_variables = array_merge($localized_variables, array( 'wp_optimize_minify_premium' => array( 'home_url' => home_url() ) )); } return array( 'localize' => $localized_variables, ); } /** * [For UpdraftCentral] Returns a WP_Error response for the current request * * @param string $code The error code * @param ?string $message_key The key to use to query any translatable message if applicable * @param array $additional_data Any additional data to return * @return WP_Error */ private function request_error($code, $message_key = null, $additional_data = array()) { global $updraftcentral_host_plugin; $error_message = $updraftcentral_host_plugin->retrieve_show_message($code); if (!is_null($message_key) && $code !== $message_key) { $error_message = $updraftcentral_host_plugin->retrieve_show_message($message_key); } $data = array( 'result' => false, 'error_code' => $code, 'error_message' => $error_message, 'error' => true, 'code' => $code, 'message' => $error_message, ); if (!empty($additional_data)) { $data = array_merge($data, $additional_data); } return new WP_Error($code, $error_message, $data); } /** * Pulls and return the "WP Optimize" template contents. Primarily used for UpdraftCentral * content display through ajax request. * * @return array An array containing the WPO translations and the "WP Optimize" tab's rendered contents */ public function get_wp_optimize_contents() { $status_data = $this->get_all_status_data(); $optimization_data = $this->get_wp_optimize_data(); $content = WP_Optimize()->include_template('database/optimize-table.php', true, array('optimize_db' => false, 'load_data' => WP_Optimize()->template_should_include_data(), 'does_server_allows_table_optimization' => WP_Optimize()->does_server_allows_table_optimization(), 'optimizations_table_data' => $optimization_data, 'status_data' => $status_data)); if (WP_Optimize()->is_updraft_central_request()) { $content .= $this->get_status_box_contents(); } return array( 'content' => $content, 'translations' => $this->get_js_translation() ); } /** * Pulls and return the "Table Information" template contents. Primarily used for UpdraftCentral * content display through ajax request. * * @return array An array containing the WPO translations and the "Table Information" tab's rendered contents */ public function get_table_information_contents() { $table_list_data = $this->get_table_list_data(); $content = WP_Optimize()->include_template('database/tables.php', true, array('optimize_db' => false, 'load_data' => WP_Optimize()->template_should_include_data(), 'table_list_data' => $table_list_data['data'])); return array( 'content' => $content, 'translations' => $this->get_js_translation() ); } /** * Pulls and return the "Settings" template contents. Primarily used for UpdraftCentral * content display through ajax request. * * @return array An array containing the WPO translations and the "Settings" tab's rendered contents */ public function get_settings_contents() { $admin_settings = '<form action="#" method="post" enctype="multipart/form-data" name="settings_form" id="settings_form">'; $settings_general_data = $this->get_wp_optimize_general_settings_data(); $admin_settings .= WP_Optimize()->include_template('database/settings-general.php', true, $settings_general_data); $settings_cleanup_data = $this->get_wp_optimize_schedule_cleanup_settings_data(); $admin_settings .= WP_Optimize()->include_template('database/settings-auto-cleanup.php', true, array('show_innodb_option' => WP_Optimize()->template_should_include_data() && $this->optimizer->show_innodb_force_optimize(), 'settings_cleanup_data' => $settings_cleanup_data)); $loggers_data = $this->get_wp_optimize_logging_settings_data(); $admin_settings .= WP_Optimize()->include_template('settings/settings-logging.php', true, array('loggers_data' => $loggers_data)); $admin_settings .= '<input id="wp-optimize-settings-save" class="button button-primary" type="submit" name="wp-optimize-settings" value="' . esc_attr__('Save settings', 'wp-optimize') .'" />'; $admin_settings .= '</form>'; $settings_trackback_data = $this->get_wp_optimize_trackback_toggle_settings_data(); $settings_comments_data = $this->get_wp_optimize_comments_toggle_settings_data(); $admin_settings .= WP_Optimize()->include_template('settings/settings-trackback-and-comments.php', true, array('settings_trackback_data' => $settings_trackback_data, 'settings_comments_data' => $settings_comments_data)); $content = $admin_settings; return array( 'content' => $content, 'translations' => $this->get_js_translation() ); } /** * Returns array of translations used by the WPO plugin. Primarily used for UpdraftCentral * consumption. * * @return array The WPO translations */ public function get_js_translation($params = array()) { $translations = WP_Optimize()->wpo_js_translations(); // Make sure that we include the loggers classes info whenever applicable before // returning the translations to UpdraftCentral. if (is_callable(array(WP_Optimize(), 'get_loggers_classes_info'))) { $translations['loggers_classes_info'] = WP_Optimize()->get_loggers_classes_info(); } if (isset($params['return_formatted_response'])) { return array( 'error' => false, 'data' => array( 'translations' => $translations, ) ); } return $translations; } /** * Save settings command. * * @param string $data * @return array */ public function save_settings($data) { parse_str(stripslashes($data), $posted_settings); $saved_settings = $this->options->save_settings($posted_settings); // We now have $posted_settings as an array. return array( 'save_results' => $saved_settings, 'status_box_contents' => $this->get_status_box_contents(), 'optimizations_table' => $this->get_optimizations_table(), 'settings_auto_cleanup_contents' => $this->get_settings_auto_cleanup_contents(), 'logging_settings_contents' => $this->get_logging_settings_contents(), ); } /** * Wipe settings command. * * @return bool|int */ public function wipe_settings() { return $this->options->wipe_settings(); } /** * Save lazy load settings. * * @param string $data * @return array */ public function save_lazy_load_settings($data) { parse_str(stripslashes($data), $posted_settings); return array( 'save_result' => $this->options->save_lazy_load_settings($posted_settings) ); } /** * This sends the selected tick value over to the save function * within class-wp-optimize-options.php * * @param array $data An array of data that includes true or false for click option. * @return array */ public function save_auto_backup_option($data) { return array('save_auto_backup_option' => $this->options->save_auto_backup_option($data)); } /** * Save option which sites to optimize in multisite mode. * * @param array $data Array of settings. * @return bool */ public function save_site_settings($data) { if (!isset($data['wpo-sites'])) { // this means no site selected $data['wpo-sites'] = array(); } return $this->options->save_wpo_sites_option($data['wpo-sites']); } /** * Perform the requested optimization * * @param array $params Should have keys 'optimization_id' and 'data'. * @return array */ public function do_optimization($params) { if (!isset($params['optimization_id'])) { $results = array( 'result' => false, 'messages' => array(), 'errors' => array( __('No optimization was indicated.', 'wp-optimize') ) ); } else { $optimization_id = $params['optimization_id']; $data = $params['data'] ?? array(); $include_ui_elements = $data['include_ui_elements'] ?? false; $optimization = $this->optimizer->get_optimization($optimization_id, $data); $result = is_a($optimization, 'WP_Optimization') ? $optimization->do_optimization() : null; $results = array( 'result' => $result, 'messages' => array(), 'errors' => array(), ); if ($include_ui_elements) { $results['status_box_contents'] = $this->get_status_box_contents(); } if (is_wp_error($optimization)) { $results['errors'][] = $optimization->get_error_message().' ('.$optimization->get_error_code().')'; } if ($include_ui_elements && $optimization->get_changes_table_data()) { $table_list = $this->get_table_list(); $results['table_list'] = $table_list['table_list']; $results['total_size'] = $table_list['total_size']; } } return $results; } /** * Preview command, used to show information about data should be optimized in popup tool. * * @param array $params Should have keys 'optimization_id', 'offset' and 'limit'. * * @return array */ public function preview($params) { if (!isset($params['optimization_id'])) { $results = array( 'result' => false, 'messages' => array(), 'errors' => array( __('No optimization was indicated.', 'wp-optimize') ) ); } else { $optimization_id = $params['optimization_id']; $data = $params['data'] ?? array(); $params['offset'] = isset($params['offset']) ? (int) $params['offset'] : 0; $params['limit'] = isset($params['limit']) ? (int) $params['limit'] : 50; $optimization = $this->optimizer->get_optimization($optimization_id, $data); if (is_a($optimization, 'WP_Optimization')) { if (isset($params['site_id'])) { $optimization->switch_to_blog((int) $params['site_id']); } $result = $optimization->preview($params); } else { $result = null; } $results = array( 'result' => $result, 'messages' => array(), 'errors' => array() ); } return $results; } /** * Get information about requested optimization. * * @param array $params Should have keys 'optimization_id' and 'data'. * @return array */ public function get_optimization_info($params) { if (!isset($params['optimization_id'])) { $results = array( 'result' => false, 'messages' => array(), 'errors' => array( __('No optimization was indicated.', 'wp-optimize') ) ); } else { $optimization_id = $params['optimization_id']; $data = $params['data'] ?? array(); $include_ui_elements = $data['include_ui_elements'] ?? false; $optimization = $this->optimizer->get_optimization($optimization_id, $data); $result = is_a($optimization, 'WP_Optimization') ? $optimization->get_optimization_info() : null; $results = array( 'result' => $result, 'messages' => array(), 'errors' => array(), ); if ($include_ui_elements) { $results['status_box_contents'] = $this->get_status_box_contents(); } } return $results; } /** * Get the data for the tables tab * * @param array $data * @return array */ public function get_table_list($data = array()) { if (isset($data['refresh_plugin_json']) && filter_var($data['refresh_plugin_json'], FILTER_VALIDATE_BOOLEAN)) WP_Optimize()->get_db_info()->update_plugin_json(); $table_list_data = $this->get_table_list_data(); if (WP_Optimize()->is_updraft_central_request()) { return $table_list_data; } $size = $this->optimizer->get_current_db_size(); $tables_data = array( 'table_list' => WP_Optimize()->include_template('database/tables-body.php', true, $table_list_data['data']), 'total_size' => $size[0], ); $filtered_tables_data = apply_filters('wpo_get_tables_data', $tables_data); if (!empty($filtered_tables_data) && is_array($filtered_tables_data)) return $filtered_tables_data; return $tables_data; } /** * Get the database tabs information * * @return array */ public function get_database_tabs() { return array_merge(array('optimizations' => $this->get_optimizations_table(), 'does_server_allows_table_optimization' => WP_Optimize()->does_server_allows_table_optimization()), $this->get_table_list()); } /** * Do action wp_optimize_after_optimizations * used in ajax request after all optimizations completed * * @return boolean */ public function optimizations_done() { $this->options->update_option('total-cleaned', 0); // Run action after all optimizations completed. do_action('wp_optimize_after_optimizations'); return true; } /** * Return information about all optimizations. * * @param array $params * @return array */ public function get_optimizations_info($params) { $this->wpo_sites = $params['wpo-sites'] ?? 0; add_filter('get_optimization_blogs', array($this, 'get_optimization_blogs_filter')); $results = array(); $optimizations = $this->optimizer->get_optimizations(); foreach ($optimizations as $optimization_id => $optimization) { if (false === $optimization->display_in_optimizations_list()) continue; $results[$optimization_id] = $optimization->get_settings_html(); } return $results; } /** * Filter for get_optimizations_blogs function, used in get_optimizations_info command. * Not intended for direct usage as a command (is used internally as a WP filter) * * The class variable $wpo_sites is used for performing the filtering. * * @param array $sites - unfiltered list of sites * @return array - after filtering */ public function get_optimization_blogs_filter($sites) { $sites = array(); if (!empty($this->wpo_sites)) { foreach ($this->wpo_sites as $site) { if ('all' !== $site) $sites[] = $site; } } return $sites; } /** * Checks overdue crons and return message * * @return array */ public function check_overdue_crons() { $overdue_crons = WP_Optimize()->howmany_overdue_crons(); if ($overdue_crons >= 4) { return array('m' => WP_Optimize()->show_admin_warning_overdue_crons($overdue_crons)); } return array(); } /** * Enable or disable Gzip compression. * * @param array $params - ['enable' => true|false] * @return array */ public function enable_gzip_compression($params) { return WP_Optimize()->get_gzip_compression()->enable_gzip_command_handler($params); } /** * Get the current gzip compression status * * @return array */ public function get_gzip_compression_status() { $status = WP_Optimize()->get_gzip_compression()->is_gzip_compression_enabled(true); return is_wp_error($status) ? array('error' => __('We could not determine if Gzip compression is enabled.', 'wp-optimize'), 'code' => $status->get_error_code(), 'message' => $status->get_error_message()) : array('status' => $status); } /** * Import WP-Optimize settings. * * @param array $params array with 'settings' item where 'settings' json-encoded string. * * @return array - the results of the import operation */ public function import_settings($params) { if (empty($params['settings'])) { return array('errors' => array(__('Please upload a valid settings file.', 'wp-optimize'))); } $settings = json_decode($params['settings'], true); // check if valid json file posted if (JSON_ERROR_NONE !== json_last_error() || empty($settings)) { return array('errors' => array(__('Please upload a valid settings file.', 'wp-optimize'))); } $cache_settings = $settings['cache_settings']; $minify_settings = $settings['minify_settings']; $smush_settings = $settings['smush_settings']; $database_settings = $settings['database_settings']; $cache = WP_Optimize()->get_page_cache(); $cache->create_folders(); if ($cache_settings['enable_page_caching']) { $cache->enable(); } $wpo_browser_cache = WP_Optimize()->get_browser_cache(); if (isset($cache_settings['enable_browser_cache']) && $cache_settings['enable_browser_cache']) { $browser_cache = array( 'browser_cache_expire_days' => $cache_settings['browser_cache_expire_days'], 'browser_cache_expire_hours' => $cache_settings['browser_cache_expire_hours'] ); $wpo_browser_cache->enable_browser_cache_command_handler($browser_cache); } $message = ''; $cache_result = WP_Optimize()->get_page_cache()->config->update($cache_settings); $minify_result = WP_Optimize()->get_minify()->minify_commands->save_minify_settings($minify_settings); $smush_result = WP_Optimize()->get_task_manager()->commands->update_smush_options($smush_settings); $webp_result = WP_Optimize()->get_task_manager()->commands->update_webp_options($smush_settings); $this->save_settings($database_settings); if (is_wp_error($cache_result)) { $message .= $cache_result->get_error_message() . PHP_EOL; } if (!$minify_result['success']) { $message .= isset($minify_result['message']) ? $minify_result['message'] . PHP_EOL : ''; $message .= isset($minify_result['error']) ? $minify_result['error'] . PHP_EOL : ''; } if (is_wp_error($smush_result)) { $message .= $smush_result->get_error_message() . PHP_EOL; } if (is_wp_error($webp_result)) { $message .= $webp_result->get_error_message() . PHP_EOL; } return array( 'success' => true, 'message' => empty($message) ? __('The settings were imported successfully.', 'wp-optimize') : $message ); } /** * Dismiss install or updated notice * * @return array */ public function dismiss_install_or_update_notice() { if (!is_a(WP_Optimize()->get_install_or_update_notice(), 'WP_Optimize_Install_Or_Update_Notice') || !is_callable(array(WP_Optimize()->get_install_or_update_notice(), 'dismiss'))) { return array('errors' => array('The notice could not be dismissed. The method "dismiss" on the object instance "install_or_update_notice" does not seem to exist.')); } if (!WP_Optimize()->get_install_or_update_notice()->dismiss()) { return array('errors' => array('The notice could not be dismissed. The settings could not be updated')); } return array(); } /** * Run images trash command. * * @param array $params * * @return array */ public function images_trash_command($params) { if (!class_exists('WP_Optimize_Images_Trash_Manager_Commands')) { return array( 'errors' => array('WP_Optimize_Images_Trash_Manager_Commands class not found'), ); } // get posted command. $trash_command = $params['images_trash_command'] ?? ''; // check if command is allowed. $allowed_commands = WP_Optimize_Images_Trash_Manager_Commands::get_allowed_ajax_commands(); if (!in_array($trash_command, $allowed_commands)) { return array( 'errors' => array('No such command found'), ); } $results = call_user_func(array(WP_Optimize_Images_Trash_Manager()->commands, $trash_command), $params); if (is_wp_error($results)) { $results = array( 'errors' => array($results->get_error_message()), ); } return $results; } /** * Power tweak handling * * @param array $params * @return array */ public function power_tweak($params) { global $wp_optimize_premium; if (!is_a($wp_optimize_premium, 'WP_Optimize_Premium') || !property_exists($wp_optimize_premium, 'power_tweaks') || !isset($params['sub_action'])) return array( 'errors' => array(__('No such command found', 'wp-optimize')), ); $action = $params['sub_action']; $data = $params['data'] ?: array(); if (!isset($data['tweak'])) return array( 'errors' => array(__('No tweak provided', 'wp-optimize')) ); $tweak = sanitize_title($data['tweak']); $pt = $wp_optimize_premium->power_tweaks; switch($action) { case 'activate': $result = $pt->activate($tweak); break; case 'deactivate': $result = $pt->deactivate($tweak); break; case 'run': $result = $pt->run($tweak); break; } if ($result && !is_wp_error($result)) { return is_array($result) ? array_merge(array('success' => true), $result) : array('success' => true, 'message' => $result); } else { // translators: %s is an action/command $error_message = is_wp_error($result) ? $result->get_error_message() : sprintf(__('The command %s failed', 'wp-optimize'), $action); return array( 'success' => false, 'errors' => array($error_message) ); } } /** * Ignores the table deletion warning for the current user * * @return array */ public function user_ignores_table_deletion_warning() { return array( 'success' => update_user_meta(get_current_user_id(), 'wpo-ignores-table-deletion-warning', true) ); } /** * Ignores the post meta deletion warning for the current user * * @return array */ public function user_ignores_post_meta_deletion_warning() { return array( 'success' => update_user_meta(get_current_user_id(), 'wpo-ignores-post-meta-deletion-warning', true) ); } /** * Ignores the orphaned relationship data deletion warning for the current user * * @return array */ public function user_ignores_orphaned_relationship_data_deletion_warning() { return array( 'success' => update_user_meta(get_current_user_id(), 'wpo-ignores-orphaned-relationship-data-deletion-warning', true) ); } /** * Exports unused images as a CSV file to the `uploads` folder * * @return array */ public function export_csv() { WP_Optimization_images::instance()->output_csv(); return array( 'success' => true ); } /** * Build the HTML for the status report tab * * @return array */ public function generate_status_report() { $status_data = $this->get_wp_optimize_status_report_data(); $html = WP_Optimize()->include_template('status/status-page-ajax.php', true, array( 'report_data' => $status_data['report_data'] )); return array( 'success' => true, 'html' => $html, 'replaceable_md_tags' => $status_data['replaceable_md_tags'] ); } /** * Gz compress text logs using `gzencode` to generate valid gzip files * * @return array */ public function generate_logs_zip() { $wpo_server_information = new WP_Optimize_Server_Information(); $logs = $wpo_server_information->get_logs(); $gz_available = function_exists('gzencode'); $data = array(); foreach ($logs as $path => $content) { if ($gz_available) { $log_content = gzencode($content); if (false === $log_content) { $log_content = $content; $gz_available = false; } } else { $log_content = $content; } $data[] = array( 'src' => base64_encode($log_content), 'name' => basename($path), 'compressed' => $gz_available ); } return array( 'success' => true, 'data' => $data ); } /** * Save images dimensions options * * @param array $settings Settings data * @return array */ public function save_images_dimension_option($settings) { $options = WP_Optimize()->get_options(); if (!empty($settings["images_dimensions"]) && "true" === $settings["images_dimensions"]) { $is_updated = $options->update_option('image_dimensions', 1); } else { $is_updated = $options->update_option('image_dimensions', 0); } if ($is_updated || $options->update_option('image_dimensions_ignore_classes', sanitize_text_field($settings['ignore_classes']))) { wpo_cache_flush(); } return array( 'success' => true ); } /** * Truncate 404 Logs Table * * @return array */ public function truncate_404_logs() { global $wpdb; $log_table_name = WP_Optimize_Table_404_Detector::get_instance()->get_table_name(); $success = false; $message = __('No 404 logs found.', 'wp-optimize'); // Check if the table has any rows $log_count = (int) $wpdb->get_var("SELECT COUNT(*) FROM `" .esc_sql($log_table_name) . "`"); if ($log_count > 0) { if ($wpdb->query("TRUNCATE TABLE `" .esc_sql($log_table_name) . "`")) { $success = true; // translators: %s is the number of logs deleted $message = sprintf(_n('%s entry deleted from the 404 error log.', '%s entries deleted from the 404 error log.', $log_count, 'wp-optimize'), $log_count); } else { $message = __('An error occurred while deleting the 404 logs.', 'wp-optimize'); } } return array( 'success' => $success, 'message' => $message ); } // UDC specific endpoints. /** * Get multiple widgets data. * * @param array $args Args. * * @return array */ public function get_widgets_data($args) { // Widgets. $widgets = isset($args['widgets']) ? $args['widgets'] : array(); // Return early if no widgets supplied. if (!is_array($widgets) || empty($widgets)) { return array('error' => false, 'data' => array()); } // Get the data for each widget. $data = array(); // Loop through the widgets and get their data. foreach ($widgets as $widget) { $method = 'get_' . $widget . '_data'; if (method_exists($this, $method)) { $data[$widget] = $this->$method($args); } } return array('error' => false, 'data' => $data); } // Helper functions. /** * Get the data for tables. * * @return array */ public function get_table_list_data() { $wp_optimize = WP_Optimize(); $wp_optimize->get_db_info()->update_plugin_json(); $size = $this->optimizer->get_current_db_size(); $table_list = array(); // Check for InnoDB tables. // Check for windows servers. $tablesstatus = $wp_optimize->get_optimizer()->get_tables(); $is_multisite_mode = $wp_optimize->is_multisite_mode(); $no = 0; $row_usage = 0; $data_usage = 0; $index_usage = 0; $overhead_usage = 0; $small_overhead_size = 1048576; foreach ($tablesstatus as $tablestatus) { $table_info = array(); $table_info['index'] = ++$no; $table_info['table_name'] = $tablestatus->Name; $table_info['Engine'] = $tablestatus->Engine; $table_info['is_optimizable'] = $tablestatus->is_optimizable ? 1 : 0; $table_info['blog_id'] = $tablestatus->blog_id; $table_info['plugin_status'] = $tablestatus->plugin_status; $table_info['Rows'] = intval($tablestatus->Rows); $table_info['Data_length'] = intval($tablestatus->Data_length); $table_info['Formatted_Data_length'] = $wp_optimize->format_size($tablestatus->Data_length); $table_info['Index_length'] = $tablestatus->Index_length; $table_info['Formatted_Index_length'] = $wp_optimize->format_size($tablestatus->Index_length); $table_info['Data_free'] = intval($tablestatus->Data_free); $table_info['Formatted_Data_free'] = $wp_optimize->format_size($tablestatus->Data_free); $table_info['Data_should_be_cleared'] = intval($tablestatus->Data_free) > $small_overhead_size ? 1 : 0; $table_info['wp_core_table'] = $tablestatus->wp_core_table; $table_list[] = $table_info; $row_usage += $tablestatus->Rows; $data_usage += $tablestatus->Data_length; $index_usage += $tablestatus->Index_length; $overhead_usage += $tablestatus->Data_free; } $db_info = $this->optimizer->get_current_db_size(); return array( 'error' => false, 'data' => array( 'is_multisite_mode' => $is_multisite_mode, 'closed_plugins' => array('404-monitor', 'redirections'), 'database_name' => DB_NAME, 'database_size' => $db_info[0], 'optimize_db' => false, 'table_list_object_format' => $tablesstatus, 'load_data' => WP_Optimize()->template_should_include_data(), 'table_list' => $table_list, 'total_size' => $size[0], 'small_overhead_size' => $small_overhead_size, 'no' => $no, 'no_fomatted' => number_format_i18n($no), 'row_usage' => number_format_i18n($row_usage), 'data_usage' => $wp_optimize->format_size($data_usage), 'index_usage' => $wp_optimize->format_size($index_usage), 'tables_count' => count($table_list), // translators: %s is the number of table(s). 'formatted_tables_count' => sprintf(_n('%s Table', '%s Tables', count($table_list), 'wp-optimize'), number_format_i18n(count($table_list))), 'overhead_usage' => $overhead_usage, 'overhead_usage_formatted' => $wp_optimize->format_size($overhead_usage), 'translations' => array( 'database_name' => __('Database Name', 'wp-optimize'), 'refresh_data' => __('Refresh Data', 'wp-optimize'), 'refreshing' => __('Refreshing...', 'wp-optimize'), 'number' => __('No.', 'wp-optimize'), 'table' => __('Table', 'wp-optimize'), 'records' => __('Records', 'wp-optimize'), 'data_size' => __('Data Size', 'wp-optimize'), 'index_size' => __('Index Size', 'wp-optimize'), 'type' => __('Type', 'wp-optimize'), 'overhead' => __('Overhead', 'wp-optimize'), 'total' => __('Total', 'wp-optimize'), 'search_tables' => __('Search tables', 'wp-optimize'), 'total_size_of_database' => __('Total size of database', 'wp-optimize'), ), ) ); } /** * Get the data of wp-optimize widget. * * @return array */ private function get_wp_optimize_data() { $wp_optimize = WP_Optimize(); $optimizations = $this->optimizer->sort_optimizations($this->optimizer->get_optimizations()); $does_server_allows_table_optimization = $wp_optimize->does_server_allows_table_optimization(); $optimizations_data = array(); foreach ($optimizations as $id => $optimization) { if ('optimizetables' == $id && false === $does_server_allows_table_optimization) continue; // If we don't want to show optimization on the first tab. if (false === $optimization->display_in_optimizations_list()) continue; // This is an array, with attributes dom_id, activated, settings_label, info; all values are strings. $optimization_data = $optimization->get_settings_html(); $optimization_data['info_raw'] = $optimization_data['info']; $optimization_data['info'] = '<div>' . preg_replace('/<a\b[^>]*>(.*?)<\/a>/i', '$1', $optimization_data['info']) . '</div>'; $optimization_data['disable_optimization_button'] = false; $optimization_data['run_sort_order'] = $optimization->get_run_sort_order(); // Check if the DOM is optimize-db to generate a list of tables. if ('optimize-db' == $optimization_data['dom_id']) { $table_list = $this->optimizer->get_table_information(); // Make sure that optimization_table_inno_db is set. if ($table_list['inno_db_tables'] > 0 && 0 === $table_list['is_optimizable'] && 0 === $table_list['non_inno_db_tables']) { $optimization_data['disable_optimization_button'] = true; $optimization_data['activated'] = ''; } } $optimization_data['id'] = $id; $optimizations_data[] = $optimization_data; } // Backup checkbox name. $backup_checkbox_name = 'enable-auto-backup'; return array( 'items' => $optimizations_data, 'optimize_button_multiple_caption' => __('Optimize selected', 'wp-optimize'), 'optimize_button_caption' => apply_filters('wpo_run_button_caption', __('Optimize all', 'wp-optimize')), 'backup_checkbox_name' => $backup_checkbox_name, 'backup_enabled' => 'true' == $this->options->get_option($backup_checkbox_name, 'false'), 'backup_checkbox_label' => __('Take backup before optimize', 'wp-optimize'), ); } /** * Get wpo status data. * * @return array */ private function get_status_data() { $status_data = $this->get_all_status_data(); $data = array( 'statuses' => array(), 'test' => $status_data, ); // Schedule optimization. $schedule_optimization_description = __('Scheduled optimization is currently disabled.', 'wp-optimize'); $schedule_optimization_icon = 'error'; if (!empty($status_data['scheduled_optimizations_enabled'])) { if ('Never' === $status_data['last_optimized']) { $schedule_optimization_description = __('There was no scheduled optimization.', 'wp-optimize'); $schedule_optimization_icon = 'warning'; } else { $lastopt = $status_data['last_optimized']; if (is_numeric($status_data['last_optimized'])) { $lastopt = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $status_data['last_optimized'] + ( get_option('gmt_offset') * HOUR_IN_SECONDS )); } // translators: %s is the last schedule optimization run date. $schedule_optimization_description = sprintf(esc_html__('Last scheduled optimization was at %s', 'wp-optimize'), esc_html($lastopt)); $schedule_optimization_icon = 'success'; } } $data['statuses'][] = array( 'title' => __('Schedule Optimization', 'wp-optimize'), 'description' => $schedule_optimization_description, 'icon' => $schedule_optimization_icon, ); // Schedule cleaning. $data['statuses'][] = array( 'title' => __('Schedule Cleaning', 'wp-optimize'), 'description' => empty($status_data['scheduled_optimizations_enabled']) ? __('Scheduled cleaning is currently disabled.', 'wp-optimize') : __('Scheduled cleaning is enabled.', 'wp-optimize'), 'icon' => empty($status_data['scheduled_optimizations_enabled']) ? 'warning' : 'success', ); // Data retention. $data['statuses'][] = array( 'title' => __('Data Retention', 'wp-optimize'), 'description' => empty($status_data['retention_enabled']) ? __('The system is not keeping recent data or any revisions.', 'wp-optimize') : __('Data retention enabled.', 'wp-optimize'), 'icon' => empty($status_data['retention_enabled']) ? 'error' : 'success', ); return $data; } /** * Get all status data. * * @return array */ private function get_all_status_data() { $wp_optimize = WP_Optimize(); $retention_enabled = $this->options->get_option('retention-enabled', 'false') === 'true'; $retention_period = $this->options->get_option('retention-period', '2'); $admin_page_url = $this->options->admin_page_url(); $revisions_retention_enabled = $this->options->get_option('revisions-retention-enabled', 'false') === 'true'; $revisions_retention_count = $this->options->get_option('revisions-retention-count', '2'); $last_optimized = $this->options->get_option('last-optimized', 'Never'); if (!empty($last_optimized) && is_numeric($last_optimized)) { $last_optimized = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $last_optimized + (get_option('gmt_offset') * HOUR_IN_SECONDS)); } $scheduled_optimizations_enabled = false; if (WP_Optimize::is_premium()) { $wp_optimize_premium = WP_Optimize_Premium(); $scheduled_optimizations = $wp_optimize_premium->get_scheduled_optimizations(); if (!empty($scheduled_optimizations)) { foreach ($scheduled_optimizations as $optimization) { if (isset($optimization['status']) && 1 === absint($optimization['status'])) { $scheduled_optimizations_enabled = true; break; } } } } else { $scheduled_optimizations_enabled = $this->options->get_option('schedule', 'false') == 'true'; } $total_cleaned = null; $total_cleanup_size = ''; $corrupted_tables_count = null; $next_optimization_timestamp = 0; if ($scheduled_optimizations_enabled) { $next_optimization_timestamp = wp_next_scheduled('wpo_cron_event2'); $filtered_next_optimization_timestamp = apply_filters('wpo_cron_next_event', $next_optimization_timestamp); $next_optimization_timestamp = is_int($filtered_next_optimization_timestamp) ? $filtered_next_optimization_timestamp : $next_optimization_timestamp; if ($next_optimization_timestamp) { $next_optimization_timestamp = $next_optimization_timestamp + 60 * 60 * get_option('gmt_offset'); $wp_optimize->cron_activate(); } $total_cleaned = $this->options->get_option('total-cleaned'); $total_cleaned_num = floatval($total_cleaned); if ($total_cleaned_num > 0) { $total_cleanup_size = $wp_optimize->format_size($total_cleaned); } $corrupted_tables_count = $this->options->get_option('corrupted-tables-count', 0); } return array( 'last_optimized' => $last_optimized, 'total_cleaned' => $total_cleaned, 'total_cleanup_size' => $total_cleanup_size, 'corrupted_tables_count' => $corrupted_tables_count, 'admin_page_url' => $admin_page_url, 'retention_enabled' => $retention_enabled, 'retention_period' => $retention_period, 'revisions_retention_enabled' => $revisions_retention_enabled, 'revisions_retention_count' => $revisions_retention_count, 'scheduled_optimizations_enabled' => $scheduled_optimizations_enabled, 'next_optimization_timestamp' => $next_optimization_timestamp, ); } /** * Get wp-optimize tab top nav data. * * @return array */ private function get_wp_optimize_top_nav_data() { return array( 'title' => __('Performance Overview', 'wp-optimize'), 'table_info' => __('Table Info', 'wp-optimize'), 'performance_settings' => __('Performance Settings', 'wp-optimize'), ); } /** * Get wp-optimize tab top nav settings page data. * * @return array */ private function get_wp_optimize_settings_top_nav_data() { return array( 'title' => __('Performance Settings', 'wp-optimize'), 'settings_saved_prompt' => __('Changes saved automatically', 'wp-optimize'), 'settings_not_saved_prompt' => __('Changes not saved - please fill all the fields', 'wp-optimize'), ); } /** * Get if wp-optimize premium is installed. * * @return array */ private function get_is_premium_data() { $is_premium = WP_Optimize::is_premium(); $upgrade_to_premium_data = array(); if (false === $is_premium) { $upgrade_to_premium_data = array( 'heading' => __('WP-Optimize premium', 'wp-optimize'), 'checklist' => array( __('Optimize individual tables', 'wp-optimize'), __('Sophisticated scheduling', 'wp-optimize'), __('Lazy loading', 'wp-optimize'), __('Optimization preview', 'wp-optimize'), __('More caching options', 'wp-optimize'), __('Remove unwanted images', 'wp-optimize'), __('Multi language & currency support', 'wp-optimize'), ), 'cta' => array( 'text' => __('Upgrade Now', 'wp-optimize'), 'url' => 'https://teamupdraft.com/wp-optimize/pricing/', ), ); } return array( 'is_premium' => $is_premium, 'upgrade_to_premium_data' => $upgrade_to_premium_data, ); } /** * WIP: Get system overview data. * * @return array */ private function get_system_overview_data() { $wp_optimize = WP_Optimize(); $status_data = $this->get_all_status_data(); // Data. $data = array( 'data' => array(), ); // Lazy load. $lazy_load_settings = $this->options->get_option('lazyload', array( 'images' => false, 'iframes' => false, 'skip_classes' => '', )); $lazy_load_enabled = $lazy_load_settings['images'] || $lazy_load_settings['iframes']; if (WP_Optimize::is_premium()) { $lazy_load_enabled = $lazy_load_enabled || $lazy_load_settings['backgrounds']; } $data['data'][] = array( 'title' => __('Lazy loading', 'wp-optimize'), 'description' => $lazy_load_enabled ? __('Enabled', 'wp-optimize') : __('Disabled', 'wp-optimize'), 'status' => $lazy_load_enabled ? 'success' : 'error', ); // Page caching. $cache = $wp_optimize->get_page_cache(); $page_caching_enabled = $cache->is_enabled(); $data['data'][] = array( 'title' => __('Page caching', 'wp-optimize'), 'description' => $page_caching_enabled ? __('Enabled', 'wp-optimize') : __('Disabled', 'wp-optimize'), 'status' => $page_caching_enabled ? 'success' : 'error', ); // Schedule cleaning. $data['data'][] = array( 'title' => __('Scheduled clean-up', 'wp-optimize'), 'description' => empty($status_data['scheduled_optimizations_enabled']) ? __('Disabled', 'wp-optimize') : __('Enabled', 'wp-optimize'), 'status' => empty($status_data['scheduled_optimizations_enabled']) ? 'error' : 'success', ); if (!empty($status_data['scheduled_optimizations_enabled'])) { $data['data'][] = array( 'title' => __('Next scheduled date', 'wp-optimize'), 'description' => esc_html(gmdate(get_option('date_format') . ' ' . get_option('time_format'), $status_data['next_optimization_timestamp'])), 'status' => '', ); } return $data; } /** * Get wp-optimize general settings data. * * @return array */ private function get_wp_optimize_general_settings_data() { $retention_period = max((int) $this->options->get_option('retention-period', '2'), 1); $retention_enabled = 'true' === $this->options->get_option('retention-enabled'); $revisions_retention_count = (int) $this->options->get_option('revisions-retention-count', '2'); $revisions_retention_enabled = 'true' === $this->options->get_option('revisions-retention-enabled'); return array( 'retention_period' => $retention_period, 'retention_enabled' => $retention_enabled, 'revisions_retention_count' => $revisions_retention_count, 'revisions_retention_enabled' => $revisions_retention_enabled, ); } /** * Get wp-optimize trackback settings data. * * @return array */ private function get_wp_optimize_trackback_toggle_settings_data() { $wp_optimize = WP_Optimize(); $trackback_action_arr = $this->options->get_option('trackbacks_action', array()); $enabled = false; $last_action_timestamp = ''; $empty = true; if (!empty($trackback_action_arr)) { $empty = false; $last_action_timestamp = $wp_optimize->format_date_time($trackback_action_arr['timestamp']); if ($trackback_action_arr['action']) { $enabled = true; } } return array( 'enabled' => $enabled, 'last_action_timestamp' => $last_action_timestamp, 'empty' => $empty ); } /** * Get wp-optimize comments settings data. * * @return array */ private function get_wp_optimize_comments_toggle_settings_data() { $wp_optimize = WP_Optimize(); $comments_action_arr = $this->options->get_option('comments_action', array()); $enabled = false; $last_action_timestamp = ''; $empty = true; if (!empty($comments_action_arr)) { $empty = false; $last_action_timestamp = $wp_optimize->format_date_time($comments_action_arr['timestamp']); if ($comments_action_arr['action']) { $enabled = true; } } return array( 'enabled' => $enabled, 'last_action_timestamp' => $last_action_timestamp, 'empty' => $empty ); } /** * Get wp-optimize logging settings. * * @return array */ private function get_wp_optimize_logging_settings_data() { $wp_optimize = WP_Optimize(); $logger_classes_info = $wp_optimize->get_loggers_classes_info(); $logger_classes = array(); $logger_classes_fields = array(); foreach ($logger_classes_info as $logger_class => $logger_class_data) { if (empty($logger_class_data['available'])) { continue; } $logger_classes[] = array( 'value' => $logger_class, 'name' => $logger_class_data['description'], ); // For now we only have one option for all the fields, therefore taking only one. foreach ($logger_class_data['options'] as $name => $value) { $logger_class_field_data = array( 'name' => $name, 'validator' => '', 'placeholder' => '', 'controller_value' => $logger_class, ); if (is_array($value)) { $logger_class_field_data['validator'] = isset($value[1]) ? $value[1] : ''; $logger_class_field_data['placeholder'] = isset($value[0]) ? $value[0] : ''; } else { $logger_class_field_data['placeholder'] = $value; } $logger_classes_fields[] = $logger_class_field_data; } } $loggers_data = array( 'loggers_classes_info' => $logger_classes_info, 'logger_classes' => $logger_classes, 'logger_classes_fields' => $logger_classes_fields, 'existing_loggers' => array(), ); $loggers = $wp_optimize->wpo_loggers(); foreach ($loggers as $logger) { $logger_data = array( 'id' => strtolower(get_class($logger)), 'status' => ($logger->is_enabled() && $logger->is_available()) ? 'active' : 'inactive', 'status_text' => ($logger->is_enabled() && $logger->is_available()) ? __('Active', 'wp-optimize') : __('Inactive', 'wp-optimize'), 'existing_logger_classes' => array(), 'existing_logger_classes_fields' => array(), 'description' => $logger->get_description(), 'options_text' => $logger->get_options_text(), 'options_list' => array(), 'is_enabled' => $logger->is_enabled(), 'is_available' => $logger->is_available() ); $options_list = $logger->get_options_list(); $options_values = $logger->get_options_values(); $options = array(); if (!empty($options_list)) { foreach ($options_list as $option_name => $placeholder) { // check if settings item defined as array. if (is_array($placeholder)) { $validate = $placeholder[1]; $placeholder = $placeholder[0]; } else { $validate = ''; } $data_validate_attr = ('' !== $validate ? 'data-validate="'.esc_attr($validate).'"' : ''); $options[$option_name] = array( 'name' => $option_name, 'placeholder' => $placeholder, 'value' => $options_values[$option_name], 'data_validate_attr' => $data_validate_attr, ); } $logger_data['options_list'] = $options; } foreach ($loggers_data['logger_classes'] as $classes) { $logger_data['existing_logger_classes'][] = array( 'value' => $classes['value'], 'name' => $classes['name'], 'selected' => $logger_data['id'] === $classes['value'], ); } foreach ($loggers_data['logger_classes_fields'] as $field) { // If the field has existing value fill it else add as it is. if (!empty($options[$field['name']])) { $field['value'] = $options[$field['name']]['value']; $field['selected'] = true; $logger_data['existing_logger_classes_fields'][] = $field; } else { $logger_data['existing_logger_classes_fields'][] = $field; } } $loggers_data['existing_loggers'][] = $logger_data; } return $loggers_data; } /** * Get wp-optimize schedule cleanup settings data. * * @return array */ private function get_wp_optimize_schedule_cleanup_settings_data() { $is_premium = WP_Optimize::is_premium(); $return_data = array( 'is_premium' => $is_premium, 'data' => array(), ); $scheduled_optimizations_enabled = false; $wp_optimize = WP_Optimize(); if (!$is_premium) { $enabled = 'true' === $this->options->get_option('schedule'); $schedule_type_saved_id = $this->options->get_option('schedule-type', 'wpo_weekly'); // Backwards compatibility: if ('wpo_otherweekly' == $schedule_type_saved_id) $schedule_type_saved_id = 'wpo_fortnightly'; $schedule_options = array( array( 'id' => 'wpo_daily', 'label' => __('Daily', 'wp-optimize'), 'selected' => 'wpo_daily' === $schedule_type_saved_id, ), array( 'id' => 'wpo_weekly', 'label' => __('Weekly', 'wp-optimize'), 'selected' => 'wpo_weekly' === $schedule_type_saved_id, ), array( 'id' => 'wpo_fortnightly', 'label' => __('Fortnightly', 'wp-optimize'), 'selected' => 'wpo_fortnightly' === $schedule_type_saved_id, ), array( 'id' => 'wpo_monthly', 'label' => __('Monthly (approx. - every 30 days)', 'wp-optimize'), 'selected' => 'wpo_monthly' === $schedule_type_saved_id, ), ); $wpo_auto_options = $this->options->get_option('auto'); $optimizations = $this->optimizer->sort_optimizations($this->optimizer->get_optimizations()); $optimizations_data = array(); foreach ($optimizations as $optimization) { if (empty($optimization->available_for_auto)) continue; $auto_id = $optimization->get_auto_id(); $auto_dom_id = 'wp-optimize-auto-'.$auto_id; $setting_activated = (empty($wpo_auto_options[$auto_id]) || 'false' == $wpo_auto_options[$auto_id]) ? false : true; $optimizations_data[] = array( 'id' => $auto_id, 'dom_id' => $auto_dom_id, 'activated' => $setting_activated, 'label' => $optimization->get_auto_option_description(), ); } $next_optimization_timestamp = 0; $scheduled_optimizations_enabled = $this->options->get_option('schedule', 'false') == 'true'; if ($scheduled_optimizations_enabled) { $next_optimization_timestamp = apply_filters('wpo_cron_next_event', wp_next_scheduled('wpo_cron_event2')); if ($next_optimization_timestamp) { $next_optimization_timestamp = $next_optimization_timestamp + 60 * 60 * get_option('gmt_offset'); } } $return_data['data'] = array( 'enabled' => $enabled, 'schedule_options' => $schedule_options, 'schedule_type_saved_id' => $schedule_type_saved_id, 'optimizations' => $optimizations_data, 'next_optimization' => $next_optimization_timestamp ? esc_html(gmdate(get_option('date_format') . ' ' . get_option('time_format'), $next_optimization_timestamp)) : '', 'premium_version_link' => $wp_optimize->premium_version_link, 'enable_schedule' => $this->options->get_option('schedule'), ); } else { $wp_optimize_premium = WP_Optimize_Premium(); $auto_options = $wp_optimize_premium->get_scheduled_optimizations(); $next_optimization_timestamp = 0; if (!empty($auto_options)) { foreach ($auto_options as $optimization) { if (isset($optimization['status']) && 1 == $optimization['status']) { $scheduled_optimizations_enabled = true; break; } } } $all_provided_optimizations = array_values(WP_Optimize_Premium::get_auto_optimizations()); $all_schedule_types = WP_Optimize_Premium::get_schedule_types(); $week_days = WP_Optimize_Premium::get_week_days(); $days = WP_Optimize_Premium::get_days(); $weeks = array('1st' => __('1st', 'wp-optimize'), '2nd' => __('2nd', 'wp-optimize')); $optimizations = array(); foreach ($auto_options as $index => $event) { $optimization = array( 'index' => $index, ); if (!isset($event['optimization'])) { $event['optimization'] = array(); } foreach ($event as $key => $value) { switch ($key) { case 'optimization': $optimization['optimization'] = array(); foreach ($all_provided_optimizations as $this_optimization) { if (in_array($this_optimization['id'], $value)) { $this_optimization['selected'] = true; } $optimization['optimization'][] = $this_optimization; } break; case 'schedule_type': $optimization['schedule_types'] = array(); foreach ($all_schedule_types as $key => $this_schedule_value) { $this_schedule_type = array(); $this_schedule_type['label'] = $this_schedule_value; $this_schedule_type['selected'] = $key === $value; $this_schedule_type['value'] = $key; $optimization['schedule_types'][] = $this_schedule_type; } break; case 'date': $optimization['date'] = $value; break; case 'time': $optimization['time'] = $value; break; case 'week': $optimization['weeks'] = array(); foreach ($weeks as $key => $this_week_value) { $this_week = array(); $this_week['label'] = $this_week_value; $this_week['selected'] = $key === $value; $this_week['value'] = $key; $optimization['weeks'][] = $this_week; } break; case 'day': $optimization['days'] = array(); foreach ($week_days as $key => $this_week_day_value) { $this_week_day = array(); $this_week_day['label'] = $this_week_day_value; $this_week_day['selected'] = $key === $value; $this_week_day['value'] = $key; $optimization['days'][] = $this_week_day; } break; case 'day_number': $optimization['day_numbers'] = array(); foreach ($days as $key => $this_day_value) { $this_day = array(); $this_day['label'] = $this_day_value; $this_day['selected'] = absint($key) === absint($value); $this_day['value'] = $key; $optimization['day_numbers'][] = $this_day; } break; case 'status': $optimization['status'] = '1' === $value; break; } } $optimizations[] = $optimization; } if ($scheduled_optimizations_enabled) { $next_optimization_timestamp = apply_filters('wpo_cron_next_event', wp_next_scheduled('wpo_cron_event2')); if ($next_optimization_timestamp) { $next_optimization_timestamp = $next_optimization_timestamp + 60 * 60 * get_option('gmt_offset'); } } $return_data['data'] = array( 'optimizations' => $optimizations, 'provided_optimizations' => $all_provided_optimizations, 'provided_schedule_types' => $all_schedule_types, 'today_date' => gmdate("Y-m-d"), 'weeks' => $weeks, 'week_days' => $week_days, 'days' => $days, 'next_optimization' => $next_optimization_timestamp ? esc_html(gmdate(get_option('date_format') . ' ' . get_option('time_format'), $next_optimization_timestamp)) : '', 'is_auto_innodb' => $this->options->get_option('auto-innodb'), 'scheduled_optimizations' => $auto_options, 'auto_optimizations' => $wp_optimize_premium->get_auto_optimizations(), 'warning_url' => $wp_optimize->wp_optimize_url('https://teamupdraft.com/documentation/wp-optimize/topics/database-optimization/faqs/', __('Warning: you should read the FAQ about the risks of this operation first.', 'wp-optimize'), '', '', true) ); } // Add the translations. $return_data['data']['translations'] = array( 'scheduled_optimization' => __('Scheduled Optimization', 'wp-optimize'), 'next_schedule_run' => __('Next scheduled run', 'wp-optimize'), 'no_scheduled_optimization' => __('No scheduled optimization', 'wp-optimize'), 'add_optimization_tasks' => __('Add optimization tasks', 'wp-optimize'), 'select_all' => __('Select all', 'wp-optimize'), 'unselect_all' => __('Un-Select All', 'wp-optimize'), 'select_schedule' => __('Select schedule', 'wp-optimize'), 'run_an_optimization_every' => __('Run an optimization every', 'wp-optimize'), 'add_optimization' => __('Add optimization', 'wp-optimize'), ); return $return_data; } /** * Get wp-optimize status report data. * * @return array */ private function get_wp_optimize_status_report_data() { $system_status = WP_Optimize_System_Status_Report::get_instance(); $report_data = $system_status->generate_report(); $replaceable_md_tags = $system_status->get_replaceable_md_tags(); return array('report_data' => $report_data, 'replaceable_md_tags' => $replaceable_md_tags); } }
💾 Save
❌ Cancel
Sid Gifari File Manager v1.0 | Terminal Auto-Sync Enabled | Current Path: /home/alianzatejedoras/public_html/wp-content/plugins/wp-optimize/includes