get_task_manager();
include_once(WPO_PLUGIN_MAIN_PATH . 'includes/class-wp-optimize-queue-task.php');
$this->cron_scheduler = WP_Optimize_Cron_scheduler::get_instance();
include_once(WPO_PLUGIN_MAIN_PATH.'includes/class-wp-optimize-lazy-load.php');
add_filter('wp_optimize_loggers_classes', array($this, 'loggers_classes'));
add_filter('additional_options_updraft_slack_logger', array($this, 'additional_options_updraft_slack_logger'), 20, 3);
// Add custom capabilities.
$this->setup_capabilities();
// Single table optimize feature.
add_filter('wpo_tables_list_additional_column_data', array($this, 'tables_list_additional_column_data'), 10, 2);
add_action('wpo_tables_list_before', array($this, 'wpo_tables_list_before'));
add_filter('wpo_get_tables_data', array($this, 'show_innodb_force_optimize'));
if (is_multisite()) {
add_action('wpo_additional_options', array($this, 'wpo_additional_options'));
add_action('wpo_additional_options_cron', array($this, 'wpo_additional_options_cron'));
}
add_action('wpo_premium_scripts_styles', array($this, 'enqueue_scripts_styles'), 15, 3);
add_filter('wp_optimize_sub_menu_items', array($this, 'change_premium_page_title'), 20);
add_filter('wp_optimize_admin_page_wpo_mayalso_tabs', array($this, 'check_premium_tab_title'));
add_filter('wp_optimize_admin_page_wpo_images_tabs', array($this, 'admin_page_images_tabs'));
add_action('auto_option_settings', array($this, 'auto_option_settings'));
add_filter('wp_optimize_option_keys', array($this, 'wp_optimize_option_keys'));
add_filter('wpo_cron_next_event', array($this->cron_scheduler, 'wpo_cron_next_event'));
add_filter('wpo_js_translations', array($this, 'wpo_js_translations'));
add_filter('wpo_default_auto_options', array($this, 'default_auto_options'));
add_action('wpo_after_general_settings', array($this, 'after_general_settings'));
add_filter('wpo_faq_url', array($this, 'wpo_faq_url'));
/**
* Add action for display Images > Unused images and sizes tab.
*/
add_action('wp_optimize_admin_page_wpo_images_unused', array($this, 'admin_page_wpo_images_unused'));
/**
* Add action for display Dashboard > Lazyload tab.
*/
add_action('wp_optimize_admin_page_wpo_images_lazyload', array($this, 'admin_page_wpo_images_lazyload'));
add_action('admin_init', array($this, 'handle_unused_images_csv'));
/**
* Add action for loading 3rd party plugin compatibilities.
*/
add_action('wpo_load_compatibilities', array($this, 'load_compatibilities'));
$this->schedule_image_optimization_jobs();
$this->include_lazy_load();
$this->include_images_trash();
$this->include_cache_premium();
$this->include_power_tweaks();
WP_Optimize_Bulk_Smush::get_instance();
if (!class_exists('Updraft_Manager_Updater_1_9')) {
include_once(WPO_PLUGIN_MAIN_PATH.'vendor/davidanderson684/simba-plugin-manager-updater/class-udm-updater.php');
}
try {
new Updraft_Manager_Updater_1_9('https://getwpo.com/plugin-info/', 1, 'wp-optimize-premium/wp-optimize.php', array('require_login' => false));
} catch (Exception $e) {
error_log($e->getMessage().' at '.$e->getFile().' line '.$e->getLine());
}
add_filter('udmupdater_automatically_update_when_available', array($this, 'add_forgot_password_link'), 10, 2);
}
/**
* Plugin activation actions.
*/
public function plugin_activation_actions() {
// reschedule scheduled events.
$this->cron_scheduler->wpo_cron_deactivate();
$this->cron_scheduler->cron_activate();
}
/**
* Runs upon the WP action admin_page_wpo_images_unused
*/
public function admin_page_wpo_images_unused() {
WP_Optimize()->include_template('images/unused.php');
}
/**
* Runs upon the WP action wp_optimize_admin_page_wpo_images_lazyload
*/
public function admin_page_wpo_images_lazyload() {
WP_Optimize()->include_template('images/lazyload.php', false, array('lazyload_already_provided_by' => implode(', ', $this->lazyload_already_provided_by())));
}
/**
* Returns WP_Optimize_Premium instance
*
* @return null|WP_Optimize_Premium
*/
public static function instance() {
if (empty(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Enqueue scripts and styles required for premium version
*
* @param string $min_or_not_internal - The .min-version-number suffix to use on internal assets
* @param string $min_or_not - The .min suffix to use on third party assets
* @param string $enqueue_version - The enqueued version
* @return void
*/
public function enqueue_scripts_styles($min_or_not_internal, $min_or_not, $enqueue_version) {
wp_enqueue_script('wp-optimize-lazy-load', WPO_PLUGIN_URL . 'js/wpo-lazy-load' . $min_or_not_internal . '.js', array(), $enqueue_version);
wp_enqueue_style('wp-optimize-premium-css', WPO_PLUGIN_URL . 'css/wpo-premium' . $min_or_not_internal . '.css', array(), $enqueue_version);
wp_enqueue_script('wp-optimize-tablesorter-pager', WPO_PLUGIN_URL . 'js/jquery.tablesorter.pager' . $min_or_not_internal . '.js', array('jquery'), $enqueue_version);
wp_enqueue_script('select2', WPO_PLUGIN_URL . 'js/select2/select2' . $min_or_not . '.js', array('jquery'), $enqueue_version);
wp_enqueue_style('select2', WPO_PLUGIN_URL . 'css/select2/select2' . $min_or_not . '.css', array(), $enqueue_version);
wp_enqueue_script('wp-optimize-images-view-js', WPO_PLUGIN_URL . 'js/wpo-images-view' . $min_or_not_internal . '.js', array('jquery'), $enqueue_version);
wp_enqueue_script('wp-optimize-premium-js', WPO_PLUGIN_URL . 'js/wpo-premium' . $min_or_not_internal . '.js', array('jquery', 'jquery-ui-dialog', 'wp-optimize-send-command', 'wp-optimize-admin-js', 'wp-optimize-images-view-js', 'jquery-ui-datepicker', 'select2'), $enqueue_version);
wp_enqueue_script('wp-optimize-modernizr-js', WPO_PLUGIN_URL . 'js/modernizr/modernizr-custom' . $min_or_not . '.js', array(), $enqueue_version);
wp_enqueue_script('wp-optimize-timepicker-js', WPO_PLUGIN_URL . 'js/jquery-timepicker/jquery.timepicker' . $min_or_not . '.js', array('jquery'), $enqueue_version);
wp_enqueue_style('wp-optimize-timepicker-css', WPO_PLUGIN_URL . 'js/jquery-timepicker/jquery.timepicker'. $min_or_not . '.css', array(), $enqueue_version);
// Defeat other plugins/themes which dump their jQuery UI CSS onto our settings page
wp_deregister_style('jquery-ui');
wp_enqueue_style('jquery-ui', WPO_PLUGIN_URL.'css/jquery-ui.custom' . $min_or_not_internal . '.css', array(), $enqueue_version);
wp_enqueue_script('handlebars', WPO_PLUGIN_URL . 'js/handlebars/handlebars' . $min_or_not . '.js', array(), '4.1.2');
wp_enqueue_script('wp-optimize-compiled-handlebars', WPO_PLUGIN_URL . 'templates/handlebars-compiled-'.str_replace('.', '-', WPO_VERSION).'.js', array(), $enqueue_version);
}
/**
* Add WP-Optimize custom capabilities.
*/
public function setup_capabilities() {
global $wp_roles;
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
$wpo_capabilities = array(
'wpo_manage_settings',
'wpo_run_optimizations',
);
$old_use_db = $wp_roles->use_db;
$wp_roles->use_db = true;
if (!isset($wp_roles->roles['administrator'])) {
return;
}
$administrator = $wp_roles->role_objects['administrator'];
foreach ($wpo_capabilities as $capability) {
if (!$administrator->has_cap($capability)) {
$administrator->add_cap($capability);
}
}
$wp_roles->use_db = $old_use_db;
}
/**
* Add tabs to Dashboard > Images pages.
*
* @param array $tabs
* @return mixed
*/
public function admin_page_images_tabs($tabs) {
$tabs['unused'] = __('Unused images and sizes', 'wp-optimize');
$tabs['lazyload'] = __('Lazy-load', 'wp-optimize');
return $tabs;
}
/**
* Add premium logger classes
*
* @param array $loggers_classes
* @return array
*/
public function loggers_classes($loggers_classes) {
$premium_classes = array(
'Updraft_Syslog_Logger' => WPO_PLUGIN_MAIN_PATH.'includes/class-updraft-syslog-logger.php',
'Updraft_Simple_History_Logger' => WPO_PLUGIN_MAIN_PATH.'includes/class-updraft-simple-history-logger.php',
'Updraft_Slack_Logger' => WPO_PLUGIN_MAIN_PATH.'includes/class-updraft-slack-logger.php',
);
if (empty($loggers_classes)) return $premium_classes;
return array_merge($loggers_classes, $premium_classes);
}
/**
* Additional options for Slack filter
*
* @param string $additional_options_html
* @param string $logger_form_name
* @param array $logger_additional_options
* @return string
*/
public function additional_options_updraft_slack_logger($additional_options_html, $logger_form_name, $logger_additional_options) {
$slack_webhook_url = !empty($logger_additional_options['slack_webhook_url']) ? $logger_additional_options['slack_webhook_url'] : '';
return $additional_options_html.'';
}
/**
* Save/update auto options and call event deactivation and activation as needed
*
* @param array $settings Array of information with the schedule parameters
* @return void
*/
public function auto_option_settings($settings) {
$options = WP_Optimize()->get_options();
$options_from_user = isset($settings['wp-optimize-auto']) ? array_values($settings['wp-optimize-auto']) : array();
if (!is_array($options_from_user)) $options_from_user = array();
// Set an option to determine whether to optimize innodb automatically or not based on user choice.
$options->update_option('auto-innodb', !empty($settings['auto-innodb']) ? 'true' : 'false');
$options->update_option('auto-updated', $options_from_user);
$this->cron_scheduler->wpo_cron_deactivate();
$this->cron_scheduler->cron_activate();
// Save purge cache permissions settings.
if (isset($settings['purge_cache_permissions'])) {
$options->update_option('purge-cache-permissions', $settings['purge_cache_permissions']);
}
}
/**
* Adds premium options keys to array of option keys
*
* @param array $keys Array of existing option keys
* @return array Array of updated option keys
*/
public function wp_optimize_option_keys($keys) {
array_push($keys, 'auto-updated', 'locks', 'auto-innodb');
return $keys;
}
/**
* Action wpo_tables_list_additional_column_data. Output button Optimize in the action column.
*
* @param string $content String for output to column
* @param object $table_info Object with table info.
*
* @return string
*/
public function tables_list_additional_column_data($content, $table_info) {
// If table type is supported, then show optimize button.
$content .= '
'
.''
.''
.''
.'
';
return $content;
}
/**
* Action wpo_tables_list_before to output custom content before tables list
*/
public function wpo_tables_list_before() {
WP_Optimize()->include_template('database/tables-list-before.php');
}
/**
* Wether to show the innodb_force_optimize_single checkbox
*
* @param array $data - The data passed to get_table_list()
* @return boolean
*/
public function show_innodb_force_optimize($data) {
$data['show_innodb_force_optimize'] = WP_Optimize()->get_optimizer()->show_innodb_force_optimize();
return $data;
}
/**
* Add options with sites list in multisite admin
* Called by WP action wpo_additional_options
*/
public function wpo_additional_options() {
$sites = WP_Optimize()->get_sites();
$options = WP_Optimize()->get_options();
$sites_options = $options->get_wpo_sites_option();
$is_all_selected = (is_array($sites_options) && in_array('all', $sites_options)) ? true : false;
?>