PluginProbe
Optimize Database after Deleting Revisions / 4.0.1
Optimize Database after Deleting Revisions v4.0.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 4.0.1, at rvg-optimize-database.php

556 lines 21.3 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 4.0.1
5 */
6 /*
7 Plugin Name: Optimize Database after Deleting Revisions
8 Plugin URI: http://cagewebdev.com/index.php/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 Version: 4.0.1
13 */
14
15 /********************************************************************************************
16 *
17 * MAIN CLASS
18 *
19 ********************************************************************************************/
20 // CREATE INSTANCE
21 global $odb_class;
22 $odb_class = new OptimizeDatabase();
23
24 class OptimizeDatabase
25 {
26 // VERSION
27 var $odb_version = '4.0.1';
28 var $odb_release_date = '11/27/2015';
29
30 // PLUGIN OPTIONS
31 var $odb_rvg_options = array();
32
33 // EXCLUDED TABELS
34 var $odb_rvg_excluded_tabs = array();
35
36 // MULTISITE STRUCTURE
37 var $odb_ms_prefixes = array();
38 var $odb_ms_blogids = array();
39
40 // DATABASE TABLES
41 var $odb_tables = array();
42
43 // MINIFYING?
44 var $odb_minify;
45
46 // MAIN PLUGIN FILE
47 var $odb_main_file = 'rvg-optimize-database/rvg-optimize-database.php';
48
49 // LOCALIZATION
50 var $odb_txt_domain = 'rvg-optimize-database';
51
52 // PLUGIN
53 var $odb_plugin_url;
54 var $odb_plugin_path;
55
56 // LOGGING
57 var $odb_logfile_url;
58 var $odb_logfile_path;
59 var $odb_log_arr = array();
60
61 // OBJECTS
62 var $odb_cleaner_obj;
63 var $odb_displayer_obj;
64 var $odb_logger_obj;
65 var $odb_multisite_obj;
66 var $odb_scheduler_obj;
67 var $odb_utilities_obj;
68
69 // PAGE TIMER
70 var $odb_start_time;
71
72
73 /*******************************************************************************
74 * CONSTRUCTOR
75 *******************************************************************************/
76 function __construct()
77 {
78 // INITIALIZE PLUGIN
79 add_action('init', array(&$this, 'odb_init'));
80 } // __construct()
81
82
83 /*******************************************************************************
84 * INITIALIZE PLUGIN
85 *******************************************************************************/
86 function odb_init()
87 {
88 // LOAD CLASSES
89 $this->odb_classes();
90
91 // URLS AND DIRECTORIES
92 $this->odb_urls_dirs();
93
94 // GET (MULTI-SITE) NETWORK INFORMATION
95 $this->odb_multisite_obj->odb_ms_network_info();
96
97 // LOAD OPTIONS
98 $this->odb_load_options();
99
100 // INITIALIZE WORDPRESS HOOKS
101 $this->odb_init_hooks();
102
103 // GET THE DATABASE TABLES
104 $this->odb_tables = $this->odb_utilities_obj->odb_get_tables();
105
106 // GET EXCLUDED TABLES FROM SETTINGS
107 $this->odb_rvg_excluded_tabs = $this->odb_multisite_obj->odb_ms_get_option('odb_rvg_excluded_tabs');
108
109 // USE THE NON-MINIFIED VERSION OF SCRIPTS AND STYLE SHEETS WHILE DEBUGGING
110 $this->odb_minify = (defined('WP_DEBUG') && WP_DEBUG) ? '' : '.min';
111
112 // LOAD STYLE SHEET (ONLY ON RELEVANT PAGES)
113 $this_page = '';
114 if(isset($_GET['page'])) $this_page = $_GET['page'];
115 if($this_page == 'odb_settings_page' || $this_page == 'rvg-optimize-database')
116 { wp_register_style('odb-style'.$this->odb_version, plugins_url('css/style'.$this->odb_minify.'.css', __FILE__));
117 wp_enqueue_style('odb-style'.$this->odb_version);
118 }
119 } // odb_init()
120
121
122 /*******************************************************************************
123 * LOAD AND INITIALIZE CLASSES
124 *******************************************************************************/
125 function odb_classes()
126 {
127 // LOAD CLASSES
128 include_once('classes/odb-cleaner.php');
129 include_once('classes/odb-displayer.php');
130 include_once('classes/odb-logger.php');
131 include_once('classes/odb-multisite.php');
132 include_once('classes/odb-scheduler.php');
133 include_once('classes/odb-utilities.php');
134
135 // CREATE INSTANCES
136 $this->odb_cleaner_obj = new ODB_Cleaner();
137 $this->odb_displayer_obj = new ODB_Displayer();
138 $this->odb_logger_obj = new ODB_Logger();
139 $this->odb_multisite_obj = new ODB_MultiSite();
140 $this->odb_scheduler_obj = new ODB_Scheduler();
141 $this->odb_utilities_obj = new ODB_Utilities();
142 } // odb_classes()
143
144
145 /*******************************************************************************
146 * INITIALIZE URLS AND DIRECTORIES
147 *******************************************************************************/
148 function odb_urls_dirs()
149 {
150 $this->odb_plugin_url = plugins_url( '/', __FILE__ );
151 $this->odb_plugin_path = plugin_dir_path(__FILE__);
152 $this->odb_logfile_url = $this->odb_plugin_url.'logs/rvg-optimize-db-log.html';
153 $this->odb_logfile_path = $this->odb_plugin_path.'logs/rvg-optimize-db-log.html';
154 $this->odb_logfile_debug_path = $this->odb_plugin_path.'logs/rvg-optimize-db-log.txt';
155 } // odb_urls_dirs()
156
157
158 /*******************************************************************************
159 * LOAD OPTIONS
160 *******************************************************************************/
161 function odb_load_options()
162 {
163 // GET OPTIONS
164 $this->odb_rvg_options = $this->odb_multisite_obj->odb_ms_get_option('odb_rvg_options');
165
166 if(!isset($this->odb_rvg_options['version']))
167 // THIS VERSION IS FROM BEFORE 4.0: CONVERT OPTIONS
168 $this->odb_convert_options();
169
170 if(!isset($this->odb_rvg_options['adminbar']))
171 $this->odb_rvg_options['adminbar'] = 'N';
172 if(!isset($this->odb_rvg_options['adminmenu']))
173 $this->odb_rvg_options['adminmenu'] = 'N';
174 if(!isset($this->odb_rvg_options['clear_pingbacks']))
175 $this->odb_rvg_options['clear_pingbacks'] = 'N';
176 if(!isset($this->odb_rvg_options['clear_spam']))
177 $this->odb_rvg_options['clear_spam'] = 'N';
178 if(!isset($this->odb_rvg_options['clear_tags']))
179 $this->odb_rvg_options['clear_tags'] = 'N';
180 if(!isset($this->odb_rvg_options['clear_transients']))
181 $this->odb_rvg_options['clear_transients'] = 'N';
182 if(!isset($this->odb_rvg_options['clear_trash']))
183 $this->odb_rvg_options['clear_trash'] = 'N';
184 if(!isset($this->odb_rvg_options['last_run']))
185 $this->odb_rvg_options['last_run'] = '';
186 if(!isset($this->odb_rvg_options['logging_on']))
187 $this->odb_rvg_options['logging_on'] = 'N';
188 if(!isset($this->odb_rvg_options['nr_of_revisions']))
189 $this->odb_rvg_options['nr_of_revisions'] = (int)0;
190 if(!isset($this->odb_rvg_options['optimize_innodb']))
191 $this->odb_rvg_options['optimize_innodb'] = 'N';
192 if(!isset($this->odb_rvg_options['schedule_type']))
193 $this->odb_rvg_options['schedule_type'] = '';
194 if(!isset($this->odb_rvg_options['schedule_hour']))
195 $this->odb_rvg_options['schedule_hour'] = '';
196 if(!isset($this->odb_rvg_options['total_savings']))
197 $this->odb_rvg_options['total_savings'] = (int)0;
198 if(!isset($this->odb_rvg_options['version']))
199 $this->odb_rvg_options['version'] = $this->odb_version;
200
201 // UPDATE OPTIONS
202 $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $this->odb_rvg_options);
203
204 // UPDATE SCHEDULER (IF NEEDED)
205 $this->odb_scheduler_obj->odb_update_scheduler();
206 } // odb_load_options()
207
208
209 /*******************************************************************************
210 * COPY AND DELETE OPTIONS FROM PREVIOUS VERSIONS (BEFORE 4.0)
211 *******************************************************************************/
212 function odb_convert_options()
213 {
214 global $wpdb;
215
216 // STOP OLD SCHEDULER
217 wp_clear_scheduled_hook('rvg_optimize_database');
218
219 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_total_savings');
220 if($setting)
221 { $this->odb_rvg_options['total_savings'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_total_savings');
222 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_total_savings');
223 }
224
225 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_pingbacks');
226 if($setting)
227 { $this->odb_rvg_options['clear_pingbacks'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_pingbacks');
228 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_pingbacks');
229 }
230
231 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_spam');
232 if($setting)
233 { $this->odb_rvg_options['clear_spam'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_spam');
234 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_spam');
235 }
236
237 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_tags');
238 if($setting)
239 { $this->odb_rvg_options['clear_tags'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_tags');
240 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_tags');
241 }
242
243 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_transients');
244 if($setting)
245 { $this->odb_rvg_options['clear_transients'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_transients');
246 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_transients');
247 }
248
249 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_trash');
250 if($setting)
251 { $this->odb_rvg_options['clear_trash'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_clear_trash');
252 $this->odb_multisite_obj->odb_ms_delete_option('rvg_clear_trash');
253 }
254
255 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminbar');
256 if($setting)
257 { $this->odb_rvg_options['adminbar'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminbar');
258 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_adminbar');
259 }
260
261 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminmenu');
262 if($setting)
263 { $this->odb_rvg_options['adminmenu'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_adminmenu');
264 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_adminmenu');
265 }
266
267 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_logging_on');
268 if($setting)
269 { $this->odb_rvg_options['logging_on'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_logging_on');
270 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_logging_on');
271 }
272
273 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_number');
274 if($setting)
275 $this->odb_rvg_options['nr_of_revisions'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_number');
276 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_number');
277
278 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedule');
279 if($setting)
280 $this->odb_rvg_options['schedule_type'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedule');
281 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_schedule');
282
283 $setting = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedulehour');
284 if($setting)
285 $this->odb_rvg_options['schedule_hour'] = $this->odb_multisite_obj->odb_ms_get_option('rvg_odb_schedulehour');
286 $this->odb_multisite_obj->odb_ms_delete_option('rvg_odb_schedulehour');
287
288 // COPY EXCLUDED TABLES
289 for($i=0; $i<count($this->odb_ms_prefixes); $i++)
290 {
291 $sql = "
292 SELECT `option_name`
293 FROM ".$this->odb_ms_prefixes[$i]."options
294 WHERE `option_name` LIKE 'rvg_ex_%'
295 ";
296
297 $res = $wpdb->get_results($sql, ARRAY_A);
298 for($j=0; $j<count($res); $j++)
299 { $option_name = $res[$j]['option_name'];
300 $option_name_new = substr($option_name, 7);
301 $this->odb_rvg_excluded_tabs[$option_name_new] = 'Y';
302 $this->odb_multisite_obj->odb_ms_delete_option($option_name);
303 }
304 }
305
306 // UPDATE EXCLUDED TABLES
307 $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_excluded_tabs', $this->odb_rvg_excluded_tabs);
308 } // odb_convert_options()
309
310
311 /*******************************************************************************
312 * INITIALIZE WORDPRESS HOOKS
313 *******************************************************************************/
314 function odb_init_hooks()
315 {
316 // ON DE-ACTIVATION
317 register_deactivation_hook(__FILE__, array('OptimizeDatabase', 'odb_deactivation_handler'));
318
319 // ON UN-INSTALLATION
320 register_uninstall_hook(__FILE__, array('OptimizeDatabase', 'odb_uninstallation_handler'));
321
322 // ADD ENTRY TO ADMIN TOOLS MENU
323 add_action('admin_menu', array(&$this, 'odb_admin_tools'));
324 add_action('admin_menu', array(&$this, 'odb_admin_settings'));
325
326 // ICON MODE: ADD ICON TO ADMIN MENU
327 if ($this->odb_rvg_options['adminmenu'] == "Y")
328 { add_action('admin_menu', array(&$this, 'odb_admin_icon'));
329 add_action('admin_menu', array(&$this, 'odb_register_options'));
330 }
331
332 // ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE
333 add_filter('plugin_action_links_'.plugin_basename(__FILE__), array(&$this, 'odb_settings_link'));
334
335 // ADD THE '1 CLICK OPTIMIZE DATABASE' ITEM TO THE ADMIN BAR (IF ACTIVATED)
336 if($this->odb_rvg_options['adminbar'] == 'Y')
337 add_action('wp_before_admin_bar_render', array(&$this, 'odb_admin_bar'));
338
339 // INITIALIZE LOCALIZATION
340 add_action('admin_menu', array(&$this, 'odb_i18n'));
341 } // odb_init_hooks()
342
343
344 /*******************************************************************************
345 * ADD ENTRY TO THE ADMIN TOOLS MENU
346 *******************************************************************************/
347 function odb_admin_tools()
348 { if (function_exists('add_management_page'))
349 { add_management_page(
350 __('Optimize Database',$this->odb_txt_domain), // page title
351 __('Optimize Database',$this->odb_txt_domain), // menu title
352 'manage_options', // capability
353 'rvg-optimize-database', // menu slug
354 array(&$this, 'odb_start_manually')); // function
355 } // if (function_exists('add_management_page'))
356 } // odb_admin_tools()
357
358
359 /*******************************************************************************
360 * ADD ENTRY TO THE ADMIN SETTINGS MENU
361 *******************************************************************************/
362 function odb_admin_settings()
363 { if (function_exists('add_options_page'))
364 add_options_page(
365 __('Optimize Database', $this->odb_txt_domain), // page title
366 __('Optimize Database', $this->odb_txt_domain), // menu title
367 'manage_options', // capability
368 'odb_settings_page', // menu slug
369 array(&$this, 'odb_settings_page') // function
370 );
371 } // odb_admin_settings()
372
373
374 /*******************************************************************************
375 * ADD 'SETTINGS' LINK TO THE MAIN PLUGIN PAGE
376 *******************************************************************************/
377 function odb_settings_link($links)
378 { array_unshift($links, '<a href="options-general.php?page=odb_settings_page">'.__('Settings', $this->odb_txt_domain).'</a>');
379 return $links;
380 } // odb_settings_link()
381
382
383 /********************************************************************************************
384 * ADD THE '1 CLICK OPTIMIZE DATABASE' ITEM TO THE ADMIN BAR (IF ACTIVATED)
385 ********************************************************************************************/
386 function odb_admin_bar()
387 { global $wp_admin_bar;
388
389 if (!is_super_admin() || !is_admin_bar_showing()) return;
390
391 $siteurl = site_url('/');
392 $wp_admin_bar->add_menu(
393 array(
394 'id' => 'optimize',
395 'title' => __('Optimize DB (1 click)', $this->odb_txt_domain),
396 'href' => $siteurl.'wp-admin/tools.php?page=rvg-optimize-database&action=run' ));
397 } // odb_admin_bar()
398
399
400 /********************************************************************************************
401 * 'ICON MODE': ADD A LINK TO THE ADMIN MENU
402 ********************************************************************************************/
403 function odb_admin_icon()
404 {
405 if (function_exists('add_menu_page'))
406 {
407 add_menu_page(
408 __('Optimize Database', $this->odb_txt_domain), // page title
409 __('Optimize Database', $this->odb_txt_domain), // menu title
410 'administrator', // capability
411 'rvg-optimize-database', // menu slug
412 array(&$this, 'odb_start_manually'), // function
413 $this->odb_plugin_url.'images/icon.png' // icon url
414 );
415 }
416 } // odb_admin_icon()
417
418
419 /********************************************************************************************
420 * 'ICON MODE': REGISTER OPTION PAGE BUT HIDE IT FROM THE ADMIN MENU
421 ********************************************************************************************/
422 function odb_register_options()
423 {
424 if (function_exists('add_submenu_page'))
425 { add_submenu_page(
426 null, // parent slug (NULL is hide from menu)
427 __('Optimize Database', $this->odb_txt_domain), // page title
428 __('Optimize Database', $this->odb_txt_domain), // menu title
429 'manage_options', // capability
430 'rvg_odb_admin', // menu slug
431 array(&$this, 'odb_settings_page') // function
432 );
433 }
434 } // odb_register_options()
435
436
437 /*******************************************************************************
438 * LOAD TEXT DOMAIN
439 *******************************************************************************/
440 function odb_i18n()
441 {
442 load_plugin_textdomain(
443 $this->odb_txt_domain, // domain
444 false, // abs rel path
445 dirname(plugin_basename( __FILE__ )).'/language/' // plugin rel path
446 );
447 } // odb_i18n()
448
449
450 /*******************************************************************************
451 * PLUGIN DE-ACTIVATION
452 *******************************************************************************/
453 public static function odb_deactivation_handler()
454 { // STOP SCHEDULER
455 wp_clear_scheduled_hook('odb_scheduler');
456 } // odb_deactivation_handler()
457
458
459 /*******************************************************************************
460 * PLUGIN UN-INSTALLATION
461 *******************************************************************************/
462 public static function odb_uninstallation_handler()
463 { // STOP SCHEDULER
464 wp_clear_scheduled_hook('odb_scheduler');
465
466 // DELETE OPTIONS FROM DATABASE
467 $this->odb_multisite_obj->odb_ms_delete_option('odb_rvg_excluded_tabs');
468 $this->odb_multisite_obj->odb_ms_delete_option('odb_rvg_options');
469 } // odb_uninstallation_handler()
470
471
472 /*******************************************************************************
473 * LOAD SETTINGS (OPTIONS) PAGE
474 *******************************************************************************/
475 function odb_settings_page()
476 { global $wpdb, $odb_rvg_excluded_tabs, $odb_ms_prefixes;
477
478 include_once(trailingslashit(dirname(__FILE__)).'/includes/settings-page.php');
479 } // odb_settings_page()
480
481
482 /*******************************************************************************
483 * START CLEANING / OPTIMIZATION (INITIATED BY THE USER, NOT FROM WP-CRON)
484 *******************************************************************************/
485 function odb_start_manually()
486 {
487 $this->odb_start(false);
488 } // odb_start_manually()
489
490
491 /*******************************************************************************
492 * START CLEANING / OPTIMIZATION (FROM WP-CRON)
493 *******************************************************************************/
494 function odb_start_scheduler()
495 {
496 $this->odb_start(true);
497 } // odb_start_scheduler()
498
499
500 /*******************************************************************************
501 * MAIN METHOD FOR CLEANING / OPTIMIZING
502 *******************************************************************************/
503 function odb_start($scheduler)
504 {
505 // PAGE LOAD TIMER
506 $time = microtime();
507 $time = explode(' ', $time);
508 $time = $time[1] + $time[0];
509 $this->odb_start_time = $time;
510
511 $action = '';
512 if(isset($_REQUEST['action']))
513 { $action = $_REQUEST['action'];
514 if($action == "delete_log")
515 { // DELETE LOG FILE
516 @unlink($this->odb_plugin_path.'logs/rvg-optimize-db-log.html');
517
518 // UPDATED MESSAGE
519 echo "<div class='updated odb-bold'><p>".
520 __('Optimize Database after Deleting Revisions LOG FILE HAS BEEN DELETED', $this->odb_txt_domain);
521 echo "</p></div>";
522 }
523 } // if(isset($_REQUEST['action']))
524
525 if(!$scheduler)
526 { // SHOW PAGE HEADER
527 $this->odb_displayer_obj->display_header();
528 // SHOW CURRENT SETTINGS
529 $this->odb_displayer_obj->display_current_settings();
530 } // if(!$scheduler)
531
532 if ($action != 'run' && !$scheduler)
533 { /****************************************************************************************
534 * START SCREEN (SHOW SETTINGS + BUTTONS)
535 ****************************************************************************************/
536 $this->odb_displayer_obj->display_start_buttons();
537 }
538 else
539 { /****************************************************************************************
540 * RUN CLEANING AND OPTIMIZATION
541 ****************************************************************************************/
542 // REGISTER THE LAST RUN
543 $this->odb_rvg_options['last_run'] = Date('M j, Y @ H:i');
544 $this->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $this->odb_rvg_options);
545 // DELETE REDUNDANT DATA
546 $this->odb_cleaner_obj->odb_run_cleaner($scheduler);
547 // OPTIMIZE DATABASE TABLES
548 $this->odb_cleaner_obj->odb_run_optimizer($scheduler);
549 // SHOW RESULTS
550 $this->odb_cleaner_obj->odb_savings($scheduler);
551 // SHOW 'DONE' PARAGRAPH
552 if(!$scheduler) $this->odb_cleaner_obj->odb_done();
553 } // if($action != 'run')
554 } // odb_start()
555 } // OptimizeDatabase
556 ?>