FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
booking
/
includes
/
_capacity
Edit File: get_times_fields.php
<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly // FixIn: 9.8.0.4. /** * Get Time Slots from booking form for Each date: [ '2023-10-25' => [ '12:20 - 12:55', '13:00 - 14:00' ], '2023-10-26' => [ ... ], ... ] * * @param $resource_id // Resource ID (used in case of MultiUser version for getting specific form for regular users) * @param $custom_form_name // Form name for getting time slots configuration * @param $start_date_unix_timestamp // Unix Timestamp to start dates count * @param $days_count // Int number of how many dates to check * * @return array [ '2023-10-25' => [ '12:20 - 12:55', '13:00 - 14:00' ], '2023-10-26' => [ ... ], ... ] * * Example: * $timeslots_arr = wpbc_get_times_fields_configuration( * 1, * 'my_custom_form_name', * strtotime( gmdate( 'Y-m-d 00:00:00', strtotime( 'now' ) ) ), * 365 * ); */ function wpbc_get_times_fields_configuration__by_dates( $resource_id, $custom_form_name, $start_date_unix_timestamp, $days_count ){ // Get booking form configuration CONTENT $booking_form_fields = wpbc_get__booking_form_fields__configuration( $resource_id, $custom_form_name ); // ----------------------------------------------------------------------------------------------------------------- // Get conditional sections, if exist // ----------------------------------------------------------------------------------------------------------------- /** * result=[ weekday-condition=[ 0=[ * type = "weekday" * value = "*" * options = false * content = "\r\n Default: [selectbox rangetime "10:00 - 11:00" "11:00 - 12:00" "12:00 - 13:00" "13:00 - 14:00" "14:00 - 15:00" "15:00 - 16:00" "16:00 - 17:00" "17:00 - 18:00"]\r\n" * structure = "[condition name="weekday-condition" type="weekday" value="*"]\r\n Default: [selectbox rangetime "10:00 - 11:00" "11:00 - 12:00" "12:00 - 13:00" "13:00 - 14:00" "14:00 - 15:00" "15:00 - 16:00" "16:00 - 17:00" "17:00 - 18:00"]\r\n[/condition]" * 1 = [ * type = "weekday" * value = "1,2" * options = false * content = " \r\n Monday, Tuesday: [selectbox rangetime "10:00 - 12:00" "12:00 - 14:00"]\r\n" * structure = "[condition name="weekday-condition" type="weekday" value="1,2"] \r\n Monday, Tuesday: [selectbox rangetime "10:00 - 12:00" "12:00 - 14:00"]\r\n[/condition]" * 2 = [ ... ] */ $cached__sql_data__season_filters_arr = array(); if ( function_exists( 'wpbc_conditions_form__get_sections' ) ) { $conditions = wpbc_conditions_form__get_sections( $booking_form_fields ); if ( ! empty( $conditions ) ) { // ["High season", "Weekend season"] $season_names_arr = wpbc_conditions_get_season_titles_arr( $booking_form_fields ); // Load all seasons from DB to cache them - for having only one SQL request to DB, if needed $cached__sql_data__season_filters_arr = wpbc_db_get_season_data_arr__for_these_season_names( $season_names_arr ); } } else { $conditions = array(); } // ----------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- // Get Time Slots [ "10:30 - 10:45", "11:00 - 11:15", "11:30 - 12:00", ... ] if NO conditional sections - time slot the same for all dates. Get them once here. // ----------------------------------------------------------------------------------------------------------------- if ( empty( $conditions ) ) { $time_slots_arr = wpbc_get_timeslots__from_content( $booking_form_fields ); } else { $time_slots_arr = array(); } // ----------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- // Here Go for each DATE // ----------------------------------------------------------------------------------------------------------------- $dates_times_fields_arr = array(); for ( $day_num = 0; $day_num <= $days_count; $day_num ++ ) { $my_day_tag = gmdate( 'Y-m-d', $start_date_unix_timestamp ); // '2023-07-19' if ( ( ! empty( $conditions ) ) && ( function_exists( 'wpbc_conditions_form__get_section__depend_from_date' ) ) ){ // Get booking form conditional section depends on DATE $section_content = wpbc_conditions_form__get_section__depend_from_date( $conditions, $my_day_tag , $cached__sql_data__season_filters_arr ); // Get Time Slots [ "10:30 - 10:45", "11:00 - 11:15", "11:30 - 12:00", ... ] $time_slots_in_section_arr = wpbc_get_timeslots__from_content( $section_content ); $dates_times_fields_arr[ $my_day_tag ] = $time_slots_in_section_arr; } else { $dates_times_fields_arr[ $my_day_tag ] = $time_slots_arr; } // DEBUG: $dates_times_fields_arr[$my_day_tag] = array( '00:00 - 24:00', '10:00 - 12:00', '12:00 - 14:00', '14:00 - 16:00', '16:00 - 18:00', '18:00 - 20:00' , '09:01 - 09:02' ); $start_date_unix_timestamp += 24 * 60 * 60; // Go next day + 1 day } return $dates_times_fields_arr; } /** * Get Time-Slots (CONVERT READABLE to SECONDS) seconds range array for the specified date from array of dates, where each date include readable time-ranges array * * @param $dates_arr__with__readable_time_slots_arr = [ * 2023-10-25 = [], * 2023-10-26 = [ * 0 => '00:00 - 24:00', * 1 => '10:00 - 12:00', * 2 => '12:00 - 14:00', * 3 => '14:00 - 16:00', * 4 => '16:00 - 18:00', * 5 => '18:00 - 20:00', * 6 => '09:01 - 09:02', * ], * 2023-10-27 = [], ... * ] * @param $my_day_tag = '2023-10-25' * * @return array|string[] IF ( $my_day_tag == '2023-10-25' ) => [] * OR ( $my_day_tag == '2023-10-26' ) => [ * 0 => '1 - 86392', * 1 => '36011 - 43192', * 2 => '43211 - 50392', * 3 => '50411 - 57592', * 4 => '57611 - 64792', * 5 => '64811 - 71992', * 6 => '32471 - 32512', * ] */ function wpbc_get__time_range_in_seconds_arr__for_date( $dates_arr__with__readable_time_slots_arr, $my_day_tag ) { if ( isset( $dates_arr__with__readable_time_slots_arr[ $my_day_tag ] ) ) { $bookingform__available_timeslots_in_sec__arr = array_map( function ( $time_slot_readable ) { return wpbc_convert__readable_time_slot__to__time_range_in_seconds( $time_slot_readable ); } , $dates_arr__with__readable_time_slots_arr[ $my_day_tag ] ); return $bookingform__available_timeslots_in_sec__arr; } return array(); } // ===================================================================================================================== // Get Time-Slots from CONTENT (booking form configuration) // ===================================================================================================================== /** * Get Time-Slots ["10:30 - 10:45", "11:00 - 11:15", "11:30 - 12:00", ... ] time slot values from booking form content ( or part of booking form configuration) * * @param string $content '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"] ...' * * @return array */ function wpbc_get_timeslots__from_content( $content ){ $time_slots_arr =array(); // == RANGE TIME == [ '10:00 - 12:00', '12:00 - 14:00' ... ] ------------------------------------------------- if ( false !== strpos( $content, ' rangetime ' ) ) { $time_slots_arr = wpbc_get_timeslots__for_rangetime( $content ); } else { // == START TIME | END TIME == -------------------------------------------------------------------------------- if ( ( false !== strpos( $content, ' starttime ' ) ) // Important to have empty space at the beginning, because it will search for [selectbox starttime and skip this [starttime] && ( false !== strpos( $content, ' endtime ' ) ) // Important to have empty space at the beginning, because it will search for [selectbox endtime and skip this [endtime] ){ // Now we need to create the smallest time intervals ( 60 sec. ) for each start / end times. // == START TIME == [ '10:00 - 10:01', '12:00 - 12:01' ... ] $start_time_slots_arr = wpbc_get_timeslots__for_starttime( $content , 60 ); foreach ( $start_time_slots_arr as $ts ) { $time_slots_arr[] = $ts; } // == END TIME == [ '09:59 - 10:00', '11:59 - 12:00' ... ] $end_time_slots_arr = wpbc_get_timeslots__for_endtime( $content , 60 ); foreach ( $end_time_slots_arr as $ts ) { $time_slots_arr[] = $ts; } } // == START TIME | DURATION TIME == --------------------------------------------------------------------------- if ( ( false !== strpos( $content, ' starttime ' ) ) // Important to have empty space at the beginning, because it will search for [selectbox starttime and skip this [starttime] && ( false !== strpos( $content, ' durationtime ' ) ) ){ // 900 -> e.g.: '00:15' $min_time_duration = wpbc_get__min_time_duration__in_seconds( $content ); if ( false !== $min_time_duration ) { // == START TIME == [ '10:00 - 10:15', '12:00 - 12:15' ... ] $start_time_slots_arr = wpbc_get_timeslots__for_starttime( $content, $min_time_duration ); foreach ( $start_time_slots_arr as $ts ) { $time_slots_arr[] = $ts; } } } } return $time_slots_arr; } /** * Get Time-Slots == RANGE TIME == [ '10:00 - 12:00', '12:00 - 14:00' ... ] from provided booking form configuration content * * @param $bookingform_configuration_content - '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"] ...' * * @return array * * $time_slots_arr = [ * [0] => 00:00 - 24:00 * [1] => 10:00 - 12:00 * [2] => 12:00 - 14:00 * [3] => 14:00 - 16:00 * [4] => 16:00 - 18:00 * [5] => 18:00 - 20:00 * ] * OR * [] */ function wpbc_get_timeslots__for_rangetime( $bookingform_configuration_content ) { $time_slots_arr = array(); $shortcode_values = wpbc_parse_form__get_first_shortcode_values( 'rangetime', $bookingform_configuration_content ); if ( ! empty( $shortcode_values ) ) { foreach ( $shortcode_values as $timeslot_value ) { if ( ! empty( $timeslot_value['value'] ) ) { $time_slots_arr[] = $timeslot_value['value']; } } } return $time_slots_arr; } /** * Get Time-Slots from == START TIME == [ '10:00 - 10:01', '12:00 - 12:01' ... ] searching in provided booking form configuration content * * @param string $bookingform_configuration_content '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"] ...' * @param int $time_shift_duration_in_seconds 60 * * @return array * * $time_slots_arr = [ * [1] => 10:00 - 10:01 * [2] => 12:00 - 12:01 * [3] => 14:00 - 14:01 * [4] => 16:00 - 16:01 * [5] => 18:00 - 18:01 * ] * OR * [] */ function wpbc_get_timeslots__for_starttime( $bookingform_configuration_content , $time_shift_duration_in_seconds = 60 ) { $time_slots_arr = array(); $shortcode_values = wpbc_parse_form__get_first_shortcode_values( 'starttime', $bookingform_configuration_content ); if ( ! empty( $shortcode_values ) ) { foreach ( $shortcode_values as $timeslot_value ) { if ( ! empty( $timeslot_value['value'] ) ) { // '12:00:00' -> 43190 $time_in_seconds = wpbc_transform__24_hours_his__in__seconds( $timeslot_value['value'] . ':00' ); $time_in_seconds += $time_shift_duration_in_seconds; // 43250 -> '12:01:00' $time_his = wpbc_transform__seconds__in__24_hours_his( $time_in_seconds ); $time_his = substr( $time_his, 0, 5 ); // '12:00 - 12:01' $time_slots_arr[] = $timeslot_value['value'] . ' - ' . $time_his; } } } return $time_slots_arr; } /** * Get Time-Slots from == END TIME == [ '09:59 - 10:00', '11:59 - 12:00' ... ] searching in provided booking form configuration content * * @param string $bookingform_configuration_content '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"] ...' * @param int $time_shift_duration_in_seconds 60 * * @return array * * $time_slots_arr = [ * [1] => 09:59 - 10:00 * [2] => 11:59 - 12:00 * [3] => 13:59 - 14:00 * [4] => 15:59 - 16:00 * [5] => 17:59 - 18:00 * ] * OR * [] */ function wpbc_get_timeslots__for_endtime( $bookingform_configuration_content , $time_shift_duration_in_seconds = 60 ) { $time_slots_arr = array(); $shortcode_values = wpbc_parse_form__get_first_shortcode_values( 'endtime', $bookingform_configuration_content ); if ( ! empty( $shortcode_values ) ) { foreach ( $shortcode_values as $timeslot_value ) { if ( ! empty( $timeslot_value['value'] ) ) { // '12:00:00' -> 43190 $time_in_seconds = wpbc_transform__24_hours_his__in__seconds( $timeslot_value['value'] . ':00' ); $time_in_seconds -= $time_shift_duration_in_seconds; // 43130 -> '11:59:00' $time_his = wpbc_transform__seconds__in__24_hours_his( $time_in_seconds ); $time_his = substr( $time_his, 0, 5 ); // '11:59 - 12:00' $time_slots_arr[] = $time_his . ' - ' . $timeslot_value['value']; } } } return $time_slots_arr; } /** * Get minimum duration of time ( from [selectbox durationtime ... ] ) or FALSE, if no such shortcode or no values. * * @param $bookingform_configuration_content * * @return false|int */ function wpbc_get__min_time_duration__in_seconds( $bookingform_configuration_content ){ $min_time_duration = false; $time_duration_in_seconds_arr = array(); $shortcode_values = wpbc_parse_form__get_first_shortcode_values( 'durationtime', $bookingform_configuration_content ); if ( ! empty( $shortcode_values ) ) { foreach ( $shortcode_values as $timeslot_value ) { if ( ! empty( $timeslot_value['value'] ) ) { // '00:15' -> 900 $time_in_seconds = wpbc_transform__24_hours_his__in__seconds( $timeslot_value['value'] . ':00' ); // [ 900 , ... ] $time_duration_in_seconds_arr[] = $time_in_seconds; } } } if ( ! empty( $time_duration_in_seconds_arr ) ) { $min_time_duration = min( $time_duration_in_seconds_arr ); } return $min_time_duration; }
Save
Back