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
rvg-optimize-database / classes / odb-scheduler.php

odb-scheduler.php in Optimize Database after Deleting Revisions 5.2, at classes/odb-scheduler.php

132 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /************************************************************************************************
3 *
4 * SCHEDULER CLASS
5 *
6 ************************************************************************************************/
7 ?>
8 <?php
9 class ODB_Scheduler {
10
11 /********************************************************************************************
12 * CONSTRUCTOR
13 ********************************************************************************************/
14 function __construct() {
15 global $odb_class;
16
17 // ADD EXTRA CRON SCHEDULES
18 add_filter('cron_schedules', array(&$this, 'odb_extra_cron_schedules'));
19
20 // ADD SCHEDULER
21 add_action('odb_scheduler', array(&$odb_class, 'odb_start_scheduler'));
22 } // __construct()
23
24
25 /*******************************************************************************
26 * ADD EXTRA SCHEDULE FOR THE CRONTAB
27 * http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules
28 *
29 * v4.0.1 Localization fixed
30 * v4.0.3 ($schedules) added as a parameter
31 * v4.2.0 Added monthly
32 *******************************************************************************/
33 function odb_extra_cron_schedules($schedules) {
34 global $odb_class;
35
36 $schedules['weekly'] = array(
37 'interval' => 604800,
38 'display' => __('Once Weekly', 'rvg-optimize-database')
39 );
40 $schedules['monthly'] = array(
41 'interval' => 2628000, // average amount of seconds in a month
42 'display' => __('Once Monthly', 'rvg-optimize-database')
43 );
44 // FOR DEBUGGING
45 $schedules['fiveminutes'] = array(
46 'interval' => 300,
47 'display' => __('Every Five Minutes', 'rvg-optimize-database')
48 );
49 return $schedules;
50 } // odb_extra_cron_schedules()
51
52
53 /*******************************************************************************
54 * UPDATE SCHEDULER (IF NEEDED)
55 *******************************************************************************/
56 function odb_update_scheduler() {
57 global $odb_class;
58
59 if($odb_class->odb_rvg_options['schedule_type'] == '') {
60 // SHOULDN'T BE SCHEDULED
61 wp_clear_scheduled_hook('odb_scheduler');
62 $odb_class->odb_rvg_options['schedule_hour'] = '';
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
66 if($odb_class->odb_rvg_options['schedule_type'] != 'daily' &&
67 $odb_class->odb_rvg_options['schedule_type'] != 'weekly' &&
68 $odb_class->odb_rvg_options['schedule_type'] != 'monthly'
69 ) {
70 $odb_class->odb_rvg_options['schedule_hour'] = '';
71 $odb_class->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $odb_class->odb_rvg_options);
72 }
73
74 if (!wp_next_scheduled('odb_scheduler'))
75 wp_schedule_event($this->odb_calculate_time(), $odb_class->odb_rvg_options['schedule_type'], 'odb_scheduler');
76 } // if($odb_class->odb_rvg_options['schedule_type'] == '')
77 } // odb_update_scheduler()
78
79
80 /*******************************************************************************
81 * SCHEDULE CHANGED ON SETTINGS PAGE: RESCHEDULE
82 *******************************************************************************/
83 function odb_reschedule() {
84 global $odb_class;
85
86 wp_clear_scheduled_hook('odb_scheduler');
87 wp_schedule_event($this->odb_calculate_time(), $odb_class->odb_rvg_options['schedule_type'], 'odb_scheduler');
88 } // odb_reschedule()
89
90
91 /*******************************************************************************
92 * CALCULATE SCHEDULE TIME, BASED ON THE SCHEDULE TYPE
93 *
94 * v4.5 Fixed time issues
95 *******************************************************************************/
96 function odb_calculate_time() {
97 global $odb_class;
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
108 if ($odb_class->odb_rvg_options['schedule_type'] == 'daily' ||
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) {
114 // NEXT RUN WILL BE TOMORROW
115 $date = date('YmdHis', strtotime($current_date.$odb_class->odb_rvg_options['schedule_hour'].'0000'.' + 1 day'));
116 } else {
117 // NEXT RUN WILL BE TODAY
118 $date = $current_date.$odb_class->odb_rvg_options['schedule_hour'].'0000';
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);
130 } // odb_calculate_time()
131 } // ODB_Scheduler
132 ?>