page_title = __( 'Settings', 'feeds-for-youtube' ); $this->menu_title = __( 'Settings', 'feeds-for-youtube' ); $this->menu_slug = 'settings'; $this->menu_position = 1; $this->menu_position_free_version = 1; $this->settings = $settings; $this->feed_saver = $feed_saver; } public function register() { parent::register(); add_action( 'wp_ajax_sby_update_settings', [ $this, 'handle_settings_update' ] ); add_filter( 'sby_localized_settings', [ $this, 'filter_settings_object' ] ); } public function handle_settings_update() { check_ajax_referer( 'sby-admin', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error(); } $sanitization_skip = [ 'custom_js' ]; unset( $_POST['nonce'] ); if ( ! current_user_can( 'unfiltered_html' ) ) { unset($_POST['custom_css']); unset($_POST['custom_js']); } $update_array = $_POST; $this->handle_single_video_settings( $update_array ); foreach ( $_POST as $item => $value ) { if ( ! in_array( $item, $sanitization_skip ) ) { $update_array[ $item ] = sanitize_text_field( $value ); } } wp_clear_scheduled_hook('sby_feed_update'); if ( $this->settings->update_settings( $update_array ) ) { wp_send_json_success(); } else { wp_send_json_error(); } } private function handle_single_video_settings( &$settings ) { $prefix = "single_video_info_"; $includes = []; $post_status = "draft"; foreach ( $settings as $key => $setting ) { if ( false !== strpos( $key, $prefix ) ) { $setting_name = str_replace( $prefix, "", $key ); if ( ( $setting_name !== 'post_status' ) ) { if ( $setting === "true" ) { $includes[] = $setting_name; } } else { $post_status = $setting; } unset( $settings[ $key ] ); } } update_option( SBY_CPT . '_settings', [ "include" => $includes, "post_status" => $post_status ] ); } private function get_next_cron_schedule() { $timestamp = wp_next_scheduled('sby_feed_update'); $date = new \DateTime(); $date->setTimestamp($timestamp); $date->setTimezone(wp_timezone()); $date_string = $date->format('h:i'); $settings = $this->settings->get_settings(); $interval = !empty($settings['cache_cron_interval']) ? $settings['cache_cron_interval'] : '1hour'; $am_pm = !empty($settings['cache_cron_am_pm']) ? $settings['cache_cron_am_pm'] : 'AM'; switch($interval) { case '30mins': $interval_string = __('every 30 minutes', 'feeds-for-youtube'); break; case '12hours': $interval_string = 'every 12 hours'; break; case '24hours': $interval_string = 'every 24 hours'; break; default: $interval_string = __('every hour', 'feeds-for-youtube'); } return sprintf(__('Next check: %s %s (%s) - Note: Clicking "Clear All Caches" will reset this schedule.', 'feeds-for-youtube'), $date_string, strtoupper($am_pm), $interval_string); } public function filter_settings_object( $settings ) { $settings['settings'] = $this->settings->get_settings(); $settings['sources'] = $this->feed_saver->get_source_list(); $settings['sbyIsPro'] = \sby_is_pro() ? true : false; $settings['user_can_unfiltered_html'] = \current_user_can( 'unfiltered_html' ) ? true : false; $settings['feeds'] = Container::getInstance()->get(Feed_Builder::class)->get_feed_list(); $settings['next_cron'] = $this->get_next_cron_schedule(); $settings['connect_site_parameters'] = sby_builder_pro()->oauth_connet_parameters(); return $settings; } }