odb_classes(); // URLS AND DIRECTORIES $this->odb_urls_dirs(); // GET (MULTI-SITE) NETWORK INFORMATION $this->odb_multisite_obj->odb_ms_network_info(); // LOAD OPTIONS $this->odb_load_options(); // INITIALIZE WORDPRESS HOOKS $this->odb_init_hooks(); // GET THE DATABASE TABLES $this->odb_tables = $this->odb_utilities_obj->odb_get_tables(); // GET EXCLUDED TABLES FROM SETTINGS $this->odb_rvg_excluded_tabs = $this->odb_multisite_obj->odb_ms_get_option('odb_rvg_excluded_tabs'); // USE THE NON-MINIFIED VERSION OF SCRIPTS AND STYLE SHEETS WHILE DEBUGGING $this->odb_minify = (defined('WP_DEBUG') && WP_DEBUG) ? '' : '.min'; // LOAD STYLE SHEET (ONLY ON RELEVANT PAGES) $this_page = ''; if(isset($_GET['page'])) $this_page = $_GET['page']; // v4.0.3 if($this->odb_is_relevant_page()) { wp_register_style('odb-style'.$this->odb_version, plugins_url('css/style'.$this->odb_minify.'.css', __FILE__)); wp_enqueue_style('odb-style'.$this->odb_version); } } // odb_init() /******************************************************************************* * LOAD AND INITIALIZE CLASSES *******************************************************************************/ function odb_classes() { // LOAD CLASSES include_once('classes/odb-cleaner.php'); include_once('classes/odb-displayer.php'); include_once('classes/odb-logger.php'); include_once('classes/odb-multisite.php'); include_once('classes/odb-scheduler.php'); include_once('classes/odb-utilities.php'); // CREATE INSTANCES $this->odb_cleaner_obj = new ODB_Cleaner(); $this->odb_displayer_obj = new ODB_Displayer(); $this->odb_logger_obj = new ODB_Logger(); $this->odb_multisite_obj = new ODB_MultiSite(); $this->odb_scheduler_obj = new ODB_Scheduler(); $this->odb_utilities_obj = new ODB_Utilities(); } // odb_classes() /******************************************************************************* * INITIALIZE URLS AND DIRECTORIES *******************************************************************************/ function odb_urls_dirs() { $this->odb_plugin_url = plugins_url( '/', __FILE__ ); $this->odb_plugin_path = plugin_dir_path(__FILE__); $this->odb_logfile_url = $this->odb_plugin_url.'logs/rvg-optimize-db-log.html'; $this->odb_logfile_path = $this->odb_plugin_path.'logs/rvg-optimize-db-log.html'; $this->odb_logfile_debug_path = $this->odb_plugin_path.'logs/rvg-optimize-db-log.txt'; } // odb_urls_dirs() /******************************************************************************* * LOAD OPTIONS *******************************************************************************/ function odb_load_options() { // GET OPTIONS $this->odb_rvg_options = $this->odb_multisite_obj->odb_ms_get_option('odb_rvg_options'); if(!isset($this->odb_rvg_options['version'])) // THIS VERSION IS FROM BEFORE 4.0: CONVERT OPTIONS $this->odb_convert_options(); if(!isset($this->odb_rvg_options['adminbar'])) $this->odb_rvg_options['adminbar'] = 'N'; if(!isset($this->odb_rvg_options['adminmenu'])) $this->odb_rvg_options['adminmenu'] = 'N'; if(!isset($this->odb_rvg_options['clear_pingbacks'])) $this->odb_rvg_options['clear_pingbacks'] = 'N'; if(!isset($this->odb_rvg_options['clear_spam'])) $this->odb_rvg_options['clear_spam'] = 'N'; if(!isset($this->odb_rvg_options['clear_tags'])) $this->odb_rvg_options['clear_tags'] = 'N'; if(!isset($this->odb_rvg_options['clear_transients'])) $this->odb_rvg_options['clear_transients'] = 'N'; if(!isset($this->odb_rvg_options['clear_trash'])) $this->odb_rvg_options['clear_trash'] = 'N'; if(!isset($this->odb_rvg_options['last_run'])) $this->odb_rvg_options['last_run'] = ''; if(!isset($this->odb_rvg_options['logging_on'])) $this->odb_rvg_options['logging_on'] = 'N'; if(!isset($this->odb_rvg_options['nr_of_revisions'])) $this->odb_rvg_options['nr_of_revisions'] = (int)0; // v4.1 if(!isset($this->odb_rvg_options['older_than'])) $this->odb_rvg_options['older_than'] = ''; if(!isset($this->odb_rvg_options['optimize_innodb'])) $this->odb_rvg_options['optimize_innodb'] = 'N'; // v4.1 if(!isset($this->odb_rvg_options['revision_mode'])) $this->odb_rvg_options['revision_mode'] = 1; if(!isset($this->odb_rvg_options['schedule_type'])) $this->odb_rvg_options['schedule_type'] = ''; if(!isset($this->odb_rvg_options['schedule_hour'])) $this->odb_rvg_options['schedule_hour'] = ''; if(!isset($this->odb_rvg_options['total_savings'])) $this->odb_rvg_options['total_savings'] = (int)0; if(!isset($this->odb_rvg_options['version'])) $this->odb_rvg_options['version'] = $this->odb_version; // UPDATE OPTIONS $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $this->odb_rvg_options); // UPDATE SCHEDULER (IF NEEDED) $this->odb_scheduler_obj->odb_update_scheduler(); } // odb_load_options() /******************************************************************************* * COPY AND DELETE OPTIONS FROM PREVIOUS VERSIONS (BEFORE 4.0) *******************************************************************************/ function odb_convert_options() { global $wpdb; // STOP OLD SCHEDULER wp_clear_scheduled_hook('rvg_optimize_database'); $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_total_savings'); if($setting) { $this->odb_rvg_options['total_savings'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_total_savings'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_total_savings'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_pingbacks'); if($setting) { $this->odb_rvg_options['clear_pingbacks'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_pingbacks'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_pingbacks'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_spam'); if($setting) { $this->odb_rvg_options['clear_spam'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_spam'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_spam'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_tags'); if($setting) { $this->odb_rvg_options['clear_tags'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_tags'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_tags'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_transients'); if($setting) { $this->odb_rvg_options['clear_transients'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_transients'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_transients'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_trash'); if($setting) { $this->odb_rvg_options['clear_trash'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_trash'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_trash'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminbar'); if($setting) { $this->odb_rvg_options['adminbar'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminbar'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_adminbar'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminmenu'); if($setting) { $this->odb_rvg_options['adminmenu'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminmenu'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_adminmenu'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_logging_on'); if($setting) { $this->odb_rvg_options['logging_on'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_logging_on'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_logging_on'); } $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_number'); if($setting) $this->odb_rvg_options['nr_of_revisions'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_number'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_number'); $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedule'); if($setting) $this->odb_rvg_options['schedule_type'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedule'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_schedule'); $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedulehour'); if($setting) $this->odb_rvg_options['schedule_hour'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedulehour'); $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_schedulehour'); // COPY EXCLUDED TABLES for($i=0; $iodb_ms_prefixes); $i++) { $sql = " SELECT `option_name` FROM ".$this->odb_ms_prefixes[$i]."options WHERE `option_name` LIKE 'rvg_ex_%' "; $res = $wpdb->get_results($sql, ARRAY_A); for($j=0; $jodb_rvg_excluded_tabs[$option_name_new] = 'Y'; $this->odb_multisite_obj->odb_ms_delete_option($option_name); } } // UPDATE EXCLUDED TABLES $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_excluded_tabs', $this->odb_rvg_excluded_tabs); } // odb_convert_options() /******************************************************************************* * INITIALIZE WORDPRESS HOOKS *******************************************************************************/ function odb_init_hooks() { global $blog_id; // ON DE-ACTIVATION register_deactivation_hook(__FILE__, array('OptimizeDatabase', 'odb_deactivation_handler')); // ON UN-INSTALLATION register_uninstall_hook(__FILE__, array('OptimizeDatabase', 'odb_uninstallation_handler')); // ADD ENTRY TO ADMIN TOOLS MENU if (is_multisite()) { if ($blog_id == 1) { // v4.1: PLUGIN ONLY CAN BE USED ON THE MAIN SITE (NOT ON THE SUB SITES) add_action('admin_menu', array(&$this, 'odb_admin_tools')); add_action('admin_menu', array(&$this, 'odb_admin_settings')); } } else { add_action('admin_menu', array(&$this, 'odb_admin_tools')); add_action('admin_menu', array(&$this, 'odb_admin_settings')); } // ICON MODE: ADD ICON TO ADMIN MENU if ($this->odb_rvg_options['adminmenu'] == "Y") { add_action('admin_menu', array(&$this, 'odb_admin_icon')); add_action('admin_menu', array(&$this, 'odb_register_options')); } // ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE add_filter('plugin_action_links_'.plugin_basename(__FILE__), array(&$this, 'odb_settings_link')); // ADD THE '1 CLICK OPTIMIZE DATABASE' ITEM TO THE ADMIN BAR (IF ACTIVATED) if($this->odb_rvg_options['adminbar'] == 'Y') add_action('wp_before_admin_bar_render', array(&$this, 'odb_admin_bar')); // INITIALIZE LOCALIZATION add_action('admin_menu', array(&$this, 'odb_i18n')); } // odb_init_hooks() /******************************************************************************* * ADD ENTRY TO THE ADMIN TOOLS MENU *******************************************************************************/ function odb_admin_tools() { if (function_exists('add_management_page')) { add_management_page( __('Optimize Database',$this->odb_txt_domain), // page title __('Optimize Database',$this->odb_txt_domain), // menu title 'manage_options', // capability 'rvg-optimize-database', // menu slug array(&$this, 'odb_start_manually')); // function } // if (function_exists('add_management_page')) } // odb_admin_tools() /******************************************************************************* * ADD ENTRY TO THE ADMIN SETTINGS MENU *******************************************************************************/ function odb_admin_settings() { if (function_exists('add_options_page')) add_options_page( __('Optimize Database', $this->odb_txt_domain), // page title __('Optimize Database', $this->odb_txt_domain), // menu title 'manage_options', // capability 'odb_settings_page', // menu slug array(&$this, 'odb_settings_page') // function ); } // odb_admin_settings() /******************************************************************************* * ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE *******************************************************************************/ function odb_settings_link($links) { array_unshift($links, ''.__('Settings', $this->odb_txt_domain).''); return $links; } // odb_settings_link() /******************************************************************************************** * ADD THE '1 CLICK OPTIMIZE DATABASE' ITEM TO THE ADMIN BAR (IF ACTIVATED) ********************************************************************************************/ function odb_admin_bar() { global $wp_admin_bar; if (!is_super_admin() || !is_admin_bar_showing()) return; $siteurl = site_url('/'); $wp_admin_bar->add_menu( array( 'id' => 'optimize', 'title' => __('Optimize DB (1 click)', $this->odb_txt_domain), 'href' => $siteurl.'wp-admin/tools.php?page=rvg-optimize-database&action=run' )); } // odb_admin_bar() /******************************************************************************************** * 'ICON MODE': ADD A LINK TO THE ADMIN MENU ********************************************************************************************/ function odb_admin_icon() { if (function_exists('add_menu_page')) { add_menu_page( __('Optimize Database', $this->odb_txt_domain), // page title __('Optimize Database', $this->odb_txt_domain), // menu title 'administrator', // capability 'rvg-optimize-database', // menu slug array(&$this, 'odb_start_manually'), // function $this->odb_plugin_url.'images/icon.png' // icon url ); } } // odb_admin_icon() /******************************************************************************************** * 'ICON MODE': REGISTER OPTION PAGE BUT HIDE IT FROM THE ADMIN MENU ********************************************************************************************/ function odb_register_options() { if (function_exists('add_submenu_page')) { add_submenu_page( null, // parent slug (NULL is hide from menu) __('Optimize Database', $this->odb_txt_domain), // page title __('Optimize Database', $this->odb_txt_domain), // menu title 'manage_options', // capability 'rvg_odb_admin', // menu slug array(&$this, 'odb_settings_page') // function ); } } // odb_register_options() /******************************************************************************* * LOAD TEXT DOMAIN *******************************************************************************/ function odb_i18n() { load_plugin_textdomain( $this->odb_txt_domain, // domain false, // abs rel path dirname(plugin_basename( __FILE__ )).'/language/' // plugin rel path ); } // odb_i18n() /******************************************************************************* * ARE WE ON A, FOR THIS PLUGIN, RELEVANT PAGE? * Since v4.0.3 *******************************************************************************/ function odb_is_relevant_page() { $this_page = ''; if(isset($_GET['page'])) $this_page = $_GET['page']; return ($this_page == 'odb_settings_page' || $this_page == 'rvg-optimize-database'); } // odb_is_relevant_page() /******************************************************************************* * PLUGIN DE-ACTIVATION *******************************************************************************/ public static function odb_deactivation_handler() { // STOP SCHEDULER wp_clear_scheduled_hook('odb_scheduler'); } // odb_deactivation_handler() /******************************************************************************* * PLUGIN UN-INSTALLATION *******************************************************************************/ public static function odb_uninstallation_handler() { // STOP SCHEDULER wp_clear_scheduled_hook('odb_scheduler'); } // odb_uninstallation_handler() /******************************************************************************* * LOAD SETTINGS (OPTIONS) PAGE *******************************************************************************/ function odb_settings_page() { global $wpdb, $odb_rvg_excluded_tabs, $odb_ms_prefixes; include_once(trailingslashit(dirname(__FILE__)).'/includes/settings-page.php'); } // odb_settings_page() /******************************************************************************* * START CLEANING / OPTIMIZATION (INITIATED BY THE USER, NOT FROM WP-CRON) *******************************************************************************/ function odb_start_manually() { $this->odb_start(false); } // odb_start_manually() /******************************************************************************* * START CLEANING / OPTIMIZATION (FROM WP-CRON) *******************************************************************************/ function odb_start_scheduler() { $this->odb_start(true); } // odb_start_scheduler() /******************************************************************************* * MAIN METHOD FOR CLEANING / OPTIMIZING *******************************************************************************/ function odb_start($scheduler) { // PAGE LOAD TIMER $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $this->odb_start_time = $time; $action = ''; if(isset($_REQUEST['action'])) { $action = $_REQUEST['action']; if($action == "delete_log") { // DELETE LOG FILE @unlink($this->odb_plugin_path.'logs/rvg-optimize-db-log.html'); // UPDATED MESSAGE echo "

". __('Optimize Database after Deleting Revisions LOG FILE HAS BEEN DELETED', $this->odb_txt_domain); echo "

"; } } // if(isset($_REQUEST['action'])) if(!$scheduler) { // SHOW PAGE HEADER $this->odb_displayer_obj->display_header(); // SHOW CURRENT SETTINGS $this->odb_displayer_obj->display_current_settings(); } // if(!$scheduler) if ($action != 'run' && !$scheduler) { /**************************************************************************************** * START SCREEN (SHOW SETTINGS + BUTTONS) ****************************************************************************************/ $this->odb_displayer_obj->display_start_buttons($action); } else { /**************************************************************************************** * RUN CLEANING AND OPTIMIZATION ****************************************************************************************/ $this->odb_displayer_obj->display_start_buttons($action); // REGISTER THE LAST RUN $this->odb_rvg_options['last_run'] = Date('M j, Y @ H:i'); $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $this->odb_rvg_options); // DELETE REDUNDANT DATA $this->odb_cleaner_obj->odb_run_cleaner($scheduler); // OPTIMIZE DATABASE TABLES $this->odb_cleaner_obj->odb_run_optimizer($scheduler); // SHOW RESULTS $this->odb_cleaner_obj->odb_savings($scheduler); // SHOW 'DONE' PARAGRAPH if(!$scheduler) $this->odb_cleaner_obj->odb_done(); } // if($action != 'run') } // odb_start() } // OptimizeDatabase ?>