PluginProbe
Optimize Database after Deleting Revisions / 5.2
Optimize Database after Deleting Revisions v5.2
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
← All changes | classes/odb-scheduler.php +67 -54 4.0.15.2 View file →
@@ -5,83 +5,85 @@
5 5 *
6 6 ************************************************************************************************/
7 7 ?>
8 8 <?php
9 -class ODB_Scheduler
10 -{
9 +class ODB_Scheduler {
10 +
11 11 /********************************************************************************************
12 12 * CONSTRUCTOR
13 - ********************************************************************************************/
14 - function __construct()
15 - {
13 + ********************************************************************************************/
14 + function __construct() {
16 15 global $odb_class;
17 -
16 +
18 17 // ADD EXTRA CRON SCHEDULES
19 18 add_filter('cron_schedules', array(&$this, 'odb_extra_cron_schedules'));
20 -
19 +
21 20 // ADD SCHEDULER
22 21 add_action('odb_scheduler', array(&$odb_class, 'odb_start_scheduler'));
23 22 } // __construct()
24 -
25 -
23 +
24 +
26 25 /*******************************************************************************
27 26 * ADD EXTRA SCHEDULE FOR THE CRONTAB
28 27 * http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules
29 28 *
30 29 * v4.0.1 Localization fixed
30 + * v4.0.3 ($schedules) added as a parameter
31 + * v4.2.0 Added monthly
31 32 *******************************************************************************/
32 - function odb_extra_cron_schedules()
33 - {
33 + function odb_extra_cron_schedules($schedules) {
34 34 global $odb_class;
35 -
35 +
36 36 $schedules['weekly'] = array(
37 37 'interval' => 604800,
38 - 'display' => __('Once Weekly', $odb_class->odb_txt_domain)
38 + 'display' => __('Once Weekly', 'rvg-optimize-database')
39 39 );
40 + $schedules['monthly'] = array(
41 + 'interval' => 2628000, // average amount of seconds in a month
42 + 'display' => __('Once Monthly', 'rvg-optimize-database')
43 + );
40 44 // FOR DEBUGGING
41 45 $schedules['fiveminutes'] = array(
42 46 'interval' => 300,
43 - 'display' => __('Every Five Minutes', $odb_class->odb_txt_domain)
44 - );
47 + 'display' => __('Every Five Minutes', 'rvg-optimize-database')
48 + );
45 49 return $schedules;
46 50 } // odb_extra_cron_schedules()
47 -
48 -
51 +
52 +
49 53 /*******************************************************************************
50 54 * UPDATE SCHEDULER (IF NEEDED)
51 55 *******************************************************************************/
52 - function odb_update_scheduler()
53 - {
56 + function odb_update_scheduler() {
54 57 global $odb_class;
55 58
56 - if($odb_class->odb_rvg_options['schedule_type'] == '')
57 - { // SHOULDN'T BE SCHEDULED
59 + if($odb_class->odb_rvg_options['schedule_type'] == '') {
60 + // SHOULDN'T BE SCHEDULED
58 61 wp_clear_scheduled_hook('odb_scheduler');
59 62 $odb_class->odb_rvg_options['schedule_hour'] = '';
60 - $odb_class->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $odb_class->odb_rvg_options);
61 - }
62 - else
63 - { // JOB SHOULD BE SCHEDULED: SCHEDULE IT
63 + $odb_class->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $odb_class->odb_rvg_options);
64 + } else {
65 + // JOB SHOULD BE SCHEDULED: SCHEDULE IT
64 66 if($odb_class->odb_rvg_options['schedule_type'] != 'daily' &&
65 - $odb_class->odb_rvg_options['schedule_type'] != 'weekly')
66 - {
67 + $odb_class->odb_rvg_options['schedule_type'] != 'weekly' &&
68 + $odb_class->odb_rvg_options['schedule_type'] != 'monthly'
69 + ) {
67 70 $odb_class->odb_rvg_options['schedule_hour'] = '';
68 71 $odb_class->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $odb_class->odb_rvg_options);
69 72 }
70 -
73 +
71 74 if (!wp_next_scheduled('odb_scheduler'))
72 75 wp_schedule_event($this->odb_calculate_time(), $odb_class->odb_rvg_options['schedule_type'], 'odb_scheduler');
73 76 } // if($odb_class->odb_rvg_options['schedule_type'] == '')
74 77 } // odb_update_scheduler()
75 -
76 78
79 +
77 80 /*******************************************************************************
78 81 * SCHEDULE CHANGED ON SETTINGS PAGE: RESCHEDULE
79 - *******************************************************************************/
80 - function odb_reschedule()
81 - {
82 + *******************************************************************************/
83 + function odb_reschedule() {
82 84 global $odb_class;
83 -
85 +
84 86 wp_clear_scheduled_hook('odb_scheduler');
85 87 wp_schedule_event($this->odb_calculate_time(), $odb_class->odb_rvg_options['schedule_type'], 'odb_scheduler');
86 88 } // odb_reschedule()
87 89
@@ -86,34 +88,45 @@
86 88 } // odb_reschedule()
87 89
88 90
89 91 /*******************************************************************************
90 - * CALCULATE SCHEDULE TIME
91 - *******************************************************************************/
92 - function odb_calculate_time()
93 - {
92 + * CALCULATE SCHEDULE TIME, BASED ON THE SCHEDULE TYPE
93 + *
94 + * v4.5 Fixed time issues
95 + *******************************************************************************/
96 + function odb_calculate_time() {
94 97 global $odb_class;
95 -
98 +
99 + // CURRENT TIME (WITH TIMEZONE)
100 + $timestamp = current_time('timestamp', 1);
101 + // YYYYMMDDHHMMSS
102 + $ymdhis = date('YmdHis', $timestamp);
103 +
104 + // CHOP TIME, YYYYMMDD
105 + $current_date = substr($ymdhis, 0, 8);
106 + $current_hour = substr($ymdhis, 8, 2);
107 +
96 108 if ($odb_class->odb_rvg_options['schedule_type'] == 'daily' ||
97 - $odb_class->odb_rvg_options['schedule_type'] == 'weekly')
98 - {
99 - // 'daily' OR 'weekly'
100 - $current_datetime = Date('YmdHis');
101 - $current_date = substr($current_datetime, 0, 8);
102 - $current_hour = substr($current_datetime, 8, 2);
103 -
104 - if($odb_class->odb_rvg_options['schedule_hour'] <= $current_hour)
109 + $odb_class->odb_rvg_options['schedule_type'] == 'weekly' ||
110 + $odb_class->odb_rvg_options['schedule_type'] == 'monthly'
111 + ) {
112 + // 'daily', 'weekly' OR 'monthly'
113 + if($odb_class->odb_rvg_options['schedule_hour'] <= $current_hour) {
105 114 // NEXT RUN WILL BE TOMORROW
106 115 $date = date('YmdHis', strtotime($current_date.$odb_class->odb_rvg_options['schedule_hour'].'0000'.' + 1 day'));
107 - else
116 + } else {
108 117 // NEXT RUN WILL BE TODAY
109 118 $date = $current_date.$odb_class->odb_rvg_options['schedule_hour'].'0000';
110 - $time = strtotime($date);
111 - }
112 - else
113 - // 'hourly' OR 'twicedaily': ONE MINUTE DELAY FOR THE FIRST RUN
114 - $time = time();
115 -
116 - return $time;
119 + } // if($odb_class->odb_rvg_options['schedule_hour'] <= $current_hour)
120 + } else {
121 + // 'hourly' OR 'twicedaily'
122 +
123 + // ADD ONE HOUR TO THE CURRENT TIME: IT WILL RUN THE NEXT FULL HOUR (16:00 FOR INSTANCE)
124 + $ts = $timestamp + 3600;
125 + $date = date('YmdH0000', $ts);
126 + } // if ($odb_class->odb_rvg_options['schedule_type'] == 'daily' ...
127 +
128 + // CONVERT TO TIMESTAMP
129 + return strtotime($date);
117 130 } // odb_calculate_time()
118 131 } // ODB_Scheduler
119 132 ?>