PluginProbe
Optimize Database after Deleting Revisions / 5.1
Optimize Database after Deleting Revisions v5.1
3.4.7 3.4.8 3.4.9 3.5 3.5.1 4.0 4.0.1 4.0.2 4.0.3 4.1 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.3 All 144 releases
rvg-optimize-database / rvg-optimize-database.php

rvg-optimize-database.php in Optimize Database after Deleting Revisions 5.1, at rvg-optimize-database.php

788 lines 29.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Optimize Database after Deleting Revisions
4 * @version 5.1
5 */
6 /*
7 Plugin Name: Optimize Database after Deleting Revisions
8 Plugin URI: http://cagewebdev.com/optimize-database-after-deleting-revisions-wordpress-plugin/
9 Description: Optimizes the Wordpress Database after Cleaning it out
10 Author: CAGE Web Design | Rolf van Gelder, Eindhoven, The Netherlands
11 Author URI: http://cagewebdev.com
12 Network: True
13 Version: 5.1
14 */
15
16 /********************************************************************************************
17 *
18 * MAIN CLASS
19 *
20 ********************************************************************************************/
21
22 //v5.0.10
23 $action = '';
24 if(isset($_REQUEST['action'])) {
25 $action = $_REQUEST['action'];
26 }
27 if ($action == 'analyze_summary' ||
28 $action == 'analyze_detail' ||
29 $action == 'run_summary' ||
30 $action == 'run_detail') {
31 @set_time_limit(4*3600);
32 } else {
33 // GET DEFAULT VALUE FROM PHP.INI
34 $max = ini_get('max_execution_time');
35 @set_time_limit($max);
36 }
37 // CREATE INSTANCE
38 global $odb_class;
39 $odb_class = new OptimizeDatabase();
40
41 class OptimizeDatabase {
42 // VERSION
43 var $odb_version = '5.1';
44 var $odb_release_date = '08/03/2023';
45
46 // PLUGIN OPTIONS
47 var $odb_rvg_options = array();
48
49 // EXCLUDED TABLES
50 var $odb_rvg_excluded_tabs = array();
51
52 // MULTISITE STRUCTURE
53 var $odb_ms_prefixes = array();
54
55 // DATABASE TABLES
56 var $odb_tables = array();
57
58 // MINIFYING?
59 var $odb_minify;
60
61 // MAIN PLUGIN FILE
62 var $odb_main_file = 'rvg-optimize-database/rvg-optimize-database.php';
63
64 // LOCALIZATION
65 var $odb_txt_domain = 'rvg-optimize-database';
66
67 // CURRENT SITE DATE (yyyymmddHHiiss) AND UNIX TIMESTAMP, BASED ON TIMEZONE OF THE SITE
68 // v4.4.3
69 var $odb_current_date;
70 var $odb_timestamp;
71 var $odb_last_run_seconds;
72
73 // PLUGIN
74 var $odb_plugin_url;
75 var $odb_plugin_path;
76
77 // DATABASE TABLE FOR LOGGING
78 // v4.6
79 var $odb_logtable_name;
80
81 // OBJECTS
82 var $odb_cleaner_obj;
83 var $odb_displayer_obj;
84 var $odb_logger_obj;
85 var $odb_multisite_obj;
86 var $odb_scheduler_obj;
87 var $odb_utilities_obj;
88
89 // PAGE TIMER
90 var $odb_start_time;
91
92 /*******************************************************************************
93 *
94 * CONSTRUCTOR
95 *
96 *******************************************************************************/
97 function __construct() {
98 // INITIALIZE PLUGIN
99 add_action('init', array(&$this, 'odb_init'));
100 } // __construct()
101
102
103 /*******************************************************************************
104 * INITIALIZE PLUGIN
105 *******************************************************************************/
106 function odb_init() {
107 // LOAD CLASSES
108 $this->odb_classes();
109
110 // URLS AND DIRECTORIES
111 $this->odb_urls_dirs();
112
113 // 5.0.8 THIS MAY NOT THIS MAY NOT EVEN BE NECESSARY ANYMORE
114 if ($this->odb_is_relevant_page()) {
115 $this->odb_create_log_table();
116 }
117
118 // GET (MULTI-SITE) NETWORK INFORMATION
119 $this->odb_multisite_obj->odb_ms_network_info();
120
121 // LOAD OPTIONS
122 $this->odb_load_options();
123
124 // INITIALIZE WORDPRESS HOOKS
125 $this->odb_init_hooks();
126
127 // GET EXCLUDED TABLES FROM SETTINGS
128 $this->odb_rvg_excluded_tabs = $this->odb_multisite_obj->odb_ms_get_option('odb_rvg_excluded_tabs');
129
130 // USE THE NON-MINIFIED VERSION OF SCRIPTS AND STYLE SHEETS WHILE DEBUGGING
131 $this->odb_minify = (defined('WP_DEBUG') && WP_DEBUG) ? '' : '.min';
132
133 // LOAD STYLE SHEET (ONLY ON RELEVANT PAGES)
134 // v4.0.3
135 if($this->odb_is_relevant_page()) {
136 wp_register_style('odb-style'.$this->odb_version, plugins_url('css/style'.$this->odb_minify.'.css', __FILE__));
137 wp_enqueue_style('odb-style'.$this->odb_version);
138 } // if($this->odb_is_relevant_page())
139
140 if(defined('RUN_OPTIMIZE_DATABASE') && RUN_OPTIMIZE_DATABASE == 1) $this->odb_start(true);
141 } // odb_init()
142
143
144 /*******************************************************************************
145 *
146 * LOAD AND INITIALIZE CLASSES
147 *
148 *******************************************************************************/
149 function odb_classes() {
150 // LOAD CLASSES
151 include_once('classes/odb-cleaner.php');
152 include_once('classes/odb-displayer.php');
153 include_once('classes/odb-logger.php');
154 include_once('classes/odb-multisite.php');
155 include_once('classes/odb-scheduler.php');
156 include_once('classes/odb-utilities.php');
157
158 // CREATE INSTANCES
159 $this->odb_cleaner_obj = new ODB_Cleaner();
160 $this->odb_displayer_obj = new ODB_Displayer();
161 $this->odb_logger_obj = new ODB_Logger();
162 $this->odb_multisite_obj = new ODB_MultiSite();
163 $this->odb_scheduler_obj = new ODB_Scheduler();
164 $this->odb_utilities_obj = new ODB_Utilities();
165 } // odb_classes()
166
167
168 /*******************************************************************************
169 *
170 * INITIALIZE URLS AND DIRECTORIES
171 *
172 *******************************************************************************/
173 function odb_urls_dirs() {
174 $this->odb_plugin_url = plugins_url( '/', __FILE__ );
175 $this->odb_plugin_path = plugin_dir_path(__FILE__);
176 $this->odb_logfile_debug_path = $this->odb_plugin_path.'logs/rvg-optimize-db-log.txt';
177 } // odb_urls_dirs()
178
179
180 /*******************************************************************************
181 *
182 * LOAD OPTIONS
183 *
184 *******************************************************************************/
185 function odb_load_options() {
186 // GET OPTIONS
187 $this->odb_rvg_options = $this->odb_multisite_obj->odb_ms_get_option('odb_rvg_options');
188
189 if(!isset($this->odb_rvg_options['version']))
190 // THIS VERSION IS FROM BEFORE 4.0: CONVERT OPTIONS
191 $this->odb_convert_options();
192
193 if(!isset($this->odb_rvg_options['adminbar']))
194 $this->odb_rvg_options['adminbar'] = 'N';
195 if(!isset($this->odb_rvg_options['adminmenu']))
196 $this->odb_rvg_options['adminmenu'] = 'N';
197 if(!isset($this->odb_rvg_options['clear_pingbacks']))
198 $this->odb_rvg_options['clear_pingbacks'] = 'N';
199 if(!isset($this->odb_rvg_options['clear_oembed']))
200 $this->odb_rvg_options['clear_oembed'] = 'N';
201 if(!isset($this->odb_rvg_options['clear_orphans']))
202 $this->odb_rvg_options['clear_orphans'] = 'N';
203 if(!isset($this->odb_rvg_options['clear_spam']))
204 $this->odb_rvg_options['clear_spam'] = 'N';
205 if(!isset($this->odb_rvg_options['clear_tags']))
206 $this->odb_rvg_options['clear_tags'] = 'N';
207 if(!isset($this->odb_rvg_options['clear_transients']))
208 $this->odb_rvg_options['clear_transients'] = 'N';
209 if(!isset($this->odb_rvg_options['clear_trash']))
210 $this->odb_rvg_options['clear_trash'] = 'N';
211 if(!isset($this->odb_rvg_options['delete_older']))
212 $this->odb_rvg_options['delete_older'] = 'N';
213 if(!isset($this->odb_rvg_options['rvg_revisions']))
214 $this->odb_rvg_options['rvg_revisions'] = 'N';
215
216 if(!isset($this->odb_rvg_options['last_run']))
217 $this->odb_rvg_options['last_run'] = '';
218 // v4.5.1
219 if(!isset($this->odb_rvg_options['last_run_seconds']))
220 $this->odb_rvg_options['last_run_seconds'] = '';
221 if(!isset($this->odb_rvg_options['logging_on']))
222 $this->odb_rvg_options['logging_on'] = 'N';
223 if(!isset($this->odb_rvg_options['nr_of_revisions']))
224 $this->odb_rvg_options['nr_of_revisions'] = '';
225 // v4.1
226 if(!isset($this->odb_rvg_options['older_than']))
227 $this->odb_rvg_options['older_than'] = '';
228 if(!isset($this->odb_rvg_options['optimize_innodb']))
229 $this->odb_rvg_options['optimize_innodb'] = 'N';
230 if(!isset($this->odb_rvg_options['schedule_type']))
231 $this->odb_rvg_options['schedule_type'] = '';
232 if(!isset($this->odb_rvg_options['schedule_hour']))
233 $this->odb_rvg_options['schedule_hour'] = '';
234 if(!isset($this->odb_rvg_options['total_savings']))
235 $this->odb_rvg_options['total_savings'] = (int)0;
236 if(!isset($this->odb_rvg_options['version']))
237 $this->odb_rvg_options['version'] = $this->odb_version;
238
239 // CUSTOM POST TYPES (from v4.4)
240 if(!isset($this->odb_rvg_options['post_types'])) {
241 $this->odb_rvg_options['post_types'] = array();
242 $relevant_pts = $this->odb_utilities_obj->odb_get_relevant_post_types();
243 // (CUSTOM) POST TYPES ARE PER DEFAULT ENABLED
244 foreach($relevant_pts as $posttype) {
245 $this->odb_rvg_options['post_types'][$posttype] = "Y";
246 } // foreach($relevant_pts as $posttype)
247
248 if (isset($this->odb_rvg_options['rev_post_type'])) {
249 // UPGRADE FROM A VERSION < 4.4
250 if ($this->odb_rvg_options['rev_post_type'] == 'page') {
251 // PAGES ONLY: DISABLE 'post'
252 $this->odb_rvg_options['post_types']['post'] = "N";
253 } else if ($this->odb_rvg_options['rev_post_type'] == 'post') {
254 // POSTS ONLY: DISABLE 'page'
255 $this->odb_rvg_options['post_types']['page'] = "N";
256 }
257 unset($this->odb_rvg_options['rev_post_type']);
258 } // if (isset($this->odb_rvg_options['rev_post_type']))
259 } // if(!isset($this->odb_rvg_options['post_types']))
260
261 // UPDATE OPTIONS
262 $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $this->odb_rvg_options);
263
264 // UPDATE SCHEDULER (IF NEEDED)
265 $this->odb_scheduler_obj->odb_update_scheduler();
266 } // odb_load_options()
267
268
269 /*******************************************************************************
270 *
271 * COPY AND DELETE OPTIONS FROM PREVIOUS VERSIONS (BEFORE 4.0)
272 *
273 *******************************************************************************/
274 function odb_convert_options() {
275 global $wpdb;
276
277 // STOP OLD SCHEDULER
278 wp_clear_scheduled_hook('rvg_optimize_database');
279
280 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_total_savings');
281 if($setting) {
282 $this->odb_rvg_options['total_savings'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_total_savings');
283 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_total_savings');
284 }
285
286 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_pingbacks');
287 if($setting) {
288 $this->odb_rvg_options['clear_pingbacks'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_pingbacks');
289 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_pingbacks');
290 }
291
292 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_oembed');
293 if($setting) {
294 $this->odb_rvg_options['rvg_clear_oembed'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_oembed');
295 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_oembed');
296 }
297
298 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_orphans');
299 if($setting) {
300 $this->odb_rvg_options['rvg_clear_orphans'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_orphans');
301 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_orphans');
302 }
303
304 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_spam');
305 if($setting) {
306 $this->odb_rvg_options['clear_spam'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_spam');
307 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_spam');
308 }
309
310 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_tags');
311 if($setting) {
312 $this->odb_rvg_options['clear_tags'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_tags');
313 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_tags');
314 }
315
316 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_transients');
317 if($setting) {
318 $this->odb_rvg_options['clear_transients'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_transients');
319 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_transients');
320 }
321
322 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_trash');
323 if($setting)
324 { $this->odb_rvg_options['clear_trash'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_trash');
325 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_trash');
326 }
327
328 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminbar');
329 if($setting) {
330 $this->odb_rvg_options['adminbar'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminbar');
331 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_adminbar');
332 }
333
334 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminmenu');
335 if($setting) {
336 $this->odb_rvg_options['adminmenu'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminmenu');
337 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_adminmenu');
338 }
339
340 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_logging_on');
341 if($setting) {
342 $this->odb_rvg_options['logging_on'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_logging_on');
343 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_logging_on');
344 }
345
346 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_number');
347 if($setting)
348 $this->odb_rvg_options['nr_of_revisions'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_number');
349 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_number');
350
351 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedule');
352 if($setting)
353 $this->odb_rvg_options['schedule_type'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedule');
354 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_schedule');
355
356 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedulehour');
357 if($setting)
358 $this->odb_rvg_options['schedule_hour'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedulehour');
359 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_schedulehour');
360
361 // COPY EXCLUDED TABLES
362 for($i = 0; $i < count($this->odb_ms_prefixes); $i++) {
363 $sql = "
364 SELECT `option_name`
365 FROM ".$this->odb_ms_prefixes[$i]."options
366 WHERE `option_name` LIKE 'rvg_ex_%'
367 ";
368
369 $res = $wpdb->get_results($sql, ARRAY_A);
370 for($j=0; $j<count($res); $j++) {
371 $option_name = $res[$j]['option_name'];
372 $option_name_new = substr($option_name, 7);
373 $this->odb_rvg_excluded_tabs[$option_name_new] = 'Y';
374 $this->odb_multisite_obj->odb_ms_delete_option($option_name);
375 } // for($j=0; $j<count($res); $j++)
376 } // for($i = 0; $i < count($this->odb_ms_prefixes); $i++)
377
378 // UPDATE EXCLUDED TABLES
379 $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_excluded_tabs', $this->odb_rvg_excluded_tabs);
380 } // odb_convert_options()
381
382
383 /*******************************************************************************
384 *
385 * INITIALIZE WORDPRESS HOOKS
386 *
387 *******************************************************************************/
388 function odb_init_hooks() {
389 global $blog_id;
390
391 // ON DE-ACTIVATION
392 register_deactivation_hook(__FILE__, array('OptimizeDatabase', 'odb_deactivation_handler'));
393
394 // ON UN-INSTALLATION
395 register_uninstall_hook(__FILE__, array('OptimizeDatabase', 'odb_uninstallation_handler'));
396
397 // ADD ENTRY TO ADMIN TOOLS MENU
398 if (is_multisite()) {
399 if ($blog_id == 1) {
400 // v4.1: PLUGIN ONLY CAN BE USED ON THE MAIN SITE (NOT ON THE SUB SITES)
401 add_action('admin_menu', array(&$this, 'odb_admin_tools'));
402 add_action('admin_menu', array(&$this, 'odb_admin_settings'));
403 // ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE
404 add_filter('plugin_action_links_'.plugin_basename(__FILE__), array(&$this, 'odb_settings_link'));
405 } // if ($blog_id == 1)
406 } else {
407 add_action('admin_menu', array(&$this, 'odb_admin_tools'));
408 add_action('admin_menu', array(&$this, 'odb_admin_settings'));
409 // ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE
410 add_filter('plugin_action_links_'.plugin_basename(__FILE__), array(&$this, 'odb_settings_link'));
411 } // if (is_multisite())
412
413 // ICON MODE: ADD ICON TO ADMIN MENU
414 if ($this->odb_rvg_options['adminmenu'] == "Y") {
415 add_action('admin_menu', array(&$this, 'odb_admin_icon'));
416 add_action('admin_menu', array(&$this, 'odb_register_options'));
417 }
418
419 // ADD THE '1 CLICK OPTIMIZE DATABASE' ITEM TO THE ADMIN BAR (IF ACTIVATED)
420 if($this->odb_rvg_options['adminbar'] == 'Y')
421 add_action('wp_before_admin_bar_render', array(&$this, 'odb_admin_bar'));
422
423 // INITIALIZE LOCALIZATION
424 add_action('admin_menu', array(&$this, 'odb_i18n'));
425 } // odb_init_hooks()
426
427
428 /*******************************************************************************
429 *
430 * ADD ENTRY TO THE ADMIN TOOLS MENU
431 *
432 *******************************************************************************/
433 function odb_admin_tools() {
434 if (function_exists('add_management_page')) {
435 add_management_page(
436 __('Optimize Database',$this->odb_txt_domain), // page title
437 __('Optimize Database',$this->odb_txt_domain), // menu title
438 'manage_options', // capability
439 'rvg-optimize-database', // menu slug
440 array(&$this, 'odb_start_manually')); // function
441 } // if (function_exists('add_management_page'))
442 } // odb_admin_tools()
443
444
445 /*******************************************************************************
446 *
447 * ADD ENTRY TO THE ADMIN SETTINGS MENU
448 *
449 *******************************************************************************/
450 function odb_admin_settings() {
451 if (function_exists('add_options_page'))
452 add_options_page(
453 __('Optimize Database', $this->odb_txt_domain), // page title
454 __('Optimize Database', $this->odb_txt_domain), // menu title
455 'manage_options', // capability
456 'odb_settings_page', // menu slug
457 array(&$this, 'odb_settings_page') // function
458 );
459 } // odb_admin_settings()
460
461
462 /*******************************************************************************
463 *
464 * ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE
465 *
466 *******************************************************************************/
467 function odb_settings_link($links) {
468 array_unshift($links, '<a href="options-general.php?page=odb_settings_page">'.__('Settings', $this->odb_txt_domain).'</a>');
469 return $links;
470 } // odb_settings_link()
471
472
473 /********************************************************************************************
474 *
475 * ADD THE '1 CLICK OPTIMIZE DATABASE' ITEM TO THE ADMIN BAR (IF ACTIVATED)
476 *
477 ********************************************************************************************/
478 function odb_admin_bar() {
479 global $wp_admin_bar;
480
481 if (!is_super_admin() || !is_admin_bar_showing()) return;
482
483 $siteurl = site_url('/');
484 $wp_admin_bar->add_menu(
485 array(
486 'id' => 'optimize',
487 'title' => __('Optimize DB (1 click)', $this->odb_txt_domain),
488 'href' => $siteurl.'wp-admin/tools.php?page=rvg-optimize-database&action=run_detail' ));
489 } // odb_admin_bar()
490
491
492 /********************************************************************************************
493 *
494 * 'ICON MODE': ADD A LINK TO THE ADMIN MENU
495 *
496 ********************************************************************************************/
497 function odb_admin_icon() {
498 if (function_exists('add_menu_page')) {
499 add_menu_page(
500 __('Optimize Database', $this->odb_txt_domain), // page title
501 __('Optimize Database', $this->odb_txt_domain), // menu title
502 'administrator', // capability
503 'rvg-optimize-database', // menu slug
504 array(&$this, 'odb_start_manually'), // function
505 $this->odb_plugin_url.'images/icon.png' // icon url
506 );
507 }
508 } // odb_admin_icon()
509
510
511 /********************************************************************************************
512 *
513 * 'ICON MODE': REGISTER OPTION PAGE BUT HIDE IT FROM THE ADMIN MENU
514 *
515 ********************************************************************************************/
516 function odb_register_options() {
517 if (function_exists('add_submenu_page')) {
518 add_submenu_page(
519 null, // parent slug (NULL is hide from menu)
520 __('Optimize Database', $this->odb_txt_domain), // page title
521 __('Optimize Database', $this->odb_txt_domain), // menu title
522 'manage_options', // capability
523 'rvg_odb_admin', // menu slug
524 array(&$this, 'odb_settings_page') // function
525 );
526 } // if (function_exists('add_submenu_page'))
527 } // odb_register_options()
528
529
530 /*******************************************************************************
531 *
532 * LOAD TEXT DOMAIN
533 *
534 *******************************************************************************/
535 function odb_i18n() {
536 load_plugin_textdomain(
537 $this->odb_txt_domain, // domain
538 false, // abs rel path
539 dirname(plugin_basename( __FILE__ )).'/language/' // plugin rel path
540 );
541 } // odb_i18n()
542
543
544 /*******************************************************************************
545 *
546 * ARE WE ON A, FOR THIS PLUGIN, RELEVANT PAGE?
547 * Since v4.0.3
548 *
549 *******************************************************************************/
550 function odb_is_relevant_page() {
551 $this_page = '';
552 if(isset($_GET['page'])) {
553 $this_page = $_GET['page'];
554 return ($this_page == 'odb_settings_page' || $this_page == 'rvg-optimize-database');
555 }
556 return false;
557 } // odb_is_relevant_page()
558
559
560 /*******************************************************************************
561 *
562 * PLUGIN DE-ACTIVATION
563 *
564 *******************************************************************************/
565 public static function odb_deactivation_handler() {
566 // STOP SCHEDULER
567 wp_clear_scheduled_hook('odb_scheduler');
568 } // odb_deactivation_handler()
569
570
571 /*******************************************************************************
572 *
573 * PLUGIN UN-INSTALLATION
574 *
575 *******************************************************************************/
576 function odb_uninstallation_handler() {
577 // STOP SCHEDULER
578 wp_clear_scheduled_hook('odb_scheduler');
579
580 // DELETE THE OPTIONS
581 delete_option('odb_rvg_options');
582 delete_option('odb_rvg_excluded_tabs');
583
584 delete_site_option('odb_rvg_options');
585 delete_site_option('odb_rvg_excluded_tabs');
586
587 // DROP THE LOG TABLE
588 global $wpdb;
589 $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}odb_logs");
590 } // odb_uninstallation_handler()
591
592
593 /*******************************************************************************
594 *
595 * LOAD SETTINGS (OPTIONS) PAGE
596 *
597 *******************************************************************************/
598 function odb_settings_page() {
599 global $wpdb, $odb_rvg_excluded_tabs, $odb_ms_prefixes;
600
601 include_once(trailingslashit(dirname(__FILE__)).'/includes/settings-page.php');
602 } // odb_settings_page()
603
604
605 /*******************************************************************************
606 *
607 * START CLEANING / OPTIMIZATION (INITIATED BY THE USER, NOT FROM WP-CRON)
608 *
609 *******************************************************************************/
610 function odb_start_manually() {
611 $this->odb_start(false);
612 } // odb_start_manually()
613
614
615 /*******************************************************************************
616 *
617 * START CLEANING / OPTIMIZATION (FROM WP-CRON)
618 *
619 *******************************************************************************/
620 function odb_start_scheduler() {
621 $this->odb_start(true);
622 } // odb_start_scheduler()
623
624
625 /*******************************************************************************
626 *
627 * CREATE THE LOG TABLE (IF NOT EXISTS)
628 *
629 *******************************************************************************/
630 function odb_create_log_table() {
631 global $wpdb;
632
633 // PLUGIN RUNNING (v5.0.5)
634 $this->odb_tables = $this->odb_utilities_obj->odb_get_tables();
635
636 // CREATE LOG TABLE (IF NOT EXISTS) - v4.6
637 $this->odb_logtable_name = $wpdb->base_prefix . 'odb_logs';
638
639 $found = false;
640 for($i = 0; $i < count($this->odb_tables); $i++) {
641 if ($this->odb_tables[$i][0] == $this->odb_logtable_name) {
642 $found = true;
643 }
644 } // for($i = 0; $i < count($this->odb_tables); $i++)
645
646 // v5.0.3
647 if (!$found) {
648 $sql = '
649 CREATE TABLE IF NOT EXISTS `' . $this->odb_logtable_name . '` (
650 `odb_id` int(11) NOT NULL AUTO_INCREMENT,
651 `odb_timestamp` varchar(20) NOT NULL,
652 `odb_revisions` int(11) NOT NULL,
653 `odb_trash` int(11) NOT NULL,
654 `odb_spam` int(11) NOT NULL,
655 `odb_tags` int(11) NOT NULL,
656 `odb_transients` int(11) NOT NULL,
657 `odb_pingbacks` int(11) NOT NULL,
658 `odb_oembeds` int(11) NOT NULL,
659 `odb_orphans` int(11) NOT NULL,
660 `odb_tables` int(11) NOT NULL,
661 `odb_before` varchar(20) NOT NULL,
662 `odb_after` varchar(20) NOT NULL,
663 `odb_savings` varchar(20) NOT NULL,
664 PRIMARY KEY (`odb_id`)
665 ) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
666 ';
667
668 // CREATE TABLE
669 $wpdb->query($sql);
670 } // if (!$found)
671 } // odb_create_log_table()
672
673
674 /*******************************************************************************
675 *
676 * MAIN METHOD FOR CLEANING / OPTIMIZING
677 *
678 *******************************************************************************/
679 function odb_start($scheduler) {
680 $this->odb_create_log_table();
681
682 // PAGE LOAD TIMER
683 $time = microtime();
684 $time = explode(' ', $time);
685 $time = $time[1] + $time[0];
686 $this->odb_start_time = $time;
687
688 $action = '';
689 if(isset($_REQUEST['action'])) {
690 $action = $_REQUEST['action'];
691
692 // v4.6
693 if($action == 'view_log') {
694 // SHOW THE LOGS
695 $this->odb_logger_obj->odb_view_log();
696 // v4.6.1
697 return;
698 } else if($action == "clear_log") {
699 // CLEAR THE LOG TABLE
700 $this->odb_logger_obj->odb_clear_log();
701
702 // UPDATED MESSAGE
703 // v4.6
704 echo "<script>jQuery('#odb-running').hide();</script>";
705 echo "<div class='updated odb-bold'><p>".
706 __('Optimize Database after Deleting Revisions LOGS HAVE BEEN CLEARED', $this->odb_txt_domain);
707 echo "</p></div>";
708 } // if($action == "clear_log")
709 } // if(isset($_REQUEST['action']))
710
711 if(!$scheduler) {
712 // SHOW PAGE HEADER
713 $this->odb_displayer_obj->display_header();
714 // v4.1.9: STARTING: SHOW RUNNING INDICATOR
715 echo "<script>jQuery('#odb-running').show();</script>";
716 // SHOW CURRENT SETTINGS
717 $this->odb_displayer_obj->display_current_settings();
718 } // if(!$scheduler)
719
720 if ($action != 'analyze_summary' &&
721 $action != 'analyze_detail' &&
722 $action != 'run_summary' &&
723 $action != 'run_detail' &&
724 !$scheduler) {
725 /****************************************************************************************
726 * START SCREEN (SHOW SETTINGS + BUTTONS)
727 ****************************************************************************************/
728 $this->odb_displayer_obj->display_start_buttons($action);
729 } else {
730 $analyze = ($action == 'analyze_summary' || $action == 'analyze_detail');
731 /****************************************************************************************
732 * RUN CLEANING AND OPTIMIZATION
733 ****************************************************************************************/
734 $this->odb_displayer_obj->display_start_buttons($action);
735
736 // DELETE REDUNDANT DATA
737 $this->odb_cleaner_obj->odb_run_cleaner($scheduler, $action);
738
739 if ($scheduler || $action == 'run_summary' || $action == 'run_detail') {
740 // REGISTER THE LAST RUN
741 $this->odb_rvg_options['last_run'] = current_time('M j, Y @ H:i', 0);
742 // OPTIMIZE DATABASE TABLES
743 $this->odb_cleaner_obj->odb_run_optimizer($scheduler, $action);
744 // SHOW RESULTS
745 $this->odb_cleaner_obj->odb_savings($scheduler, $action);
746 } // if (!$analyze)
747
748 // SHOW 'DONE' PARAGRAPH
749 if (!$scheduler && !$analyze)
750 $this->odb_cleaner_obj->odb_done($analyze);
751
752 if ($analyze && $this->odb_cleaner_obj->grand_total > 0) {
753 $msg1 = __("CLICK ONE OF THE 'OPTIMIZE' BUTTONS TO ACTUALLY DELETE THE FOUND ITEMS", $this->odb_txt_domain);
754 $btn1 = __('Cancel', $this->odb_txt_domain);
755 $btn2 = __('Optimize (summary)', $this->odb_txt_domain);
756 $btn3 = __('Optimize (detail)', $this->odb_txt_domain);
757 ?>
758 <div class="odb-title-bar">
759 <h2><?php _e('Analysis Done!', $this->odb_txt_domain)?></h2>
760 </div>
761 <br><br>
762 <div id="odb-start-buttons" class="odb-padding-left">
763 <p>
764 <h4 class="odb-red odb-bold"><?php echo $msg1?></h4>
765 <br>
766 <input class="button odb-normal" type="button" name="cancel" value="<?php echo $btn1?>" onclick="self.location='tools.php?page=rvg-optimize-database'">
767 &nbsp;
768 &nbsp;<input class="button-primary button-large" type="button" name="optimize_summary" value="<?php echo $btn2?>" onclick="self.location='tools.php?page=rvg-optimize-database&action=run_summary'" class="odb-bold">
769 &nbsp;
770 &nbsp;<input class="button-primary button-large" type="button" name="optimize_detail" value="<?php echo $btn3?>" onclick="self.location='tools.php?page=rvg-optimize-database&action=run_detail'" class="odb-bold">
771
772 </p>
773 </div><!-- /odb-start-buttons -->
774 <?php
775 } // if ($analyze)
776
777 $this->odb_rvg_options['last_run_seconds'] = $this->odb_last_run_seconds;
778
779 $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $this->odb_rvg_options);
780 } // if ($action != 'analyze_summary' && ...
781
782 if(!defined('RUN_OPTIMIZE_DATABASE')) {
783 // v4.8.0: DONE: HIDE RUNNING INDICATOR
784 echo "<script>jQuery('#odb-running').hide();</script>";
785 } // if(!defined('RUN_OPTIMIZE_DATABASE'))
786 } // odb_start()
787 } // OptimizeDatabase
788 ?>