PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
← All changes | includes/_capacity/calendar_load.php +71 -28 11.4 → 11.9 View file →
@@ -44,13 +44,15 @@
44 44 }
45 45 $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . " , 'calendar_scroll_to' , " . $calendar_scroll_to . " ); ";
46 46
47 47 // Set Start / End Date in Calendar (JSON encode => safe quotes).
48 - $params['calendar_dates_start'] = ( empty( $params['calendar_dates_start'] ) ) ? '' : (string) $params['calendar_dates_start'];
49 - $params['calendar_dates_end'] = ( empty( $params['calendar_dates_end'] ) ) ? '' : (string) $params['calendar_dates_end'];
48 + $params['calendar_dates_start'] = ( empty( $params['calendar_dates_start'] ) ) ? '' : (string) $params['calendar_dates_start'];
49 + $params['calendar_dates_end'] = ( empty( $params['calendar_dates_end'] ) ) ? '' : (string) $params['calendar_dates_end'];
50 + $params['classic_booking_context_token'] = empty( $params['classic_booking_context_token'] ) ? '' : (string) $params['classic_booking_context_token'];
50 51
51 52 $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . " , 'calendar_dates_start' , " . wp_json_encode( $params['calendar_dates_start'] ) . " ); ";
52 - $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . " , 'calendar_dates_end' , " . wp_json_encode( $params['calendar_dates_end'] ) . " ); ";
53 + $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . " , 'calendar_dates_end' , " . wp_json_encode( $params['calendar_dates_end'] ) . " ); ";
54 + $start_script_code .= " _wpbc.booking__set_param_value( " . $resource_id . " , 'classic_booking_context_token' , " . wp_json_encode( $params['classic_booking_context_token'] ) . " ); ";
53 55
54 56 if ( ( '' !== $params['calendar_dates_start'] ) || ( '' !== $params['calendar_dates_end'] ) ) {
55 57 $start_script_code .= wpbc_get_localized_js__time_local( $params['calendar_dates_start'] );
56 58 }
@@ -66,9 +68,9 @@
66 68 $months_num = max( 1, min( 36, $months_num ) );
67 69 $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . " , 'calendar_number_of_months' , " . wp_json_encode( (string) $months_num ) . " ); ";
68 70
69 71 // Days Selection.
70 - $days_selection_arr = wpbc__calendar__js_params__get_days_selection_arr();
72 + $days_selection_arr = wpbc__calendar__js_params__get_days_selection_arr();
71 73
72 74 $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . ", 'days_select_mode', " . wp_json_encode( (string) $days_selection_arr['days_select_mode'] ) . " ); ";
73 75 $start_script_code .= " _wpbc.calendar__set_param_value( " . $resource_id . ", 'fixed__days_num', " . intval( $days_selection_arr['fixed__days_num'] ) . " ); ";
74 76
@@ -134,11 +136,11 @@
134 136
135 137 /**
136 138 * Get days selection parameters, which saved in database
137 139 *
138 - * @return array
139 - */
140 - function wpbc__calendar__js_params__get_days_selection_arr(){
140 + * @return array
141 + */
142 + function wpbc__calendar__js_params__get_days_selection_arr(){
141 143
142 144 $specific_days_selection = ( function_exists( 'wpbc_get_specific_range_dates__as_comma_list' ) )
143 145 ? wpbc_get_specific_range_dates__as_comma_list( get_bk_option( 'booking_range_selection_days_specific_num_dynamic' ) )
144 146 : '';
@@ -193,12 +195,13 @@
193 195 'start_month_calendar' => false,
194 196 'shortcode_options' => '',
195 197 'custom_form' => 'standard',
196 198 'calendar_dates_start' => '',
197 - 'calendar_dates_end' => '',
199 + 'calendar_dates_end' => '',
200 + 'classic_booking_context_token' => '',
198 201 'skip_general_availability' => 0,
199 - 'calendar_request_overrides' => array(),
200 - );
202 + 'calendar_request_overrides' => array(),
203 + );
201 204 $params = wp_parse_args( $params, $defaults );
202 205
203 206 // Resource ID.
204 207 $params['resource_id'] = absint( $params['resource_id'] );
@@ -253,16 +256,29 @@
253 256 'request_uri' => $server_request_uri,
254 257 'custom_form' => (string) $params['custom_form'],
255 258 'aggregate_resource_id_str' => implode( ',', (array) $params['aggregate_resource_id_arr'] ),
256 259 'aggregate_type' => (string) $aggregate_type,
257 - 'skip_general_availability' => (int) $params['skip_general_availability'],
260 + 'skip_general_availability' => (int) $params['skip_general_availability'],
261 + 'classic_booking_context_token' => (string) $params['classic_booking_context_token'],
258 262 );
259 263
260 - if ( ! empty( $params['calendar_request_overrides'] ) && is_array( $params['calendar_request_overrides'] ) ) {
261 - foreach ( $params['calendar_request_overrides'] as $override_key => $override_value ) {
262 - if ( 0 === strpos( (string) $override_key, 'wpbc_settings_calendar_preview' ) ) {
263 - $params_for_request[ $override_key ] = $override_value;
264 - }
264 + if ( ! empty( $params['calendar_request_overrides'] ) && is_array( $params['calendar_request_overrides'] ) ) {
265 + foreach ( $params['calendar_request_overrides'] as $override_key => $override_value ) {
266 + if ( 'allow_past' === $override_key ) {
267 + $params_for_request['allow_past'] = ! empty( $override_value ) ? 1 : 0;
268 + } elseif (
269 + 0 === strpos( (string) $override_key, 'wpbc_settings_calendar_preview' )
270 + || in_array(
271 + (string) $override_key,
272 + array(
273 + 'wpbc_setup_wizard_date_selection_preview',
274 + 'wpbc_setup_wizard_date_selection_preview_nonce',
275 + ),
276 + true
277 + )
278 + ) {
279 + $params_for_request[ $override_key ] = $override_value;
280 + }
265 281 }
266 282 }
267 283
268 284 // Send Ajax request to load bookings.
@@ -355,10 +371,12 @@
355 371 'user_id' => $user_id,
356 372 'request_rules_structure' => array(
357 373 'resource_id' => array( 'validate' => 'd', 'default' => 1 ), // 'digit_or_csd'
358 374 'booking_hash' => array( 'validate' => 's', 'default' => '' ),
359 - 'request_uri' => array( 'validate' => 's', 'default' => '' ),
360 - 'custom_form' => array( 'validate' => 's', 'default' => 'standard' ),
375 + 'request_uri' => array( 'validate' => 's', 'default' => '' ),
376 + 'custom_form' => array( 'validate' => 's', 'default' => 'standard' ),
377 + 'allow_past' => array( 'validate' => 'd', 'default' => 0 ),
378 + 'classic_booking_context_token' => array( 'validate' => 'strong', 'default' => '' ),
361 379 'aggregate_resource_id_str' => array( 'validate' => 'digit_or_csd', 'default' => '' ), // Comma separated string of resource ID, which was used in 'aggregate' parameter.
362 380 'aggregate_type' => array( 'validate' => 's', 'default' => 'all' ), // 'all' | 'bookings_only' // FixIn: 9.8.15.10.
363 381 'dates_to_check' => array( 'validate' => 'array', 'default' => '' ), // 'all' | 'bookings_only' // FixIn: 9.8.15.10.
364 382 'skip_general_availability' => array( 'validate' => 'd', 'default' => 0 ),
@@ -393,14 +411,38 @@
393 411 'wpbc_settings_calendar_preview_cost_word' => array( 'validate' => 's', 'default' => '' ),
394 412 'wpbc_settings_calendar_preview_show_cost_cell' => array( 'validate' => array( 'On', 'Off' ), 'default' => 'Off' ),
395 413 'wpbc_settings_calendar_preview_cost_currency' => array( 'validate' => 's', 'default' => '' ),
396 414 'wpbc_settings_calendar_preview_show_booked_details' => array( 'validate' => array( 'On', 'Off' ), 'default' => 'Off' ),
397 - 'wpbc_settings_calendar_preview_booked_details' => array( 'validate' => 's', 'default' => '' ),
398 - )
415 + 'wpbc_settings_calendar_preview_booked_details' => array( 'validate' => 's', 'default' => '' ),
416 + 'wpbc_setup_wizard_date_selection_preview' => array( 'validate' => 'd', 'default' => 0 ),
417 + 'wpbc_setup_wizard_date_selection_preview_nonce' => array( 'validate' => 'strong', 'default' => '' ),
418 + )
399 419 )
400 420 );
401 - $request_prefix = 'calendar_request_params';
402 - $request_params = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // NOT Direct: $_REQUEST['search_params']['resource_id']
421 + $request_prefix = 'calendar_request_params';
422 + $request_params = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // NOT Direct: $_REQUEST['search_params']['resource_id']
423 + if ( ! empty( $request_params['classic_booking_context_token'] ) && function_exists( 'wpbc_classic_booking_context_validate_submission' ) ) {
424 + $classic_context = wpbc_classic_booking_context_validate_submission(
425 + $request_params['classic_booking_context_token'],
426 + $request_params['resource_id'],
427 + $request_params['dates_to_check'],
428 + $request_params['custom_form'],
429 + $request_params['aggregate_resource_id_str']
430 + );
431 + if ( ! is_wp_error( $classic_context ) ) {
432 + $request_params['allow_past'] = ! empty( $classic_context['allow_past'] ) ? 1 : 0;
433 + // Use the signed canonical set so equivalent wire shapes cannot change availability input.
434 + $request_params['aggregate_resource_id_str'] = implode( ',', $classic_context['aggregate_resource_ids'] );
435 + $request_params['dates_to_check'] = array(
436 + $classic_context['calendar_dates_start'],
437 + $classic_context['calendar_dates_end'],
438 + );
439 + } else {
440 + $request_params['allow_past'] = 0;
441 + }
442 + }
443 + $can_allow_past = ! empty( $request_params['allow_past'] );
444 + $request_params['allow_past'] = $can_allow_past ? 1 : 0;
403 445
404 446 if ( ! empty( $request_params['skip_general_availability'] ) ) {
405 447 $can_skip_general_availability = (
406 448 function_exists( 'wpbc_availability_general__get_manage_cap' )
@@ -429,14 +471,15 @@
429 471 unset( $aggregate_resource_id_arr[ $resource_id_key ] ); // Remove source booking resource from aggregate ARR. // FixIn: 9.8.15.10.
430 472 }
431 473 $aggregate_resource_id_arr = array_values($aggregate_resource_id_arr); // Reset keys
432 474
433 - $availability_per_days__params = array(
434 - 'resource_id' => $request_params['resource_id'],
435 - 'max_days_count' => $max_days_count,
436 - 'skip_booking_id' => $skip_booking_id,
437 - 'request_uri' => $request_params['request_uri'], // It different in Ajax requests than $server_request_uri . It's used for change-over days to detect for exception at specific pages
438 - 'custom_form' => $request_params['custom_form']
475 + $availability_per_days__params = array(
476 + 'resource_id' => $request_params['resource_id'],
477 + 'max_days_count' => $max_days_count,
478 + 'skip_booking_id' => $skip_booking_id,
479 + 'request_uri' => $request_params['request_uri'], // It different in Ajax requests than $server_request_uri . It's used for change-over days to detect for exception at specific pages
480 + 'custom_form' => $request_params['custom_form'],
481 + 'allow_past' => ! empty( $request_params['allow_past'] )
439 482 , 'additional_bk_types' => $aggregate_resource_id_arr // It is array of booking resources from aggregate parameter() // arrays | CSD | int // OPTIONAL
440 483 , 'aggregate_type' => $request_params['aggregate_type'] // It is string: 'all' | 'bookings_only' // OPTIONAL
441 484 , 'skip_general_availability' => $request_params['skip_general_availability']
442 485 // , 'as_single_resource' => true // get dates as for 'single resource' or 'parent' resource including bookings in all 'child booking resources'