__( 'Invalid calendar skin.', 'booking' ) ) ); } $file_path = ''; if ( 0 === strpos( $skin_value, '/wpbc_skins/' ) ) { $file_path = ( ! empty( $upload_dir['basedir'] ) ) ? $upload_dir['basedir'] . $skin_value : ''; } elseif ( defined( 'WPBC_PLUGIN_DIR' ) ) { $file_path = WPBC_PLUGIN_DIR . $skin_value; } if ( empty( $file_path ) || ! file_exists( $file_path ) ) { wp_send_json_error( array( 'message' => __( 'Calendar skin file does not exist.', 'booking' ) ) ); } return $skin_value; } /** * Get allowed global calendar legend option names. * * @return array */ public static function get_calendar_legend_option_names() { return array( 'booking_is_show_legend', 'booking_legend_is_show_item_available', 'booking_legend_text_for_item_available', 'booking_legend_is_show_item_pending', 'booking_legend_text_for_item_pending', 'booking_legend_is_show_item_approved', 'booking_legend_text_for_item_approved', 'booking_legend_is_show_item_partially', 'booking_legend_text_for_item_partially', 'booking_legend_is_show_item_unavailable', 'booking_legend_text_for_item_unavailable', 'booking_legend_is_show_numbers', 'booking_legend_is_vertical', ); } /** * Normalize a global calendar legend option before saving. * * @param string $option_key Option name. * @param mixed $value Option value. * @param string $data_name Submitted data name. * * @return string */ public static function normalize_calendar_legend_option( $option_key, $value, $data_name = '' ) { $on_off_options = array( 'booking_is_show_legend', 'booking_legend_is_show_item_available', 'booking_legend_is_show_item_pending', 'booking_legend_is_show_item_approved', 'booking_legend_is_show_item_partially', 'booking_legend_is_show_item_unavailable', 'booking_legend_is_show_numbers', 'booking_legend_is_vertical', ); if ( in_array( $option_key, $on_off_options, true ) ) { return WPBC_Option_Save_Policy_Global_Options::normalize_on_off( $value ); } return sanitize_text_field( (string) $value ); } } /** * Time-slot global option policies. */ class WPBC_Option_Save_Policy_Global_Time { /** * Normalize the global timeslot picker toggle. * * @param mixed $data_raw Raw value. * @param string $data_name Option name. * * @return string */ public static function normalize_timeslot_picker( $data_raw, $data_name = '' ) { return WPBC_Option_Save_Policy_Global_Options::normalize_on_off( $data_raw ); } } /** * Register built-in policies. * * @return void */ function wpbc_register_builtin_option_save_policies() { if ( ! class_exists( 'wpbc_option_saver_loader' ) ) { return; } wpbc_option_saver_loader::register_option_policy( 'booking_skin', array( 'can_save' => array( 'WPBC_Option_Save_Policy_Global_Options', 'can_save_global_options' ), 'permission_message' => __( 'You do not have permission to save global calendar options.', 'booking' ), 'normalize_raw' => array( 'WPBC_Option_Save_Policy_Global_Calendar', 'normalize_calendar_skin' ), ) ); wpbc_option_saver_loader::register_option_policy( 'wpbc_calendar_legend_options', array( 'can_save' => array( 'WPBC_Option_Save_Policy_Global_Options', 'can_save_global_options' ), 'permission_message' => __( 'You do not have permission to save global calendar options.', 'booking' ), 'force_mode' => 'split', 'allowed_keys' => array( 'WPBC_Option_Save_Policy_Global_Calendar', 'get_calendar_legend_option_names' ), 'normalize_item' => array( 'WPBC_Option_Save_Policy_Global_Calendar', 'normalize_calendar_legend_option' ), ) ); wpbc_option_saver_loader::register_option_policy( 'booking_timeslot_picker', array( 'can_save' => array( 'WPBC_Option_Save_Policy_Global_Options', 'can_save_global_options' ), 'permission_message' => __( 'You do not have permission to save global time-slot options.', 'booking' ), 'normalize_raw' => array( 'WPBC_Option_Save_Policy_Global_Time', 'normalize_timeslot_picker' ), ) ); } add_action( 'init', 'wpbc_register_builtin_option_save_policies', 5 );