columns.php
11 years ago
counter.php
11 years ago
cron.php
11 years ago
frontend.php
11 years ago
functions.php
11 years ago
query.php
11 years ago
settings.php
11 years ago
update.php
11 years ago
widgets.php
11 years ago
cron.php
99 lines
| 1 | <?php |
| 2 | if(!defined('ABSPATH')) exit; |
| 3 | |
| 4 | new Post_Views_Counter_Cron(); |
| 5 | |
| 6 | class Post_Views_Counter_Cron { |
| 7 | |
| 8 | public function __construct() { |
| 9 | // set instance |
| 10 | Post_Views_Counter()->add_instance('cron', $this); |
| 11 | |
| 12 | // actions |
| 13 | add_action('init', array(&$this, 'check_cron')); |
| 14 | add_action('pvc_reset_counts', array(&$this, 'reset_counts')); |
| 15 | add_action('pvc_flush_cached_counts', array(&$this, 'flush_cached_counts')); |
| 16 | |
| 17 | // filters |
| 18 | add_filter('cron_schedules', array(&$this, 'cron_time_intervals')); |
| 19 | } |
| 20 | |
| 21 | |
| 22 | /** |
| 23 | * Reset daily counts |
| 24 | */ |
| 25 | public function reset_counts() { |
| 26 | global $wpdb; |
| 27 | |
| 28 | $wpdb->query('DELETE FROM '.$wpdb->prefix.'post_views WHERE type = 0'); |
| 29 | } |
| 30 | |
| 31 | |
| 32 | /** |
| 33 | * Call Post_Views_Counter_Counter::flush_cache_to_db() |
| 34 | * This is (un)scheduled on plugin activation/deactivation |
| 35 | */ |
| 36 | public function flush_cached_counts() { |
| 37 | $counter = Post_Views_Counter()->get_instance('counter'); |
| 38 | |
| 39 | if ( $counter && $counter->using_object_cache() ) { |
| 40 | $counter->flush_cache_to_db(); |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | |
| 45 | /** |
| 46 | * Add new cron interval from settings |
| 47 | */ |
| 48 | public function cron_time_intervals($schedules) { |
| 49 | $schedules['post_views_counter_interval'] = array( |
| 50 | 'interval' => Post_Views_Counter()->get_instance('counter')->get_timestamp(Post_Views_Counter()->get_attribute('options', 'general', 'reset_counts', 'type'), Post_Views_Counter()->get_attribute('options', 'general', 'reset_counts', 'number'), false), |
| 51 | 'display' => __('Post Views Counter reset daily counts interval', 'post-views-counter') |
| 52 | ); |
| 53 | |
| 54 | $schedules['post_views_counter_flush_interval'] = array( |
| 55 | 'interval' => Post_Views_Counter()->get_instance('counter')->get_timestamp(Post_Views_Counter()->get_attribute('options', 'general', 'flush_interval', 'type'), Post_Views_Counter()->get_attribute('options', 'general', 'flush_interval', 'number'), false), |
| 56 | 'display' => __('Post Views Counter cache flush interval', 'post-views-counter') |
| 57 | ); |
| 58 | |
| 59 | return $schedules; |
| 60 | } |
| 61 | |
| 62 | |
| 63 | /** |
| 64 | * Check whether WP Cron needs to add new task |
| 65 | */ |
| 66 | public function check_cron() { |
| 67 | if (!is_admin()) |
| 68 | return; |
| 69 | |
| 70 | // sets wp cron task |
| 71 | if (Post_Views_Counter()->get_attribute('options', 'general', 'cron_run')) { |
| 72 | |
| 73 | // not set or need to be updated? |
| 74 | if (!wp_next_scheduled('pvc_reset_counts') || Post_Views_Counter()->get_attribute('options', 'general', 'cron_update')) { |
| 75 | |
| 76 | // task is added but need to be updated |
| 77 | if (Post_Views_Counter()->get_attribute('options', 'general', 'cron_update')) { |
| 78 | // remove old schedule |
| 79 | wp_clear_scheduled_hook('pvc_reset_counts'); |
| 80 | |
| 81 | // set update to false |
| 82 | $general = Post_Views_Counter()->get_attribute('options', 'general'); |
| 83 | $general['cron_update'] = false; |
| 84 | |
| 85 | // update settings |
| 86 | update_option('post_views_counter_settings_general', $general); |
| 87 | } |
| 88 | |
| 89 | // set schedule |
| 90 | wp_schedule_event(Post_Views_Counter()->get_instance('counter')->get_timestamp(Post_Views_Counter()->get_attribute('options', 'general', 'reset_counts', 'type'), Post_Views_Counter()->get_attribute('options', 'general', 'reset_counts', 'number')), 'post_views_counter_interval', 'pvc_reset_counts'); |
| 91 | } |
| 92 | } else { |
| 93 | // remove schedule |
| 94 | wp_clear_scheduled_hook('pvc_reset_counts'); |
| 95 | remove_action('pvc_reset_counts', array(&$this, 'reset_counts')); |
| 96 | } |
| 97 | } |
| 98 | } |
| 99 | ?> |