���ѧۧݧ�ӧ�� �ާ֧ߧ֧էا֧� - ���֧էѧܧ�ڧ��ӧѧ�� - /home/rickpfrv/elirickard.com/wp-content/plugins/custom-twitter-feeds/inc/SmashTwitter/CronUpdaterManager.php
���ѧ٧ѧ�
<?php /** * Class Request * * Performs a request to the Smash Balloon Twitter API. * * @since 2.1 */ namespace TwitterFeed\SmashTwitter; use TwitterFeed\Builder\CTF_Feed_Builder; use TwitterFeed\SB_Twitter_Cron_Updater; class CronUpdaterManager { private $max_batch; private $max_requests; private $api_call_log; private $options; private $request_counter; public function __construct() { $this->max_batch = 1; $this->max_requests = 1; $this->api_call_log = get_option( 'ctf_api_call_log', array() ); $this->options = ctf_get_database_settings(); $ctf_statuses_option = get_option( 'ctf_statuses', array() ); $this->request_counter = 0; if ( ! empty( $ctf_statuses_option['smash_twitter_cron']['request_counter'] ) ) { $this->request_counter = $ctf_statuses_option['smash_twitter_cron']['request_counter']; } } public function hooks() { add_action('ctf_smash_twitter_feed_update', [$this, 'maybe_do_updates']); add_action('ctf_smash_twitter_additional_batch', [$this, 'init_additional_batch']); } public function calculate_frequency() { return DAY_IN_SECONDS * 3; } public function can_update() { return true; } public function update_api_call_log( $type, $term ) { if ( ! is_array( $this->api_call_log ) ) { $this->api_call_log = array(); } if ( is_array( $this->api_call_log ) && count( $this->api_call_log ) > 50 ) { reset( $this->api_call_log ); unset( $this->api_call_log[ key($this->api_call_log ) ] ); } $this->api_call_log[] = array( 'time' => time(), 'type' => $type, 'term' => $term ); update_option( 'ctf_api_call_log', $this->api_call_log, false ); } public function get_api_call_log() { return $this->api_call_log; } public function init_additional_batch() { $this->do_updates( true ); } public function should_do_updates() { if ( ! $this->is_past_first_allowed_update() ) { return false; } $time_with_minute_buffer = time() + 60; if ( $this->get_last_update_process_time() < ($time_with_minute_buffer - $this->calculate_frequency()) ) { if ( $this->request_counter < $this->max_requests ) { return true; } } return false; } public function get_last_update_process_time() { $ctf_statuses_option = get_option( 'ctf_statuses', array() ); if ( empty( $ctf_statuses_option['smash_twitter_cron']['last_update_process_time'] ) ) { return 0; } return $ctf_statuses_option['smash_twitter_cron']['last_update_process_time']; } public function update_last_update_process( $time ) { $ctf_statuses_option = get_option( 'ctf_statuses', array() ); $ctf_statuses_option['smash_twitter_cron']['last_update_process_time'] = $time; update_option( 'ctf_statuses', $ctf_statuses_option ); } public function reset_request_counter() { $ctf_statuses_option = get_option( 'ctf_statuses', array() ); $ctf_statuses_option['smash_twitter_cron']['request_counter'] = 0; $ctf_statuses_option['smash_twitter_cron']['request_counter_reset_time'] = time(); $this->request_counter = 0; update_option( 'ctf_statuses', $ctf_statuses_option ); } public function maybe_reset_request_counter() { $ctf_statuses_option = get_option( 'ctf_statuses', array() ); $reset_time = ! empty( $ctf_statuses_option['smash_twitter_cron']['request_counter_reset_time'] ) ? $ctf_statuses_option['smash_twitter_cron']['request_counter_reset_time'] : 0; if ( $reset_time < time() - DAY_IN_SECONDS * 3 ) { $this->reset_request_counter(); return true; } return false; } public function get_request_counter() { return $this->request_counter; } public function add_to_request_counter( $to_add ) { $ctf_statuses_option = get_option( 'ctf_statuses', array() ); $request_counter = $this->request_counter + $to_add; $ctf_statuses_option['smash_twitter_cron']['request_counter'] = $request_counter; update_option( 'ctf_statuses', $ctf_statuses_option ); } private function is_past_first_allowed_update() { return true; $ctf_statuses_option = get_option( 'ctf_statuses', array() ); if ( empty( $ctf_statuses_option['first_cron_update'] ) ) { return true; } return time() > $ctf_statuses_option['first_cron_update']; } public function do_updates( $is_additional_batch = false ) { $can_auth = $this->maybe_setup_auth(); if ( ! $can_auth ) { return; } $batch_feeds = $this->get_next_batch_of_updatable_feeds( $is_additional_batch ); $num_found = count($batch_feeds); if (! $num_found) { return; } $return = array(); $requests_made = $this->request_counter; foreach ( $batch_feeds as $batch_feed ) { if ( $this->max_requests <= $requests_made ) { continue; } $updatable_feed_id = ! empty( $batch_feed['feed_id'] ) ? $batch_feed['feed_id'] : 'legacy'; $sources_to_update = 1; if ( ! empty( $batch_feed['settings'] ) ) { $settings = json_decode( $batch_feed['settings'], true ); $sources_to_update = $this->calc_sources_to_update( $settings ); } $this->add_to_request_counter( $sources_to_update ); $this->update_cache_last_updated( $updatable_feed_id ); $return = SB_Twitter_Cron_Updater::do_single_feed_cron_update( $updatable_feed_id ); } if ( ! empty( $return['data'] ) ) { foreach ( $return['data'] as $item ) { if ( ! empty( $item ) ) { foreach ( $item as $feed_type_and_terms ) { $this->update_api_call_log( $feed_type_and_terms[0], $feed_type_and_terms[1]); } } } } } public function calc_sources_to_update( $settings ) { $sources_to_update = 1; if ( ! empty( $settings['type'] ) ) { if ( $settings['type'] === 'usertimeline' ) { if ( ! empty( $settings['usertimeline_text'] ) ) { if ( is_array( $settings['usertimeline_text'] ) ) { $sources_to_update = count( $settings['usertimeline_text'] ); } elseif ( is_string( $settings['usertimeline_text'] ) ) { $sources_array = explode( ',', $settings['usertimeline_text'] ); $sources_to_update = count( $sources_array ); } } } elseif ( $settings['type'] === 'search' ) { if ( ! empty( $settings['search_text'] ) ) { if ( is_array( $settings['search_text'] ) ) { $sources_to_update = count( $settings['search_text'] ); } elseif ( is_string( $settings['search_text'] ) ) { $sources_array = explode( ',', $settings['search_text'] ); $sources_to_update = count( $sources_array ); } } } elseif ( $settings['type'] === 'hashtag' ) { if ( ! empty( $settings['hashtag_text'] ) ) { if ( is_array( $settings['hashtag_text'] ) ) { $sources_to_update = count( $settings['hashtag_text'] ); } elseif ( is_string( $settings['hashtag_text'] ) ) { $sources_array = explode( ',', $settings['hashtag_text'] ); $sources_to_update = count( $sources_array ); } } } } return $sources_to_update; } public function maybe_setup_auth() { $ctf_options = get_option( 'ctf_options', array() ); if ( empty( $ctf_options[ CTF_SITE_ACCESS_TOKEN_KEY ] ) ) { return false; } return true; } public function fetch_all_feeds() { $feeds = CTF_Feed_Builder::get_feed_list(); $builder = new CTF_Feed_Builder(); $legacy_feeds = $builder->get_legacy_feed_list(); return array_merge($feeds, $legacy_feeds); } public function get_next_batch_of_updatable_feeds( $is_additional_batch ) { return $this->get_updatable_feeds( $is_additional_batch ); } public function get_updatable_feeds( $is_additional_batch ) { global $wpdb; $feeds_table_name = $wpdb->prefix . 'ctf_feeds'; $cache_table_name = $wpdb->prefix . 'ctf_feed_caches'; $sql = $wpdb->prepare( " SELECT * FROM $cache_table_name as c LEFT JOIN $feeds_table_name as f ON c.feed_id = f.id WHERE c.cron_update = 'yes' GROUP BY c.feed_id ORDER BY c.feed_id ASC LIMIT %d; ", 1 ); return $wpdb->get_results( $sql, ARRAY_A ); } public function update_cache_last_updated( $feed_id ) { global $wpdb; $cache_table_name = $wpdb->prefix . 'ctf_feed_caches'; return $wpdb->query( $wpdb->prepare( " UPDATE $cache_table_name SET last_updated = %s WHERE feed_id = %s", date( 'Y-m-d H:i:s'), $feed_id ) ); } public static function schedule_cron_job() { if ( ! wp_next_scheduled( 'ctf_smash_twitter_feed_update' ) ) { wp_schedule_event( time(), 'hourly', 'ctf_smash_twitter_feed_update' ); } } /** * Maybe do updates if enough time has passed since the plugin was updated. * * @return boolean */ public function maybe_do_updates() { $this->maybe_reset_request_counter(); if ( $this->should_do_updates() ) { $this->update_last_update_process( time() ); $this->do_updates(); return true; } return false; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | ���֧ߧ֧�ѧ�ڧ� ����ѧߧڧ��: 0.1 |
proxy
|
phpinfo
|
���ѧ����ۧܧ�