Files
szkoleniauryzaj.pl/wp-content/plugins/youtube-feed-pro/inc/Services/Admin/Settings/SettingsPage.php
2026-04-26 23:47:49 +02:00

145 lines
4.1 KiB
PHP

<?php
namespace SmashBalloon\YouTubeFeed\Services\Admin\Settings;
use Smashballoon\Customizer\Container;
use Smashballoon\Customizer\Feed_Builder;
use Smashballoon\Customizer\Feed_Saver;
use SmashBalloon\YouTubeFeed\Helpers\Util;
use SmashBalloon\YouTubeFeed\Pro\SBY_CPT;
use SmashBalloon\YouTubeFeed\SBY_Settings;
class SettingsPage extends BaseSettingPage {
protected $has_assets = true;
protected $has_menu = true;
protected $template_file = 'settings.index';
/**
* @var SBY_Settings
*/
private $settings;
/**
* @var Feed_Saver
*/
private $feed_saver;
public function __construct( Feed_Saver $feed_saver, SBY_Settings $settings) {
$this->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(__('<strong>Next check: %s %s (%s)</strong> - 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;
}
}