plugin = $plugin; $this->hooks(); } /** * Initiate our hooks. * * @since 0.0.3 */ public function hooks() { // Maybe mark wizard steps as completed add_action( 'ssa/appointment_type/after_insert', array( $this, 'maybe_mark_wizard_step_as_completed' ), 1000, 3 ); } /** * Mark wizard steps as completed * * @param integer $appointment_type_id */ public function maybe_mark_wizard_step_as_completed( $appointment_type_id, $data_after, $data_before = null ) { $settings = $this->plugin->settings->get(); if( empty( $settings['global']['wizard_completed'] ) ){ $settings['global']['wizard_completed'] = ssa_datetime()->format( 'Y-m-d H:i:s' ); $this->update( $settings['global'] ); } } protected $slug = 'global'; public function get_schema() { if ( !empty( $this->schema ) ) { return $this->schema; } $this->schema = array( 'version' => '2024-02-09', 'fields' => array( 'enabled' => array( 'name' => 'enabled', 'default_value' => true, ), 'wizard_completed' => array( 'name' => 'wizard_completed', 'default_value' => '', 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'timezone_string' => array( 'name' => 'timezone_string', 'default_value' => ( get_option( 'timezone_string', 'UTC' ) ) ? get_option( 'timezone_string', 'UTC' ) : 'UTC', 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), 'before_save_function' => array( $this, 'maybe_map_timezone' ), ), 'country_code' => array( 'name' => 'country_code', 'default_value' => '', 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'start_of_week' => array( 'name' => 'start_of_week', 'default_value' => get_option( 'start_of_week', 1 ), 'validate_callback' => array( 'SSA_Validation', 'validate_weekday' ), ), 'date_format' => array( 'name' => 'date_format', 'default_value' => get_option( 'date_format' ), 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'time_format' => array( 'name' => 'time_format', 'default_value' => get_option( 'time_format' ), 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'admin_email' => array( 'name' => 'admin_email', 'default_value' => get_option( 'admin_email' ), 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), 'required_capability' => 'ssa_manage_site_settings', ), 'admin_phone' => array( 'name' => 'admin_phone', 'default_value' => get_option( 'admin_phone' ), 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), 'required_capability' => 'ssa_manage_site_settings', ), 'staff_name' => array( 'name' => 'staff_name', 'default_value' => wp_get_current_user()->display_name, 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'company_name' => array( 'name' => 'company_name', 'default_value' => get_bloginfo( 'name' ), 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'last_updated' => array( 'name' => 'last_updated', 'default_value' => null, 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'booking_post_id' => array( 'name' => 'booking_post_id', 'default_value' => '', 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'edit_appointment_page_id' => array( 'name' => 'edit_appointment_page_id', 'default_value' => 0, 'validate_callback' => array( 'SSA_Validation', 'validate_string' ), ), 'should_display_new_booking_app_banner' => array( 'name' => 'should_display_new_booking_app_banner', 'default_value' => '', ), ), ); return $this->schema; } public function get_computed_schema() { if ( !empty( $this->computed_schema ) ) { return $this->computed_schema; } $this->computed_schema = array( 'version' => '2023-02-20', 'fields' => array( 'date_format_moment' => array( 'name' => 'date_format_moment', 'get_function' => array( 'SSA_Utils', 'php_to_moment_format' ), 'get_input_path' => 'date_format', // Deprecated, expecting php values only // 'set_function' => array( 'SSA_Utils', 'moment_to_php_format' ), // 'set_result_path' => 'date_format', ), 'time_format_moment' => array( 'name' => 'time_format_moment', 'get_function' => array( 'SSA_Utils', 'php_to_moment_format' ), 'get_input_path' => 'time_format', // Deprecated, expecting php values only // 'set_function' => array( 'SSA_Utils', 'moment_to_php_format' ), // 'set_result_path' => 'time_format', ), 'public_read_access_token' => array( 'name' => 'public_read_access_token', 'get_function' => array( 'SSA_Utils', 'site_unique_hash' ), 'get_input' => 'public_read_access_token', 'required_capability' => 'ssa_manage_others_appointments', ), // 'booking_post_permalink' => array( // 'name' => 'booking_post_permalink', // 'get_function' => 'get_permalink', // 'get_input_path' => 'booking_post_id', // ), 'locale' => array( 'name' => 'locale', 'get_function' => array( 'SSA_Translation', 'get_locale' ), 'get_input' => true, ), ), ); return $this->computed_schema; } public function get_timezone_string() { $settings = $this->plugin->settings->get(); $timezone_string = $settings['global']['timezone_string']; return $timezone_string; } public function get_datetimezone() { $timezone_string = $this->get_timezone_string(); $datetimezone = SSA_Utils::safe_timezone( $timezone_string ); return $datetimezone; } public static function get_date_format_moment( $args ) { $args = shortcode_atts( array( 'time_format' => '', ), $args ); return SSA_Utils::moment_format( $args['time_format'] ); } public static function set_date_format_moment( $args ) { $args = shortcode_atts( array( 'time_format' => '', ), $args ); SSA_Utils::moment_to_php_format( $args['time_format'] ); } public function maybe_map_timezone( $timezone_string ) { try { // check if this will throw an exception new DateTimeZone( $timezone_string ); } catch (\Throwable $th) { if(!empty(self::$timezones_map[$timezone_string])){ return self::$timezones_map[$timezone_string]; } } return $timezone_string; } public static $timezones_map = array( 'Europe/Kyiv' => 'Europe/Kiev', ); }