| @@ -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 | } |
| @@ -193,9 +195,10 @@ | ||
| 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 | 202 | 'calendar_request_overrides' => array(), |
| 200 | 203 | ); |
| 201 | 204 | $params = wp_parse_args( $params, $defaults ); |
| @@ -253,18 +256,15 @@ | ||
| 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 | 264 | if ( ! empty( $params['calendar_request_overrides'] ) && is_array( $params['calendar_request_overrides'] ) ) { |
| 261 | 265 | foreach ( $params['calendar_request_overrides'] as $override_key => $override_value ) { |
| 262 | - if ( | |
| 263 | - 'allow_past' === $override_key | |
| 264 | - && function_exists( 'wpbc_is_11_5_features_enabled' ) | |
| 265 | - && wpbc_is_11_5_features_enabled() | |
| 266 | - ) { | |
| 266 | + if ( 'allow_past' === $override_key ) { | |
| 267 | 267 | $params_for_request['allow_past'] = ! empty( $override_value ) ? 1 : 0; |
| 268 | 268 | } elseif ( 0 === strpos( (string) $override_key, 'wpbc_settings_calendar_preview' ) ) { |
| 269 | 269 | $params_for_request[ $override_key ] = $override_value; |
| 270 | 270 | } |
| @@ -364,8 +364,9 @@ | ||
| 364 | 364 | 'booking_hash' => array( 'validate' => 's', 'default' => '' ), |
| 365 | 365 | 'request_uri' => array( 'validate' => 's', 'default' => '' ), |
| 366 | 366 | 'custom_form' => array( 'validate' => 's', 'default' => 'standard' ), |
| 367 | 367 | 'allow_past' => array( 'validate' => 'd', 'default' => 0 ), |
| 368 | + 'classic_booking_context_token' => array( 'validate' => 'strong', 'default' => '' ), | |
| 368 | 369 | 'aggregate_resource_id_str' => array( 'validate' => 'digit_or_csd', 'default' => '' ), // Comma separated string of resource ID, which was used in 'aggregate' parameter. |
| 369 | 370 | 'aggregate_type' => array( 'validate' => 's', 'default' => 'all' ), // 'all' | 'bookings_only' // FixIn: 9.8.15.10. |
| 370 | 371 | 'dates_to_check' => array( 'validate' => 'array', 'default' => '' ), // 'all' | 'bookings_only' // FixIn: 9.8.15.10. |
| 371 | 372 | 'skip_general_availability' => array( 'validate' => 'd', 'default' => 0 ), |
| @@ -406,13 +407,29 @@ | ||
| 406 | 407 | ) |
| 407 | 408 | ); |
| 408 | 409 | $request_prefix = 'calendar_request_params'; |
| 409 | 410 | $request_params = $user_request->get_sanitized__in_request__value_or_default( $request_prefix ); // NOT Direct: $_REQUEST['search_params']['resource_id'] |
| 410 | - $can_allow_past = ( | |
| 411 | - ! empty( $request_params['allow_past'] ) | |
| 412 | - && function_exists( 'wpbc_is_11_5_features_enabled' ) | |
| 413 | - && wpbc_is_11_5_features_enabled() | |
| 414 | - ); | |
| 411 | + if ( ! empty( $request_params['classic_booking_context_token'] ) && function_exists( 'wpbc_classic_booking_context_validate_submission' ) ) { | |
| 412 | + $classic_context = wpbc_classic_booking_context_validate_submission( | |
| 413 | + $request_params['classic_booking_context_token'], | |
| 414 | + $request_params['resource_id'], | |
| 415 | + $request_params['dates_to_check'], | |
| 416 | + $request_params['custom_form'], | |
| 417 | + $request_params['aggregate_resource_id_str'] | |
| 418 | + ); | |
| 419 | + if ( ! is_wp_error( $classic_context ) ) { | |
| 420 | + $request_params['allow_past'] = ! empty( $classic_context['allow_past'] ) ? 1 : 0; | |
| 421 | + // Use the signed canonical set so equivalent wire shapes cannot change availability input. | |
| 422 | + $request_params['aggregate_resource_id_str'] = implode( ',', $classic_context['aggregate_resource_ids'] ); | |
| 423 | + $request_params['dates_to_check'] = array( | |
| 424 | + $classic_context['calendar_dates_start'], | |
| 425 | + $classic_context['calendar_dates_end'], | |
| 426 | + ); | |
| 427 | + } else { | |
| 428 | + $request_params['allow_past'] = 0; | |
| 429 | + } | |
| 430 | + } | |
| 431 | + $can_allow_past = ! empty( $request_params['allow_past'] ); | |
| 415 | 432 | $request_params['allow_past'] = $can_allow_past ? 1 : 0; |
| 416 | 433 | |
| 417 | 434 | if ( ! empty( $request_params['skip_general_availability'] ) ) { |
| 418 | 435 | $can_skip_general_availability = ( |