| @@ -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,20 +256,27 @@ | ||
| 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 | + 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 | + ) | |
| 266 | 278 | ) { |
| 267 | - $params_for_request['allow_past'] = ! empty( $override_value ) ? 1 : 0; | |
| 268 | - } elseif ( 0 === strpos( (string) $override_key, 'wpbc_settings_calendar_preview' ) ) { | |
| 269 | 279 | $params_for_request[ $override_key ] = $override_value; |
| 270 | 280 | } |
| 271 | 281 | } |
| 272 | 282 | } |
| @@ -364,8 +374,9 @@ | ||
| 364 | 374 | 'booking_hash' => array( 'validate' => 's', 'default' => '' ), |
| 365 | 375 | 'request_uri' => array( 'validate' => 's', 'default' => '' ), |
| 366 | 376 | 'custom_form' => array( 'validate' => 's', 'default' => 'standard' ), |
| 367 | 377 | 'allow_past' => array( 'validate' => 'd', 'default' => 0 ), |
| 378 | + 'classic_booking_context_token' => array( 'validate' => 'strong', 'default' => '' ), | |
| 368 | 379 | 'aggregate_resource_id_str' => array( 'validate' => 'digit_or_csd', 'default' => '' ), // Comma separated string of resource ID, which was used in 'aggregate' parameter. |
| 369 | 380 | 'aggregate_type' => array( 'validate' => 's', 'default' => 'all' ), // 'all' | 'bookings_only' // FixIn: 9.8.15.10. |
| 370 | 381 | 'dates_to_check' => array( 'validate' => 'array', 'default' => '' ), // 'all' | 'bookings_only' // FixIn: 9.8.15.10. |
| 371 | 382 | 'skip_general_availability' => array( 'validate' => 'd', 'default' => 0 ), |
| @@ -400,19 +411,37 @@ | ||
| 400 | 411 | 'wpbc_settings_calendar_preview_cost_word' => array( 'validate' => 's', 'default' => '' ), |
| 401 | 412 | 'wpbc_settings_calendar_preview_show_cost_cell' => array( 'validate' => array( 'On', 'Off' ), 'default' => 'Off' ), |
| 402 | 413 | 'wpbc_settings_calendar_preview_cost_currency' => array( 'validate' => 's', 'default' => '' ), |
| 403 | 414 | 'wpbc_settings_calendar_preview_show_booked_details' => array( 'validate' => array( 'On', 'Off' ), 'default' => 'Off' ), |
| 404 | - 'wpbc_settings_calendar_preview_booked_details' => array( 'validate' => 's', 'default' => '' ), | |
| 405 | - ) | |
| 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 | + ) | |
| 406 | 419 | ) |
| 407 | 420 | ); |
| 408 | 421 | $request_prefix = 'calendar_request_params'; |
| 409 | 422 | $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 | - ); | |
| 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'] ); | |
| 415 | 444 | $request_params['allow_past'] = $can_allow_past ? 1 : 0; |
| 416 | 445 | |
| 417 | 446 | if ( ! empty( $request_params['skip_general_availability'] ) ) { |
| 418 | 447 | $can_skip_general_availability = ( |