| @@ -1,4 +1,4 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly // FixIn: 9.8.0.4. |
| 4 | 4 | |
| @@ -99,16 +99,42 @@ | ||
| 99 | 99 | 'aggregate_type' => empty( $local_params['aggregate_type'] ) ? 'bookings_only' : $local_params['aggregate_type'], //TODO: this parameter does not transfer during saving, so here will be always default value 'bookings_only' // FixIn: 10.0.0.7. |
| 100 | 100 | 'custom_form' => $local_params['custom_form'], // FixIn: 10.0.0.10. |
| 101 | 101 | ) , $availability_per_days_arr__params ) ); |
| 102 | 102 | |
| 103 | + // A contact form has no calendar and uses one synthetic date only to satisfy the booking storage schema. | |
| 104 | + // Keep its requested resource, because calendar availability rules do not apply to a no-date submission. | |
| 105 | + $is_no_dates_booking = ( is_array( $local_params['dates_only_sql_arr'] ) && ( 1 === count( $local_params['dates_only_sql_arr'] ) ) && | |
| 106 | + wpbc_is_these_dates__for__no_dates( $local_params['dates_only_sql_arr'] ) ); | |
| 107 | + if ( $is_no_dates_booking ) { | |
| 108 | + $requested_resource_id = absint( $local_params['resource_id'] ); | |
| 109 | + $loaded_resource_ids = isset( $availability_per_days['resources_id_arr__in_dates'] ) ? array_map( 'absint', (array) $availability_per_days['resources_id_arr__in_dates'] ) : array(); | |
| 110 | + | |
| 111 | + if ( ( 0 === $requested_resource_id ) || ! in_array( $requested_resource_id, $loaded_resource_ids, true ) ) { | |
| 112 | + return array( | |
| 113 | + 'result' => 'error', | |
| 114 | + 'message' => 'Wrong ID of booking resource: ' . $requested_resource_id, | |
| 115 | + ); | |
| 116 | + } | |
| 117 | + | |
| 118 | + $storage_resource_ids = array_values( | |
| 119 | + array_unique( array_merge( array( $requested_resource_id ), $loaded_resource_ids ) ) | |
| 120 | + ); | |
| 121 | + $resources_in_dates = array_fill_keys( | |
| 122 | + array_values( $local_params['dates_only_sql_arr'] ), | |
| 123 | + $storage_resource_ids | |
| 124 | + ); | |
| 125 | + | |
| 126 | + return array( | |
| 127 | + 'result' => 'ok', | |
| 128 | + 'resources_in_dates' => $resources_in_dates, | |
| 129 | + 'time_to_book' => $local_params['time_as_his_arr'], | |
| 130 | + 'main__resource_id' => $requested_resource_id, | |
| 131 | + ); | |
| 132 | + } | |
| 133 | + | |
| 103 | 134 | // Get value of how many booking resources to book |
| 104 | 135 | $how_many_items_to_book = $local_params['how_many_items_to_book']; |
| 105 | 136 | |
| 106 | - // FixIn: 2981-01-13 13 Jan 2981. | |
| 107 | - if ( ( ! empty( $local_params['dates_only_sql_arr'] ) ) && ( wpbc_is_these_dates__for__no_dates( $local_params['dates_only_sql_arr'] ) ) ) { | |
| 108 | - $how_many_items_to_book = 0; | |
| 109 | - } | |
| 110 | - | |
| 111 | 137 | // ------------------------------------------------------------------------------------------------------------- |
| 112 | 138 | // [ 2023-10-18: [ 0:[ resource_id: 2, is_available: true, booked__seconds: [], booked__readable: [], time_to_book__seconds: [ 36030, 39570 ], time_to_book__readable: "10:00:00", "11:00:00" ] ], 1: [...], 2: [...], 3: [...] ], 2023-10-25: [...], 2023-11-25: [...] ] |
| 113 | 139 | $available_slots = wpbc__get_available_slots__for_selected_dates_times__bl( array( |
| 114 | 140 | 'dates_sql__arr' => $local_params['dates_only_sql_arr'], |
| @@ -159,13 +185,13 @@ | ||
| 159 | 185 | } else { |
| 160 | 186 | // Bad not save |
| 161 | 187 | return array( |
| 162 | 188 | 'result' => 'error', |
| 163 | - 'message' => wpbc_frontend_messages__get( 'message_dates_times_unavailable', array(), $local_params['resource_id'] ) | |
| 164 | - . ' <br> ' | |
| 165 | - . wpbc_frontend_messages__get( 'message_cannot_save_in_one_resource', array(), $local_params['resource_id'] ) | |
| 166 | - . ' <br> ' | |
| 167 | - . wpbc_frontend_messages__get( 'message_choose_alternative_dates', array(), $local_params['resource_id'] ) | |
| 189 | + 'message' => wpbc_frontend_messages__get( 'message_dates_times_unavailable', array(), $local_params['resource_id'] ) | |
| 190 | + . ' <br> ' | |
| 191 | + . wpbc_frontend_messages__get( 'message_cannot_save_in_one_resource', array(), $local_params['resource_id'] ) | |
| 192 | + . ' <br> ' | |
| 193 | + . wpbc_frontend_messages__get( 'message_choose_alternative_dates', array(), $local_params['resource_id'] ) | |
| 168 | 194 | . ' <a href="javascript:void(0)" onclick="' |
| 169 | 195 | .'jQuery( this ).next().toggle();' |
| 170 | 196 | .'jQuery( this).hide();' |
| 171 | 197 | .'jQuery( this ).parents(\'.wpbc_alert_message\').parent().on(\'hide\',function(even){jQuery(this).show();});' |
| @@ -208,11 +234,11 @@ | ||
| 208 | 234 | // Bad not save |
| 209 | 235 | // We can not store booking in this date day_sql_key2, number of available child booking resources less than required |
| 210 | 236 | return array( |
| 211 | 237 | 'result' => 'error', |
| 212 | - 'message' => wpbc_frontend_messages__get( 'message_dates_times_unavailable', array(), $local_params['resource_id'] ) | |
| 213 | - . ' <br> ' | |
| 214 | - . wpbc_frontend_messages__get( 'message_choose_alternative_dates', array(), $local_params['resource_id'] ) | |
| 238 | + 'message' => wpbc_frontend_messages__get( 'message_dates_times_unavailable', array(), $local_params['resource_id'] ) | |
| 239 | + . ' <br> ' | |
| 240 | + . wpbc_frontend_messages__get( 'message_choose_alternative_dates', array(), $local_params['resource_id'] ) | |
| 215 | 241 | . ' <a href="javascript:void(0)" onclick="' |
| 216 | 242 | .'jQuery( this ).next().toggle();' |
| 217 | 243 | .'jQuery( this).hide();' |
| 218 | 244 | .'jQuery( this ).parents(\'.wpbc_alert_message\').parent().on(\'hide\',function(even){jQuery(this).show();});' |