WPBC_JS_IN_FOOTER ) ); wp_localize_script( 'wpbc-availability-general-page', 'wpbc_availability_general_page', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'wpbc_availability_general_ajax_nonce' ), 'action' => 'WPBC_AJX_AVAILABILITY_GENERAL_SAVE', 'preview_action' => 'WPBC_AJX_AVAILABILITY_GENERAL_PREVIEW', 'settings' => wpbc_availability_general__get_settings_response(), 'default_settings' => wpbc_availability_general__get_default_settings(), 'open_section' => wpbc_availability_general__get_open_section(), 'is_buffer_available' => class_exists( 'wpdev_bk_biz_m' ), 'is_available_limit_available' => class_exists( 'wpdev_bk_biz_m' ), 'i18n' => array( 'saving' => __( 'Saving', 'booking' ), 'saved' => __( 'General availability settings updated.', 'booking' ), 'reset_applied' => __( 'Default availability settings are ready for preview. Click Save Changes to apply them.', 'booking' ), 'save_failed' => __( 'Unable to save general availability settings.', 'booking' ), 'reset_confirm' => __( 'Reset controls to default values? Saved settings will not change until you click Save Changes.', 'booking' ), 'preview_failed' => __( 'Unable to refresh calendar preview.', 'booking' ), 'security_error' => __( 'Security check failed.', 'booking' ), 'loading' => __( 'Loading', 'booking' ), 'buffer_preview' => __( 'Buffer preview', 'booking' ), 'before_booking' => __( 'Before booking', 'booking' ), 'after_booking' => __( 'After booking', 'booking' ), 'no_buffer' => __( 'No booking buffer is selected.', 'booking' ), ), ) ); } add_action( 'wpbc_enqueue_js_files', 'wpbc_availability_general_enqueue_js_files', 66 ); /** * Print tooltip initializer for General Availability. * * @return void */ function wpbc_availability_general_print_tooltip_js() { if ( ! wpbc_availability_general__is_page() ) { return; } if ( function_exists( 'wpbc_bs_javascript_tooltips' ) ) { wpbc_bs_javascript_tooltips(); } } add_action( 'admin_footer', 'wpbc_availability_general_print_tooltip_js', 67 ); /** * Get resource options. * * @return array */ function wpbc_availability_general__get_resources() { $resources = array(); if ( function_exists( 'wpbc_ajx_get_sorted_booking_resources_arr' ) && function_exists( 'wpbc_ajx_get_all_booking_resources_arr' ) ) { $resource_rows = wpbc_ajx_get_sorted_booking_resources_arr( wpbc_ajx_get_all_booking_resources_arr() ); foreach ( $resource_rows as $resource ) { $resources[] = array( 'id' => isset( $resource['booking_type_id'] ) ? (int) $resource['booking_type_id'] : 1, 'title' => isset( $resource['title'] ) ? $resource['title'] : __( 'Booking resource', 'booking' ), ); } } if ( empty( $resources ) ) { $resources[] = array( 'id' => function_exists( 'wpbc_get_default_resource' ) ? (int) wpbc_get_default_resource() : 1, 'title' => __( 'Booking resource', 'booking' ), ); } return $resources; } /** * Get capability required to manage General Availability. * * @return string */ function wpbc_availability_general__get_manage_cap() { $min_user_role = get_bk_option( 'booking_user_role_settings' ); $capability = array( 'administrator' => 'activate_plugins', 'editor' => 'publish_pages', 'author' => 'publish_posts', 'contributor' => 'edit_posts', 'subscriber' => 'read', ); return isset( $capability[ $min_user_role ] ) ? $capability[ $min_user_role ] : 'manage_options'; } /** * Get selected resource ID for preview. * * @return int */ function wpbc_availability_general__get_preview_resource_id() { $resources = wpbc_availability_general__get_resources(); $default_resource = isset( $resources[0]['id'] ) ? (int) $resources[0]['id'] : 1; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $resource_id = isset( $_REQUEST['resource_id'] ) ? absint( wp_unslash( $_REQUEST['resource_id'] ) ) : $default_resource; $resource_ids = wp_list_pluck( $resources, 'id' ); return in_array( $resource_id, $resource_ids, true ) ? $resource_id : $default_resource; } /** * Get selected month count for preview. * * @return int */ function wpbc_availability_general__get_preview_months_count() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $months = isset( $_REQUEST['months_count'] ) ? absint( wp_unslash( $_REQUEST['months_count'] ) ) : 6; return in_array( $months, array( 1, 2, 3, 4, 6, 12 ), true ) ? $months : 6; } /** * Get the General Availability section that should be opened on page load. * * @return string */ function wpbc_availability_general__get_open_section() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $open_section = isset( $_REQUEST['wpbc_ag_open'] ) ? sanitize_key( wp_unslash( $_REQUEST['wpbc_ag_open'] ) ) : ''; return in_array( $open_section, array( 'weekdays', 'from_today', 'buffer', 'working_time' ), true ) ? $open_section : ''; } /** * Validate preview resource ID. * * @param int $resource_id Resource ID. * * @return int */ function wpbc_availability_general__sanitize_preview_resource_id( $resource_id ) { $resources = wpbc_availability_general__get_resources(); $default_resource = isset( $resources[0]['id'] ) ? (int) $resources[0]['id'] : 1; $resource_ids = wp_list_pluck( $resources, 'id' ); return in_array( (int) $resource_id, $resource_ids, true ) ? (int) $resource_id : $default_resource; } /** * Validate preview months count. * * @param int $months_count Number of months. * * @return int */ function wpbc_availability_general__sanitize_preview_months_count( $months_count ) { $months_count = absint( $months_count ); return in_array( $months_count, array( 1, 2, 3, 4, 6, 12 ), true ) ? $months_count : 6; } /** * Get unavailable-from-today select options. * * @return array */ function wpbc_availability_general__get_unavailable_from_today_options() { $options = array( '0' => ' - ' ); foreach ( range( 5, 55, 5 ) as $extra_num ) { $options[ $extra_num . 'm' ] = $extra_num . ' ' . __( 'minutes', 'booking' ); } $options['60m'] = '1 ' . __( 'hour', 'booking' ); foreach ( range( 65, 115, 5 ) as $extra_num ) { $options[ $extra_num . 'm' ] = '1 ' . __( 'hour', 'booking' ) . ' ' . ( $extra_num - 60 ) . ' ' . __( 'minutes', 'booking' ); } foreach ( range( 120, 1380, 60 ) as $extra_num ) { $options[ $extra_num . 'm' ] = ( $extra_num / 60 ) . ' ' . __( 'hours', 'booking' ); } $options['1'] = '1 ' . __( 'day', 'booking' ); for ( $ii = 2; $ii < 92; $ii++ ) { $options[ (string) $ii ] = $ii . ' ' . __( 'days', 'booking' ); } return $options; } /** * Get available-from-today select options. * * @return array */ function wpbc_availability_general__get_available_from_today_options() { $options = array( '' => ' - ' ); foreach ( range( 1, 365 ) as $value ) { $options[ (string) $value ] = (string) $value; } return $options; } /** * Get minute buffer options. * * @return array */ function wpbc_availability_general__get_buffer_minutes_options() { $options = array( '' => ' - ' ); foreach ( range( 5, 55, 5 ) as $extra_num ) { $options[ $extra_num . 'm' ] = $extra_num . ' ' . __( 'minutes', 'booking' ); } $options['60m'] = '1 ' . __( 'hour', 'booking' ); foreach ( range( 65, 115, 5 ) as $extra_num ) { $options[ $extra_num . 'm' ] = '1 ' . __( 'hour', 'booking' ) . ' ' . ( $extra_num - 60 ) . ' ' . __( 'minutes', 'booking' ); } foreach ( range( 120, 1380, 60 ) as $extra_num ) { $options[ $extra_num . 'm' ] = ( $extra_num / 60 ) . ' ' . __( 'hours', 'booking' ); } return $options; } /** * Get day buffer options. * * @return array */ function wpbc_availability_general__get_buffer_days_options() { $options = array( '' => ' - ' ); foreach ( range( 1, 30 ) as $extra_num ) { $options[ $extra_num . 'd' ] = $extra_num . ' ' . __( 'day(s)', 'booking' ); } return $options; } /** * Get time options for future working-time controls. * * @param string $selected Selected value. * * @return array */ function wpbc_availability_general__get_working_time_options( $selected = '' ) { $options = array(); for ( $minutes = 0; $minutes <= 1440; $minutes += 30 ) { $hours = (int) floor( $minutes / 60 ); $mins = $minutes % 60; $value = sprintf( '%02d:%02d', $hours, $mins ); $label = ( 1440 === $minutes ) ? '24:00' : $value; $options[ $value ] = $label; } if ( '' !== $selected && ! isset( $options[ $selected ] ) ) { $options[ $selected ] = $selected; } return $options; } /** * Render a select field. * * @param string $name Field name. * @param array $options Options. * @param string $selected Selected value. * @param array $args Extra args. * * @return void */ function wpbc_availability_general__render_select( $name, $options, $selected, $args = array() ) { $args = wp_parse_args( $args, array( 'id' => $name, 'class' => 'wpbc_ag_field_control', 'disabled' => false, ) ); ?> _x( 'Sun', 'Short weekday name', 'booking' ), 1 => _x( 'Mon', 'Short weekday name', 'booking' ), 2 => _x( 'Tue', 'Short weekday name', 'booking' ), 3 => _x( 'Wed', 'Short weekday name', 'booking' ), 4 => _x( 'Thu', 'Short weekday name', 'booking' ), 5 => _x( 'Fri', 'Short weekday name', 'booking' ), 6 => _x( 'Sat', 'Short weekday name', 'booking' ), ); $start_week_day = absint( get_bk_option( 'booking_start_day_weeek' ) ); if ( $start_week_day > 6 ) { $start_week_day = 0; } $days_ordered = array_slice( $days, $start_week_day, null, true ) + array_slice( $days, 0, $start_week_day, true ); $time_options = wpbc_availability_general__get_working_time_options(); ?>
$day_title ) : ?> 9 * HOUR_IN_SECONDS, 'end_second' => 18 * HOUR_IN_SECONDS ); $is_open = ! empty( $weekdays[ $day_num ] ); ?>
$prefix . '_start_' . $day_num, 'class' => 'wpbc_ag_field_control wpbc_ag_working_time_start', ) ); wpbc_availability_general__render_select( $prefix . '_end[' . $day_num . ']', $time_options, wpbc_working_time__seconds_to_time( $interval['end_second'] ), array( 'id' => $prefix . '_end_' . $day_num, 'class' => 'wpbc_ag_field_control wpbc_ag_working_time_end', ) ); ?>
array(), 'booking_unavailable_days_num_from_today' => '0', 'booking_available_days_num_from_today' => '', 'booking_unavailable_extra_in_out' => '', 'booking_unavailable_extra_minutes_in' => '', 'booking_unavailable_extra_minutes_out' => '', 'booking_unavailable_extra_days_in' => '', 'booking_unavailable_extra_days_out' => '', 'working_time' => wpbc_working_time__get_default_settings(), ); } /** * Validate posted one-interval-per-weekday Working Time schedule. * * @param array $post_data Raw post data. * @param string $prefix Field prefix. * * @return array */ function wpbc_availability_general__validate_working_time_weekdays( $post_data, $prefix ) { $weekdays = array(); $enabled_days = array(); $start_values = isset( $post_data[ $prefix . '_start' ] ) && is_array( $post_data[ $prefix . '_start' ] ) ? wp_unslash( $post_data[ $prefix . '_start' ] ) : array(); $end_values = isset( $post_data[ $prefix . '_end' ] ) && is_array( $post_data[ $prefix . '_end' ] ) ? wp_unslash( $post_data[ $prefix . '_end' ] ) : array(); if ( isset( $post_data[ $prefix . '_days' ] ) && is_array( $post_data[ $prefix . '_days' ] ) ) { foreach ( $post_data[ $prefix . '_days' ] as $day_num ) { $day_num = absint( $day_num ); if ( $day_num >= 0 && $day_num <= 6 ) { $enabled_days[] = $day_num; } } } for ( $day = 0; $day <= 6; $day++ ) { $weekdays[ $day ] = array(); if ( ! in_array( $day, $enabled_days, true ) ) { continue; } $start = isset( $start_values[ $day ] ) ? wpbc_working_time__time_to_seconds( sanitize_text_field( $start_values[ $day ] ) ) : 0; $end = isset( $end_values[ $day ] ) ? wpbc_working_time__time_to_seconds( sanitize_text_field( $end_values[ $day ] ) ) : 0; if ( $start < $end ) { $weekdays[ $day ][] = array( 'start_second' => $start, 'end_second' => $end, ); } } return $weekdays; } /** * Validate posted Working Time settings. * * @param array $post_data Raw post data. * * @return array */ function wpbc_availability_general__validate_working_time_data( $post_data ) { $current_settings = wpbc_working_time__get_settings(); $resource_id = isset( $post_data['booking_working_time_resource_id'] ) ? absint( wp_unslash( $post_data['booking_working_time_resource_id'] ) ) : 0; $resource_mode = isset( $post_data['booking_working_time_resource_mode'] ) ? sanitize_key( wp_unslash( $post_data['booking_working_time_resource_mode'] ) ) : 'inherit'; if ( ! in_array( $resource_mode, array( 'inherit', 'custom', 'disabled' ), true ) ) { $resource_mode = 'inherit'; } $current_settings['enabled'] = ( isset( $post_data['booking_working_time_enabled'] ) && 'On' === sanitize_text_field( wp_unslash( $post_data['booking_working_time_enabled'] ) ) ) ? 'On' : 'Off'; $current_settings['default'] = array( 'weekdays' => wpbc_availability_general__validate_working_time_weekdays( $post_data, 'booking_working_time_default' ), ); if ( $resource_id > 0 ) { $current_settings['resources'][ $resource_id ] = array( 'mode' => $resource_mode, 'weekdays' => wpbc_availability_general__validate_working_time_weekdays( $post_data, 'booking_working_time_resource' ), ); } return wpbc_working_time__normalize_settings( $current_settings ); } /** * Validate posted settings. * * @param array $post_data Raw post data. * * @return array */ function wpbc_availability_general__validate_data( $post_data ) { $cleaned = wpbc_availability_general__get_default_settings(); if ( isset( $post_data['booking_unavailable_days'] ) && is_array( $post_data['booking_unavailable_days'] ) ) { foreach ( $post_data['booking_unavailable_days'] as $day_num ) { $day_num = absint( $day_num ); if ( $day_num >= 0 && $day_num <= 6 ) { $cleaned['weekdays'][] = $day_num; } } } if ( isset( $post_data['booking_unavailable_days_num_from_today'] ) ) { $value = sanitize_text_field( wp_unslash( $post_data['booking_unavailable_days_num_from_today'] ) ); if ( preg_match( '/^\d+m$/', $value ) || preg_match( '/^\d+$/', $value ) ) { $cleaned['booking_unavailable_days_num_from_today'] = $value; } } if ( isset( $post_data['booking_available_days_num_from_today'] ) ) { $value = sanitize_text_field( wp_unslash( $post_data['booking_available_days_num_from_today'] ) ); $cleaned['booking_available_days_num_from_today'] = ( '' === $value ) ? '' : (string) absint( $value ); } if ( isset( $post_data['booking_unavailable_extra_in_out'] ) ) { $value = sanitize_text_field( wp_unslash( $post_data['booking_unavailable_extra_in_out'] ) ); $cleaned['booking_unavailable_extra_in_out'] = in_array( $value, array( '', 'm', 'd' ), true ) ? $value : ''; } foreach ( array( 'booking_unavailable_extra_minutes_in', 'booking_unavailable_extra_minutes_out' ) as $key ) { if ( isset( $post_data[ $key ] ) ) { $value = sanitize_text_field( wp_unslash( $post_data[ $key ] ) ); $cleaned[ $key ] = preg_match( '/^\d+m$/', $value ) ? $value : ''; } } foreach ( array( 'booking_unavailable_extra_days_in', 'booking_unavailable_extra_days_out' ) as $key ) { if ( isset( $post_data[ $key ] ) ) { $value = sanitize_text_field( wp_unslash( $post_data[ $key ] ) ); $cleaned[ $key ] = preg_match( '/^\d+d$/', $value ) ? $value : ''; } } $cleaned['working_time'] = wpbc_availability_general__validate_working_time_data( $post_data ); return $cleaned; } /** * Update settings. * * @param array $cleaned_data Cleaned settings. * * @return void */ function wpbc_availability_general__update_settings( $cleaned_data ) { for ( $i = 0; $i < 7; $i++ ) { update_bk_option( 'booking_unavailable_day' . $i, in_array( $i, $cleaned_data['weekdays'], true ) ? 'On' : 'Off' ); } update_bk_option( 'booking_unavailable_days_num_from_today', $cleaned_data['booking_unavailable_days_num_from_today'] ); if ( class_exists( 'wpdev_bk_biz_m' ) ) { update_bk_option( 'booking_available_days_num_from_today', $cleaned_data['booking_available_days_num_from_today'] ); update_bk_option( 'booking_unavailable_extra_in_out', $cleaned_data['booking_unavailable_extra_in_out'] ); update_bk_option( 'booking_unavailable_extra_minutes_in', $cleaned_data['booking_unavailable_extra_minutes_in'] ); update_bk_option( 'booking_unavailable_extra_minutes_out', $cleaned_data['booking_unavailable_extra_minutes_out'] ); update_bk_option( 'booking_unavailable_extra_days_in', $cleaned_data['booking_unavailable_extra_days_in'] ); update_bk_option( 'booking_unavailable_extra_days_out', $cleaned_data['booking_unavailable_extra_days_out'] ); } wpbc_working_time__update_settings( $cleaned_data['working_time'] ); } /** * Get current settings prepared for JavaScript and AJAX responses. * * @return array */ function wpbc_availability_general__get_settings_response() { $hints = function_exists( 'wpbc_get_unavailable_from_today_hints_arr' ) ? wpbc_get_unavailable_from_today_hints_arr() : array(); $weekdays = array(); for ( $i = 0; $i < 7; $i++ ) { if ( 'On' === get_bk_option( 'booking_unavailable_day' . $i ) ) { $weekdays[] = $i; } } return array( 'weekdays' => $weekdays, 'booking_unavailable_days_num_from_today' => get_bk_option( 'booking_unavailable_days_num_from_today' ), 'booking_available_days_num_from_today' => get_bk_option( 'booking_available_days_num_from_today' ), 'booking_unavailable_extra_in_out' => get_bk_option( 'booking_unavailable_extra_in_out' ), 'booking_unavailable_extra_minutes_in' => get_bk_option( 'booking_unavailable_extra_minutes_in' ), 'booking_unavailable_extra_minutes_out' => get_bk_option( 'booking_unavailable_extra_minutes_out' ), 'booking_unavailable_extra_days_in' => get_bk_option( 'booking_unavailable_extra_days_in' ), 'booking_unavailable_extra_days_out' => get_bk_option( 'booking_unavailable_extra_days_out' ), 'working_time' => wpbc_working_time__get_settings(), 'hints' => array( 'booking_unavailable_days_num_from_today__hint' => isset( $hints['booking_unavailable_days_num_from_today__hint'] ) ? $hints['booking_unavailable_days_num_from_today__hint'] : '', 'booking_available_days_num_from_today__hint' => isset( $hints['booking_available_days_num_from_today__hint'] ) ? $hints['booking_available_days_num_from_today__hint'] : '', ), ); } /** * Render booking resource calendar preview. * * @param int $resource_id Resource ID. * @param int $months_count Number of months. * * @return void */ function wpbc_availability_general__render_calendar_preview( $resource_id, $months_count ) { $resource_id = wpbc_availability_general__sanitize_preview_resource_id( $resource_id ); $months_count = wpbc_availability_general__sanitize_preview_months_count( $months_count ); $months_in_row = min( 3, max( 1, $months_count ) ); $calendar_css_class_outer = 'wpbc_calendar_wraper'; if ( 'Off' !== get_bk_option( 'booking_change_over_days_triangles' ) ) { $calendar_css_class_outer .= ' wpbc_change_over_triangle'; } ?>
$resource_id, 'aggregate_resource_id_arr' => array(), 'selected_dates_without_calendar' => '', 'calendar_number_of_months' => $months_count, 'start_month_calendar' => false, 'shortcode_options' => '', 'custom_form' => 'standard', 'skip_general_availability' => 1, ) ); echo $start_script_code; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } ?>
$name, 'disabled' => false, ) ); ?>
$args['id'], 'disabled' => $args['disabled'], ) ); ?>
false, 'slider_label' => __( 'Adjust value', 'booking' ), ) ); $option_values = array_keys( $options ); $selected_index = 0; foreach ( $option_values as $option_index => $option_value ) { if ( (string) $selected === (string) $option_value ) { $selected_index = (int) $option_index; break; } } wpbc_availability_general__render_select( $name, $options, $selected, $args ); ?>
/>
     
false, 'right_vertical_sidebar__is_show' => true, 'right_vertical_sidebar__default_view_mode' => '', 'right_vertical_sidebar_compact__is_show' => true, 'left_navigation__default_view_mode' => 'compact', 'title' => __( 'General Availability', 'booking' ) . '' . esc_html__( 'New', 'booking' ) . '', 'hint' => __( 'Define global front-end availability rules for all calendars, including unavailable weekdays, booking buffers, and availability limits.', 'booking' ), 'page_title' => __( 'General Availability', 'booking' ), 'link' => '', 'position' => '', 'css_classes' => 'wpbc_top_tab__general_availability', 'icon' => '', 'font_icon' => 'wpbc-bi-calendar2-day', 'font_icon_right' => '', 'default' => false, 'disabled' => false, 'hided' => false, 'subtabs' => array(), 'folder_style' => 'order:93;', ); return $tabs; } /** * Save settings. * * @return void */ public function maybe_update() { $form_name = 'wpbc_availability_general_form'; // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( ! isset( $_POST[ 'is_form_submitted_' . $form_name ] ) ) { return; } check_admin_referer( 'wpbc_settings_page_' . $form_name ); if ( ! wpbc_is_mu_user_can_be_here( 'only_super_admin' ) || ! current_user_can( wpbc_availability_general__get_manage_cap() ) ) { return; } $cleaned_data = wpbc_availability_general__validate_data( $_POST ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized wpbc_availability_general__update_settings( $cleaned_data ); $this->is_updated = true; } /** * Right compact sidebar tabs. * * @return void */ public function right_sidebar_compact_content() { WPBC_UI_Sidebar_Panels::render_rightbar_tabs( array( array( 'id' => 'wpbc_tab_ag_settings', 'panel_id' => 'wpbc_ag__inspector_settings', 'title' => __( 'Settings', 'booking' ), 'icon' => 'wpbc_icn_tune', 'selected' => true, ), array( 'id' => 'wpbc_tab_ag_notes', 'panel_id' => 'wpbc_ag__inspector_notes', 'title' => __( 'Notes', 'booking' ), 'icon' => 'wpbc-bi-info-circle', ), ), array( 'aria_label' => __( 'General Availability Panels', 'booking' ), 'context' => 'general_availability', 'class' => 'wpbc_ag_rightbar_tabs', ) ); } /** * Right sidebar panels. * * @return void */ public function right_sidebar_content() { ?>
'wpbc_ag__inspector_settings', 'labelledby' => 'wpbc_tab_ag_settings', 'class' => 'wpbc_ag__inspector_settings', ), array( $this, 'right_panel_settings_content' ) ); WPBC_UI_Sidebar_Panels::render_panel( array( 'id' => 'wpbc_ag__inspector_notes', 'labelledby' => 'wpbc_tab_ag_notes', 'class' => 'wpbc_ag__inspector_notes', 'hidden' => true, ), array( $this, 'right_panel_notes_content' ) ); ?>
'inherit', 'weekdays' => $working_time_default_settings['default']['weekdays'], ); for ( $i = 0; $i < 7; $i++ ) { if ( 'On' === get_bk_option( 'booking_unavailable_day' . $i ) ) { $unavailable_weekdays[] = $i; } } WPBC_UI_Sidebar_Panels::render_inspector_header( __( 'General Availability', 'booking' ), __( 'Global front-end availability rules for all calendars.', 'booking' ) ); ?>
'wpbc_ag_weekdays_group', 'group' => 'general-availability-weekdays', 'title' => __( 'Unavailable Weekdays', 'booking' ), 'open' => ( 'working_time' !== $open_section ), ), function () use ( $unavailable_weekdays ) { $days = array( 0 => __( 'Sunday', 'booking' ), 1 => __( 'Monday', 'booking' ), 2 => __( 'Tuesday', 'booking' ), 3 => __( 'Wednesday', 'booking' ), 4 => __( 'Thursday', 'booking' ), 5 => __( 'Friday', 'booking' ), 6 => __( 'Saturday', 'booking' ), ); $start_week_day = absint( get_bk_option( 'booking_start_day_weeek' ) ); if ( $start_week_day > 6 ) { $start_week_day = 0; } $days_ordered = array_slice( $days, $start_week_day, null, true ) + array_slice( $days, 0, $start_week_day, true ); ?>
$day_title ) : ?>

'wpbc_ag_today_group', 'group' => 'general-availability-from-today', 'title' => __( 'Availability From Today', 'booking' ), 'open' => false, ), function () use ( $hints, $is_available_limit_available ) { ?>
__( 'Adjust unavailable time from current time', 'booking' ) ) ); ?>
__( 'Adjust available days limit', 'booking' ), 'disabled' => ! $is_available_limit_available, ) ); ?>
'wpbc_ag_buffer_group', 'group' => 'general-availability-buffer', 'title' => __( 'Booking Buffer', 'booking' ), 'open' => false, ), function () use ( $buffer_type, $is_buffer_available ) { ?>
! $is_buffer_available ) ); ?>
! $is_buffer_available ) ); ?>
! $is_buffer_available ) ); ?>
! $is_buffer_available ) ); ?>
'wpbc_ag_working_time_group', 'group' => 'general-availability-working-time', 'title' => __( 'Working Time', 'booking' ), 'open' => ( 'working_time' === $open_section ), ), function () use ( $working_time_settings, $working_time_resource_id, $working_time_resource ) { ?>

!