PluginProbe
Booking Manager – Sync WP Booking Calendar – Import Events, Export Bookings to ICS Calendar / 2.1.21
Booking Manager – Sync WP Booking Calendar – Import Events, Export Bookings to ICS Calendar v2.1.21
2.1.22 2.1.21 2.1.20 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 trunk 1.1 2.0 2.0.1 2.0.10.2 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.17 2.0.18 2.0.2 2.0.20 2.0.21 All 56 releases
← All changes | core/wpbc/wpbm-bc-import.php +846 -251 2.0.14 → 2.1.21 View file →
@@ -1,4 +1,4 @@
1 1 <?php
2 2 /**
3 3 * @version 1.0
4 4 * @description Booking Calendar integration - Import bookings from ICS events
@@ -21,39 +21,85 @@
21 21 function wpbm_delete_all_imported_bookings( $params ){ //FixIn: 2.0.10.3
22 22
23 23 $booking_ics_force_trash_before_import = get_bk_option( 'booking_ics_force_trash_before_import' ); //FixIn: 2.0.10.1 <- available in Booking Calendar since update 2.0.10
24 24
25 - if ( 'On' !== $booking_ics_force_trash_before_import ) {
25 + if ( 'Off' == $booking_ics_force_trash_before_import ) {
26 26 return false;
27 27 }
28 28
29 -
30 29 global $wpdb;
31 30
32 31 $resource_id = $params['resource_id'];
32 + $is_trash = 1;
33 33
34 - $is_trash = 1;
34 + //FixIn: 2.0.24.1 //FixIn: 9.1.2.6
35 + if (
36 + ( 'On' == $booking_ics_force_trash_before_import )
37 + || ( 'trash' == $booking_ics_force_trash_before_import )
38 + ) {
39 + // Trash bookings
40 + $my_sql = "UPDATE {$wpdb->prefix}booking AS bk SET bk.trash = {$is_trash} WHERE sync_gid != '' AND trash != 1 AND booking_type = {$resource_id}";
35 41
36 - $my_sql = "UPDATE {$wpdb->prefix}booking AS bk SET bk.trash = {$is_trash} WHERE sync_gid != '' AND trash != 1 AND booking_type = {$resource_id}";
42 + if ( false === $wpdb->query( $my_sql ) ) {
43 + ?> <script type="text/javascript"> var my_message = '<?php echo html_entity_decode( esc_js( get_debuge_error( 'Error during trash booking in DB', __FILE__, __LINE__ ) ), ENT_QUOTES ); ?>'; wpbc_admin_show_message( my_message, 'error', 30000 ); </script> <?php
44 + return false;
45 + }
37 46
38 - if ( false === $wpdb->query( $my_sql ) ){
39 - ?> <script type="text/javascript">
40 - var my_message = '<?php echo html_entity_decode( esc_js( get_debuge_error('Error during trash booking in DB' ,__FILE__,__LINE__) ),ENT_QUOTES) ; ?>';
41 - wpbc_admin_show_message( my_message, 'error', 30000 );
42 - </script> <?php
47 + } else { // Permanently delete bookings
43 48
44 - return false;
49 + $bookings_obj_arr = $wpdb->get_results( "SELECT booking_id as ID FROM {$wpdb->prefix}booking WHERE sync_gid != '' AND trash != 1 AND booking_type = {$resource_id} LIMIT 0, 1000" );
50 +
51 + $id_arr = array();
52 + foreach ( $bookings_obj_arr as $booking_obj ) {
53 + $id_arr[] = $booking_obj->ID;
54 + }
55 + $string_id = implode( ',', $id_arr );
56 +
57 + if ( $string_id != '' ) {
58 +
59 + // D E L E T E Dates
60 + if ( false === $wpdb->query( "DELETE FROM {$wpdb->prefix}bookingdates WHERE booking_id IN ({$string_id})" ) ) { ?> <script type="text/javascript"> document.getElementById('ajax_working').innerHTML = '<div style=&quot;height:20px;width:100%;text-align:center;margin:15px auto;&quot;><?php debuge_error('Error during updating exist booking for deleting dates in BD' ,__FILE__,__LINE__); ?></div>'; </script> <?php die(); }
61 + // D E L E T E Bookings
62 + if ( false === $wpdb->query( "DELETE FROM {$wpdb->prefix}booking WHERE booking_id IN ({$string_id})" ) ){ ?> <script type="text/javascript"> document.getElementById('ajax_working').innerHTML = '<div style=&quot;height:20px;width:100%;text-align:center;margin:15px auto;&quot;><?php debuge_error('Error during deleting booking at DB',__FILE__,__LINE__ ); ?></div>'; </script> <?php die(); }
63 + }
64 +
45 65 }
46 66
47 67 return true;
48 68 }
49 69
70 +
71 +/**
72 + * Append one extra day after the currently last imported booking date.
73 + *
74 + * This is an opt-in extension for sites that want to block one additional day
75 + * after the imported iCalendar checkout boundary.
76 + *
77 + * @param array $booking_dates Dates in MySQL format.
78 + *
79 + * @return array
80 + */
81 +function wpbm_ics_import_append_extra_checkout_day( $booking_dates ) {
82 +
83 + if ( empty( $booking_dates ) || ! is_array( $booking_dates ) ) {
84 + return $booking_dates;
85 + }
86 +
87 + $last_date = $booking_dates[ count( $booking_dates ) - 1 ];
88 + $last_date = strtotime( $last_date );
89 + $last_date = strtotime( '+1 day', $last_date );
90 +
91 + $booking_dates[] = date_i18n( 'Y-m-d H:i:s', $last_date );
92 +
93 + return $booking_dates;
94 +}
95 +
50 96 ////////////////////////////////////////////////////////////////////////////////////////////
51 97 // I M P O R T
52 98 ////////////////////////////////////////////////////////////////////////////////////////////
53 99
54 -/** Import ICS feed and create bookings .in Booking Calendar
55 - *
100 +/** Import ICS feed and create bookings .in Booking Calendar
101 + *
56 102 * @param array $attr = array(
57 103 'url' => ''
58 104 , 'resource_id' => 1
59 105 , 'import_conditions' => '' | 'if_dates_free' // maybe rename ??? if_dates_booked_then_not_import
@@ -61,9 +107,15 @@
61 107 * @return int|bool number of imported bookings or FALSE if error
62 108 */
63 109 function wpbm_ics_import_start( $attr ) {
64 110
65 - // <editor-fold defaultstate="collapsed" desc=" Parse / validate parameters " >
111 + if ( ! wpbm_is_wpbc_supported() ) {
112 +// echo 'Booking Manager require Booking Calendar 9.8 or newer';
113 + return wpbm_ics_import_start_legacy( $attr );
114 +
115 + }
116 +
117 + // <editor-fold defaultstate="collapsed" desc=" Parse / validate parameters " >
66 118 /////////////////////////////////////////////////////////////////////
67 119 // Parse / validate parameters
68 120 /////////////////////////////////////////////////////////////////////
69 121 $defaults = array(
@@ -68,9 +120,10 @@
68 120 /////////////////////////////////////////////////////////////////////
69 121 $defaults = array(
70 122 'url' => ''
71 123 , 'resource_id' => 1
72 - , 'import_conditions' => ''
124 + , 'delete' => 0
125 + , 'import_conditions' => ''
73 126 , 'from' => 'any' // 'today' // '00:00 today'
74 127 , 'from_offset' => ''
75 128 , 'until' => 'any' // 'year-end'
76 129 , 'until_offset' => ''
@@ -82,82 +135,553 @@
82 135 foreach ( $attr as $param_name => $param_value ) {
83 136
84 137 switch ( $param_name) { // Validate Params
85 138
86 - case 'url':
139 + case 'url':
87 140 $shortcode[ $param_name ] = esc_url_raw( $param_value ); // $shortcode[ 'url' ]
88 141 $shortcode[ $param_name ] = str_replace( '&amp;', '&', $shortcode[ $param_name ] ); //FixIn: 2.0.14.2
89 142 break;
90 143
91 144 case 'import_conditions':
92 - $shortcode[ $param_name ] = esc_attr( $param_value ); // $shortcode[ 'resource_id' ]
145 + $shortcode[ $param_name ] = esc_attr( $param_value ); // $shortcode[ 'resource_id' ]
93 146 break;
94 -
95 - case 'resource_id':
96 - $shortcode[ $param_name ] = intval($param_value ); // $shortcode[ 'resource_id' ]
147 +
148 + case 'resource_id':
149 + $shortcode[ $param_name ] = intval($param_value ); // $shortcode[ 'resource_id' ]
97 150 break;
98 -
151 +
99 152 case 'from': // 'now', 'today', 'week', 'month-start', 'month-end', 'year-start', 'any', 'date' = 2017-08-07
100 153 $shortcode[ $param_name ] = $param_value;
101 154 break;
102 -
155 +
103 156 case 'from_offset': // 5d, 10h, 5m, 30s -- if from: { 'now', 'today', 'week', 'month-start', 'month-end', 'year-start' }
104 - $shortcode[ $param_name ] = $param_value;
157 + $shortcode[ $param_name ] = $param_value;
105 158 break;
106 -
159 +
107 160 case 'until': // 'now', 'today', 'week', 'month-start', 'month-end', 'year-end', 'any', 'date' = 2017-08-07
108 161 $shortcode[ $param_name ] = $param_value;
109 162 break;
110 -
163 +
111 164 case 'until_offset': // 5d, 10h, 5m, 30s -- if until: { 'now', 'today', 'week', 'month-start', 'month-end', 'year-end' }
112 - $shortcode[ $param_name ] = $param_value;
165 + $shortcode[ $param_name ] = $param_value;
113 166 break;
114 -
115 - case 'max':
116 - $shortcode[ $param_name ] = intval( $param_value );
167 +
168 + case 'max':
169 + $shortcode[ $param_name ] = intval( $param_value );
117 170 break;
118 -
171 +
119 172 case 'is_all_dates_in': // Conditional of Dates checking. TRUE - Remove event if al least 1 day not in conditional interval, FALSE - save event, if at leat one date in conditional interval
120 - $shortcode[ $param_name ] = intval( $param_value );
173 + $shortcode[ $param_name ] = intval( $param_value );
121 174 break;
122 -
123 -
175 +
176 +
124 177 default:
125 178 $shortcode[ $param_name ] = $param_value;
126 179 break;
127 - }
128 - }
180 + }
181 + }
129 182 $shortcode = wp_parse_args( $shortcode, $defaults );
130 183 // </editor-fold>
131 184
185 + // <editor-fold defaultstate="collapsed" desc=" Notice - Import Parameters | Error No URL" >
132 186
133 - wpbm_delete_all_imported_bookings( array( 'resource_id' => $shortcode['resource_id'] ) ); //FixIn: 2.0.10.3
187 + do_action( 'wpbc_show_debug', array( 'Import Parameters' , $shortcode ) ); // S_Y_S_T_E_M L_O_G
134 188
189 + if ( empty( $shortcode[ 'url' ] ) ) {
190 + do_action( 'wpbc_admin_show_top_notice', __( 'No ics url feed', 'booking-manager' ), 'error', 5000 ); // N_O_T_I_C_E in H_E_A_D_E_R
191 + return false;
192 + }
193 + // </editor-fold>
135 194
195 + ///////////////////////////////////////////////////////////////////// - Get, Parse ICS Feed
196 +
197 + $ics_array = wpbm_ics_file_to_array( $shortcode[ 'url' ] );
198 +
199 + // <editor-fold defaultstate="collapsed" desc=" Notice - feed contain N events | Error Importing " >
200 + do_action( 'wpbc_show_debug', array( 'Imported data' , $ics_array) ); // S_Y_S_T_E_M L_O_G
201 +
202 + // If Error
203 + if ( is_wp_error( $ics_array ) ) {
204 +
205 + $error_message = $ics_array->get_error_message();
206 + do_action( 'wpbc_admin_show_top_notice', $error_message, 'error', 5000 ); // N_O_T_I_C_E in H_E_A_D_E_R
207 + return false;
208 + }
209 +
210 + //FixIn: 2.0.7.3
211 + $ics_array_events_num = 0;
212 + if ( ( ! empty( $ics_array ) ) && ( ! empty( $ics_array[ 'events' ] ) ) && ( is_array( $ics_array[ 'events' ] ) ) ) {
213 + $ics_array_events_num = count( $ics_array[ 'events' ] );
214 + }
215 + do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
216 + , sprintf ( __( '.ics feed contain %s events at URL %s', 'booking-manager' ), '<b>' . $ics_array_events_num . '</b>', '<b><a href="'. $shortcode[ 'url' ] .'">' . $shortcode[ 'url' ] . '</a></b>' )
217 + , 'info', 5000 );
218 + // </editor-fold>
219 +
220 + if ( 'skip' != $shortcode['delete'] ) {
221 + wpbm_delete_all_imported_bookings( array( 'resource_id' => $shortcode['resource_id'] ) ); //FixIn: 2.0.18.3 //FixIn: 2.0.10.3
222 + }
223 +
224 +
225 + $bk_array = array();
226 + // Get Only '_BOOKING...' field from ICS array
227 + if ( $ics_array !== false ) {
228 + $bk_array = wpbm_get_booking_fields_from_ics_array( $ics_array[ 'events' ] );
229 + }
230 +
231 + do_action( 'wpbc_show_debug', array( 'Imported Events', $bk_array ) ); // S_Y_S_T_E_M L_O_G
232 +
233 +
234 + //FixIn: 2.0.6.1 - Set timezone frrom Booking > Settings > Sync page for booking listing shortcode
235 + $tzid = get_bk_option( 'booking_gcal_timezone' );
236 + if ( ! empty( $tzid ) ) {
237 + foreach ( $bk_array as $bk_k => $bk_ics_data_arr ) {
238 +
239 +
240 + //apply our timezone from the Booking > Settings > Search page
241 + foreach ( $bk_array[ $bk_k ]['_BOOKING_DATES'] as $dk => $day ) {
242 + //$bk_array[ $bk_k ][ '_BOOKING_DATES' ][ $dk ] = ZDateHelper::toLocalDateTime( get_gmt_from_date( $day ), $tzid );
243 +
244 + //FixIn: 2.0.7.4 - Skip adding Timezone to "middle" days, if days start with time 00:00:00 - its means event for full day, not the start/end time
245 + // Apply timezone only to fist and last days in a list, if the change over days activated in the Booking Calendar
246 + $ics_time_in_day = substr( $day, -8);
247 + if ( '00:00:00' == $ics_time_in_day ) {
248 + continue;
249 + }
250 + //FixIn: 2.0.7.4 - Skip adding Timezone to "middle" days, if Booking Calendar use change over days, to prevent of having clock icon in middle days.
251 + if ( ( class_exists( 'wpdev_bk_biz_s' ) )
252 + && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
253 + && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
254 + ) { //FixIn: 2.0.5.1
255 + $days_number = count( $bk_array[ $bk_k ]['_BOOKING_DATES'] );
256 + if ( ( 0 != $dk ) && ( ( $days_number - 1) != $dk ) ) {
257 + continue;
258 + }
259 + // We are append one day to the booking, so skip this day for timezone, as well
260 + if ( ( get_bk_option( 'booking_ics_import_append_checkout_day' ) !== 'Off' ) && ( ( $days_number - 1) == $dk ) ) {
261 + continue;
262 + }
263 + }
264 +
265 + $bk_array[ $bk_k ]['_BOOKING_DATES'][ $dk ] = ZDateHelper::toLocalDateTime( $day, $tzid );
266 + }
267 + }
268 + }
269 +
270 + ///////////////////////////////////////////////////////////////////// - Check if these EVENTS was imported before or NOT
271 +
272 + $booking_ics_force_import = get_bk_option( 'booking_ics_force_import' ); //FixIn: 2.0.10.1
273 + $booking_condition_import_only_new = get_bk_option( 'booking_condition_import_only_new' ); //FixIn: 9.8.15.8
274 + if ( false === $booking_condition_import_only_new ) {
275 + // OLD:
276 + if ( 'On' !== $booking_ics_force_import ) {
277 + $bk_array = wpbm_clear_events_from_exist_bookings( $bk_array );
278 + }
279 + } else {
280 + // NEW
281 + if ( 'On' === $booking_condition_import_only_new ) {
282 + $bk_array = wpbm_clear_events_from_exist_bookings( $bk_array );
283 + }
284 + }
285 +
286 +
287 + // <editor-fold defaultstate="collapsed" desc=" Notice - if events was imported previously | Already ALL Imported " >
288 + do_action( 'wpbc_show_debug', array( 'Check, if events was imported previously. New events: ', $bk_array ) ); // S_Y_S_T_E_M L_O_G
289 +
290 + if ( empty( $bk_array ) ) {
291 +
292 + do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
293 + , '<strong>' . __( 'Warning', 'booking' ) . '!</strong> '
294 + . sprintf( __( 'No any new events to import! These events was import previously, already.', 'booking-manager' ), '<strong>' . count( $bk_array ) . '</strong>' )
295 + , 'warning', 3000 );
296 + return 0;
297 + }
298 + // </editor-fold>
299 +
300 +
301 + ///////////////////////////////////////////////////////////////////// - Skip events that does not fit to filter parameters: FROM - UNTIL
302 +
303 + // Sort Events
304 + $bk_array = wpbm_sort_events_by( $bk_array );
305 +
306 + // Filter By Dates - "From - Until"
307 + $bk_array = wpbm_clear_events_by_dates( $bk_array, $shortcode );
308 +
309 + // Filter events by - "Max"
310 + $bk_array = wpbm_clear_events_by_count( $bk_array, $shortcode );
311 +
312 +
313 + // <editor-fold defaultstate="collapsed" desc=" Notice - Creation of N bookings " >
314 + do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
315 + , sprintf( __( 'Imported of %s bookings', 'booking-manager' ), '<strong>' . count( $bk_array ) . '</strong>' )
316 + , 'info', 3000 );
317 +
318 + do_action( 'wpbc_show_debug', array( 'Create bookings after filtering', $bk_array ) ); // S_Y_S_T_E_M L_O_G
319 + // </editor-fold>
320 +
321 + ///////////////////////////////////////////////////////////////////// - Loop events > C r e a t e B o o k i n g s
322 +
323 + // Get assigning fields for SUMMARY, DESCRIPTION, LOCATION
324 + $assigned_fields_arr = WPBM_create_bookings_from_events::get_assigned_form_fields();
325 +
326 + $booking_added_num = 0;
327 +
328 + foreach ( $bk_array as $ics_event) {
329 +
330 + //FixIn: 2.1.3
331 + if (
332 + ( 'On' == get_bk_option( 'booking_ics_import_append_checkout_day' ) )
333 + || (
334 + ( class_exists( 'wpdev_bk_biz_s' ) )
335 + && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
336 + && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
337 + && ( count( $ics_event[ '_BOOKING_DATES' ] ) == 1 )
338 + )
339 + ) { //FixIn: 2.0.27.1 //FixIn: 9.5.4.1
340 + // Add one additional day to .ics event (useful in some cases for bookings with change-over days), if the imported .ics dates is coming without check in/our times
341 + // Later system is adding check in/out times from Booking Calendar to this event
342 + $ics_event_check_out = $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ];
343 +
344 + //FixIn Start: 2.0.28.1 ------------------------------------------------------------------------------------
345 + // Is check in/out dates in this event it's the same date
346 + $test_check_in = substr( $ics_event['_BOOKING_DATES'][0], 0, 10 );
347 + $test_check_out = substr( $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ], 0, 10 );
348 + if ( count( $ics_event['_BOOKING_DATES'] ) > 1 ) { //FixIn: 2.1.3
349 + if ( $test_check_in === $test_check_out ) {
350 + // It is the same date, like 2024-02-12 10:00:01, 2024-02-12 14:59:52, then remove this date, because we will add new date
351 + unset( $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ] );
352 + // Important! Reindex array, after unset operation.
353 + $ics_event['_BOOKING_DATES'] = array_values( $ics_event['_BOOKING_DATES'] );
354 + } else {
355 + // It is other date, in this case, we need to define other time:
356 + $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ] = $test_check_out . ' 00:00:00';
357 + }
358 + }
359 + //FixIn End: 2.0.28.1 --------------------------------------------------------------------------------------
360 +
361 + $ics_event_check_out = strtotime( $ics_event_check_out );
362 + $ics_event_check_out = strtotime( '+1 day', $ics_event_check_out );
363 + $ics_event_check_out = date_i18n( "Y-m-d H:i:s", $ics_event_check_out ); //FixIn: 2.0.28.1 //$ics_event_check_out = date_i18n( "Y-m-d 00:00:00", $ics_event_check_out );
364 + $ics_event['_BOOKING_DATES'][] = $ics_event_check_out;
365 +
366 + if (
367 + ( 'On' === get_bk_option( 'booking_ics_import_append_checkout_day' ) )
368 + && ( 'On' === get_bk_option( 'booking_ics_import_append_extra_checkout_day' ) )
369 + ) {
370 + $ics_event['_BOOKING_DATES'] = wpbm_ics_import_append_extra_checkout_day( $ics_event['_BOOKING_DATES'] );
371 + }
372 + }
373 +
374 + $booking_data = array();
375 +
376 + if ( ( class_exists( 'wpdev_bk_biz_s' ) )
377 + && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
378 + && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
379 + && ( count( $ics_event[ '_BOOKING_DATES' ] ) > 1 )
380 + ) {
381 + $dates_formats = array_fill( 0, count( $ics_event[ '_BOOKING_DATES' ] ), "Y-m-d" ); // Array ( [0] => Y-m-d [1] => Y-m-d ... )
382 + } else {
383 + $dates_formats = array_fill( 0, count( $ics_event[ '_BOOKING_DATES' ] ), "Y-m-d H:i:s" ); //FixIn: 2.0.15.4
384 + }
385 + $booking_dates_unix = array_map( 'strtotime', $ics_event[ '_BOOKING_DATES' ] ); // Array ( [0] => 1498262400 [1] => 1498348800 )
386 + $simple_booking_dates = array_map( 'date_i18n', $dates_formats , $booking_dates_unix ); // Array ( '2017-06-23', '2017-06-24', '2017-06-25', '2017-06-26' )
387 +
388 +
389 + //Add check in/out times to full day events //FixIn: 8.1.3.29
390 + if ( ( class_exists( 'wpdev_bk_biz_s' ) )
391 + && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
392 + && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
393 + ) { //FixIn: 2.0.5.1
394 +
395 + if ( ( is_array( $simple_booking_dates ) ) && ( count( $simple_booking_dates ) > 1 ) ) { //FixIn: 2.0.10.4
396 + $wpbc_check_in = ' ' . get_bk_option( 'booking_range_selection_start_time') . ':01'; // ' 14:00:01'
397 + $wpbc_check_out = ' ' . get_bk_option( 'booking_range_selection_end_time') . ':02'; // ' 10:00:02';
398 + $simple_booking_dates[0] = $simple_booking_dates[0] . $wpbc_check_in;
399 + $simple_booking_dates[ ( count( $simple_booking_dates ) - 1 ) ] = $simple_booking_dates[ ( count( $simple_booking_dates ) - 1 ) ] . $wpbc_check_out;
400 + $ics_event['_BOOKING_DATES'][0] = $simple_booking_dates[0];
401 + $ics_event['_BOOKING_DATES'][ ( count( $simple_booking_dates ) - 1 ) ] = $simple_booking_dates[ ( count( $simple_booking_dates ) - 1 ) ];
402 + }
403 + }
404 +
405 +
406 + WPBM_create_bookings_from_events::set_ics_dates( $ics_event[ '_BOOKING_DATES' ] );
407 +
408 + $booking = array(
409 + 'dates' => $simple_booking_dates // array( '2017-06-24', '2017-06-24', '2017-06-25', '2017-06-26' )
410 + , 'data' => array()
411 + , 'resource_id' => $shortcode[ 'resource_id' ]
412 + );
413 +
414 +
415 + $bk_data = array();
416 + foreach ( $assigned_fields_arr as $assigned_field ) {
417 +
418 + switch ( $assigned_field[ 'ics_field_name' ] ) {
419 +
420 + case 'title':
421 + $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_SUMMARY' ] ) );
422 + break;
423 +
424 + case 'description':
425 + $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_DESCRIPTION' ] ) );
426 + break;
427 +
428 + case 'where':
429 + $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_LOCATION' ] ) );
430 + break;
431 +
432 + default:
433 + break;
434 + }
435 + }
436 +
437 + // Email
438 + $email = '[email protected]'; //get_option ( 'admin_email' );
439 + if ( ! empty( $ics_event['_BOOKING_ATTENDEE'] ) ) {
440 + $email = str_replace( 'mailto:', '', $ics_event['_BOOKING_ATTENDEE'] );
441 + if ( ! is_email( $email ) ) {
442 + $email = '[email protected]';
443 + }
444 + }
445 + $bk_data [ 'email' ] = array( 'value' => $email, 'type' => 'email' );
446 +
447 + // Optional Start and End times
448 + $start_time = substr( $ics_event[ '_BOOKING_DATES' ][ 0 ], 11 );
449 + $end_time = $ics_event[ '_BOOKING_DATES' ][ ( count( $ics_event[ '_BOOKING_DATES' ] ) - 1 ) ];
450 + $end_time = substr( $end_time, 11 );
451 +
452 + // Convert times H:i:s to seconds +1 +2 seconds and convert back to H:i -----------------------------------
453 + $in_seconds = wpbc_transform__24_hours_his__in__seconds( $start_time );
454 + $is_check_in_out__or_full = $in_seconds % 10; // 0, 1, 2
455 + if ( 1 === $is_check_in_out__or_full ) {
456 + $in_seconds = $in_seconds - 1;
457 + }
458 + $start_time = wpbc_transform__seconds__in__24_hours_his( $in_seconds );
459 + $start_time = substr( $start_time, 0, 5 );
460 +
461 + $in_seconds = wpbc_transform__24_hours_his__in__seconds( $end_time );
462 + $is_check_in_out__or_full = $in_seconds % 10; // 0, 1, 2
463 + if ( 2 === $is_check_in_out__or_full ) {
464 + $in_seconds = $in_seconds + 8;
465 + }
466 + $end_time = wpbc_transform__seconds__in__24_hours_his( $in_seconds );
467 + $end_time = substr( $end_time, 0, 5 );
468 + // -------------------------------------------------------------------------------------------------------------
469 +
470 + //Add check in/out times //FixIn: 8.1.3.29
471 + if ( ( class_exists( 'wpdev_bk_biz_s' ) )
472 + && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
473 + && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
474 + ){ //FixIn: 2.0.5.1
475 +
476 + $start_time = get_bk_option( 'booking_range_selection_start_time' ); // ' 14:00'
477 + $end_time = get_bk_option( 'booking_range_selection_end_time' ); // ' 10:00'
478 + }
479 +
480 +
481 + if ( ( $start_time !== '00:00' ) || ( $end_time !== '00:00' ) ) {
482 + $bk_data [ 'rangetime' ] = array( 'value' => $start_time . ' - ' . $end_time, 'type' => 'select-one' );
483 + }
484 +
485 + $booking['data'] = $bk_data;
486 +
487 + $additional_params = array( 'sync_gid' => $ics_event['_BOOKING_UID'], 'is_send_emeils' => 0 ); //FixIn: 2.0.10.2
488 +
489 + /**
490 + *
491 + *
492 + // $ics_event[ '_BOOKING_DATES' ]; // array ( [0] => 2014-09-16 05:00:01 [1] => 2014-09-16 12:00:02 )
493 + // $ics_event[ '_BOOKING_SUMMARY' ]; // Event (timezone Pacific GMT-07:00)
494 + // $ics_event[ '_BOOKING_DESCRIPTION' ]; // 8/7/2017 1:00pm TO 3:30pm 8/8/2017 (GMT-07:00) Pacific Time
495 + // $ics_event[ '_BOOKING_LOCATION' ]; // Pacific Coast Highway, Pacific Coast Hwy, Los Angeles, CA, USA
496 + // $ics_event[ '_BOOKING_UID' ]; // [email protected]
497 + // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
498 + */
499 +
500 + add_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10, 5 );
501 +
502 +
503 + if ( ( function_exists( 'get_bk_option' ) ) && ( get_bk_option( 'booking_auto_approve_bookings_when_import' ) == 'On' ) ) {
504 + $additional_params ['is_approve_booking'] = 1;
505 + }
506 +
507 +
508 + // Check dates availability and process only if dates available in specific booking resource!
509 + if (
510 + ( $shortcode[ 'import_conditions' ] == 'if_dates_free' )
511 + || ( 'On' == get_bk_option( 'booking_condition_import_if_available' ) ) //FixIn: 9.8.15.8 - 'Import only, if days are available'
512 + ) { //FixIn: 2.0.15.2
513 +
514 + $is_dates_booked = wpbc_api_is_dates_booked( $ics_event['_BOOKING_DATES'], $booking['resource_id']
515 + , array(
516 + 'is_use_booking_recurrent_time' => false // If we import bookings, all the times defined in dates, so no need to use it
517 + )
518 + );
519 + } else{
520 + $is_dates_booked = false;
521 + $additional_params['save_booking_even_if_unavailable'] = 1;
522 + }
523 + // $additional_params['is_use_booking_recurrent_time'] = false; // FixIn: 2.1.17.1.
524 + $additional_params['is_use_booking_recurrent_time'] = ( 'On' === get_bk_option( 'booking_recurrent_time' ) );
525 +
526 + if ( ! $is_dates_booked ) {
527 +
528 + $booking_id = wpbc_api_booking_add_new( $booking[ 'dates' ], $booking[ 'data' ], $booking[ 'resource_id' ] , $additional_params );
529 +
530 + if ( ( is_int( $booking_id ) ) && ( $booking_id > 0 ) ) {
531 +
532 + $booking_added_num++;
533 +
534 + // Add notes to the booking relative source of imported booking // FixIn: 2.0.7.2
535 + $import_url = parse_url( $shortcode[ 'url' ] );
536 + if (
537 + ( false !== $import_url )
538 + && ( ! empty( $import_url[ "host" ]))
539 + && ( class_exists('wpdev_bk_personal') )
540 + ){
541 + $remark_text = '[' . date_i18n( 'Y-m-d H:i:s' ) . '] ' . sprintf( __( 'Imported from %s ', 'booking-manager' ), $import_url["host"] );
542 + $remark_text = str_replace( '%', '&#37;', $remark_text );
543 + $remark_text = str_replace( array( '"', "'" ), '', $remark_text );
544 + $remark_text = trim( $remark_text );
545 +
546 + $is_append = true;
547 + make_bk_action( 'wpdev_make_update_of_remark', $booking_id, $remark_text, $is_append );
548 + }
549 +
550 + do_action( 'wpbc_show_debug', sprintf ( 'Added new booking ID:<strong>%d</strong> ', $booking_id ) ); // S_Y_S_T_E_M L_O_G
551 + }
552 +
553 + if ( is_wp_error( $booking_id ) ) {
554 + do_action( 'wpbc_show_debug', implode( ' ', $booking_id->get_error_messages()) );
555 +
556 + do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
557 + , implode( ' ', $booking_id->get_error_messages())
558 + , 'warning', 30000 );
559 + }
560 +
561 + } else {
562 +
563 + do_action( 'wpbc_show_debug', // S_Y_S_T_E_M L_O_G
564 + sprintf ( 'Event was not create becausse dates %s already booked in booking resource ID = %d'
565 + , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
566 + }
567 +
568 + remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
569 +
570 +
571 + // Remove previously saved dates to our 'Static' class.
572 + WPBM_create_bookings_from_events::erase_ics_dates();
573 + }
574 +
575 + return $booking_added_num;
576 +}
577 +add_action( 'wpbm_ics_import_start', 'wpbm_ics_import_start', 10, 1 );
578 +
579 +
580 +// Legacy Import
581 +
582 +/** Import ICS feed and create bookings .in Booking Calendar
583 + *
584 + * @param array $attr = array(
585 + 'url' => ''
586 + , 'resource_id' => 1
587 + , 'import_conditions' => '' | 'if_dates_free' // maybe rename ??? if_dates_booked_then_not_import
588 + )
589 + * @return int|bool number of imported bookings or FALSE if error
590 + */
591 +function wpbm_ics_import_start_legacy( $attr ) {
592 +
593 + // <editor-fold defaultstate="collapsed" desc=" Parse / validate parameters " >
594 + /////////////////////////////////////////////////////////////////////
595 + // Parse / validate parameters
596 + /////////////////////////////////////////////////////////////////////
597 + $defaults = array(
598 + 'url' => ''
599 + , 'resource_id' => 1
600 + , 'delete' => 0
601 + , 'import_conditions' => ''
602 + , 'from' => 'any' // 'today' // '00:00 today'
603 + , 'from_offset' => ''
604 + , 'until' => 'any' // 'year-end'
605 + , 'until_offset' => ''
606 + , 'max' => ''
607 + , 'is_all_dates_in' => true // Conditional of Dates checking. TRUE - Remove event if al least 1 day not in conditional interval, FALSE - save event, if at leat one date in conditional interval
608 + );
609 + $shortcode = array();
610 +
611 + foreach ( $attr as $param_name => $param_value ) {
612 +
613 + switch ( $param_name) { // Validate Params
614 +
615 + case 'url':
616 + $shortcode[ $param_name ] = esc_url_raw( $param_value ); // $shortcode[ 'url' ]
617 + $shortcode[ $param_name ] = str_replace( '&amp;', '&', $shortcode[ $param_name ] ); //FixIn: 2.0.14.2
618 + break;
619 +
620 + case 'import_conditions':
621 + $shortcode[ $param_name ] = esc_attr( $param_value ); // $shortcode[ 'resource_id' ]
622 + break;
623 +
624 + case 'resource_id':
625 + $shortcode[ $param_name ] = intval($param_value ); // $shortcode[ 'resource_id' ]
626 + break;
627 +
628 + case 'from': // 'now', 'today', 'week', 'month-start', 'month-end', 'year-start', 'any', 'date' = 2017-08-07
629 + $shortcode[ $param_name ] = $param_value;
630 + break;
631 +
632 + case 'from_offset': // 5d, 10h, 5m, 30s -- if from: { 'now', 'today', 'week', 'month-start', 'month-end', 'year-start' }
633 + $shortcode[ $param_name ] = $param_value;
634 + break;
635 +
636 + case 'until': // 'now', 'today', 'week', 'month-start', 'month-end', 'year-end', 'any', 'date' = 2017-08-07
637 + $shortcode[ $param_name ] = $param_value;
638 + break;
639 +
640 + case 'until_offset': // 5d, 10h, 5m, 30s -- if until: { 'now', 'today', 'week', 'month-start', 'month-end', 'year-end' }
641 + $shortcode[ $param_name ] = $param_value;
642 + break;
643 +
644 + case 'max':
645 + $shortcode[ $param_name ] = intval( $param_value );
646 + break;
647 +
648 + case 'is_all_dates_in': // Conditional of Dates checking. TRUE - Remove event if al least 1 day not in conditional interval, FALSE - save event, if at leat one date in conditional interval
649 + $shortcode[ $param_name ] = intval( $param_value );
650 + break;
651 +
652 +
653 + default:
654 + $shortcode[ $param_name ] = $param_value;
655 + break;
656 + }
657 + }
658 + $shortcode = wp_parse_args( $shortcode, $defaults );
659 + // </editor-fold>
660 +
136 661 //debuge($shortcode);
137 - // <editor-fold defaultstate="collapsed" desc=" Notice - Import Parameters | Error No URL" >
138 -
662 + // <editor-fold defaultstate="collapsed" desc=" Notice - Import Parameters | Error No URL" >
663 +
139 664 do_action( 'wpbc_show_debug', array( 'Import Parameters' , $shortcode ) ); // S_Y_S_T_E_M L_O_G
140 665
141 - if ( empty( $shortcode[ 'url' ] ) ) {
142 - do_action( 'wpbc_admin_show_top_notice', __( 'No ics url feed', 'booking-manager' ), 'error', 5000 ); // N_O_T_I_C_E in H_E_A_D_E_R
666 + if ( empty( $shortcode[ 'url' ] ) ) {
667 + do_action( 'wpbc_admin_show_top_notice', __( 'No ics url feed', 'booking-manager' ), 'error', 5000 ); // N_O_T_I_C_E in H_E_A_D_E_R
143 668 return false;
144 - }
669 + }
145 670 // </editor-fold>
146 -
147 671
148 - ///////////////////////////////////////////////////////////////////// - Get, Parse ICS Feed
149 -
672 + ///////////////////////////////////////////////////////////////////// - Get, Parse ICS Feed
673 +
150 674 $ics_array = wpbm_ics_file_to_array( $shortcode[ 'url' ] );
151 675
152 - // <editor-fold defaultstate="collapsed" desc=" Notice - feed contain N events | Error Importing " >
676 + // <editor-fold defaultstate="collapsed" desc=" Notice - feed contain N events | Error Importing " >
153 677 do_action( 'wpbc_show_debug', array( 'Imported data' , $ics_array) ); // S_Y_S_T_E_M L_O_G
154 678
155 679 // If Error
156 680 if ( is_wp_error( $ics_array ) ) {
157 -
158 - $error_message = $ics_array->get_error_message();
159 - do_action( 'wpbc_admin_show_top_notice', $error_message, 'error', 5000 ); // N_O_T_I_C_E in H_E_A_D_E_R
681 +
682 + $error_message = $ics_array->get_error_message();
683 + do_action( 'wpbc_admin_show_top_notice', $error_message, 'error', 5000 ); // N_O_T_I_C_E in H_E_A_D_E_R
160 684 return false;
161 685 }
162 686
163 687 //FixIn: 2.0.7.3
@@ -166,17 +690,22 @@
166 690 $ics_array_events_num = count( $ics_array[ 'events' ] );
167 691 }
168 692 do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
169 693 , sprintf ( __( '.ics feed contain %s events at URL %s', 'booking-manager' ), '<b>' . $ics_array_events_num . '</b>', '<b><a href="'. $shortcode[ 'url' ] .'">' . $shortcode[ 'url' ] . '</a></b>' )
170 - , 'info', 5000 );
694 + , 'info', 5000 );
171 695 // </editor-fold>
172 -
696 +
697 + //FixIn: 2.0.18.3
698 + if ( 'skip' != $shortcode['delete'] ) {
699 + wpbm_delete_all_imported_bookings( array( 'resource_id' => $shortcode['resource_id'] ) ); //FixIn: 2.0.10.3
700 + }
701 +
173 702 $bk_array = array();
174 - // Get Only '_BOOKING...' field from ICS array
175 - if ( $ics_array !== false ) {
176 - $bk_array = wpbm_get_booking_fields_from_ics_array( $ics_array[ 'events' ] );
177 - }
178 -
703 + // Get Only '_BOOKING...' field from ICS array
704 + if ( $ics_array !== false ) {
705 + $bk_array = wpbm_get_booking_fields_from_ics_array( $ics_array[ 'events' ] );
706 + }
707 +
179 708 do_action( 'wpbc_show_debug', array( 'Imported Events', $bk_array ) ); // S_Y_S_T_E_M L_O_G
180 709
181 710
182 711 //FixIn: 2.0.6.1 - Set timezone frrom Booking > Settings > Sync page for booking listing shortcode
@@ -217,30 +746,37 @@
217 746
218 747 ///////////////////////////////////////////////////////////////////// - Check if these EVENTS was imported before or NOT
219 748
220 749 $booking_ics_force_import = get_bk_option( 'booking_ics_force_import' ); //FixIn: 2.0.10.1
221 -
222 - if ( 'On' !== $booking_ics_force_import ) {
223 - $bk_array = wpbm_clear_events_from_exist_bookings( $bk_array );
750 + $booking_condition_import_only_new = get_bk_option( 'booking_condition_import_only_new' ); //FixIn: 9.8.15.8
751 + if ( false === $booking_condition_import_only_new ) {
752 + // OLD:
753 + if ( 'On' !== $booking_ics_force_import ) {
754 + $bk_array = wpbm_clear_events_from_exist_bookings( $bk_array );
755 + }
756 + } else {
757 + // NEW:
758 + if ( 'On' === $booking_condition_import_only_new ) {
759 + $bk_array = wpbm_clear_events_from_exist_bookings( $bk_array );
760 + }
224 761 }
225 762
226 -
227 763 // <editor-fold defaultstate="collapsed" desc=" Notice - if events was imported previously | Already ALL Imported " >
228 764 do_action( 'wpbc_show_debug', array( 'Check, if events was imported previously. New events: ', $bk_array ) ); // S_Y_S_T_E_M L_O_G
229 765
230 766 if ( empty( $bk_array ) ) {
231 -
232 - do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
233 - , '<strong>' . __( 'Warning', 'booking' ) . '!</strong> '
767 +
768 + do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
769 + , '<strong>' . __( 'Warning', 'booking' ) . '!</strong> '
234 770 . sprintf( __( 'No any new events to import! These events was import previously, already.', 'booking-manager' ), '<strong>' . count( $bk_array ) . '</strong>' )
235 - , 'warning', 3000 );
236 - return 0;
771 + , 'warning', 3000 );
772 + return 0;
237 773 }
238 774 // </editor-fold>
239 -
240 -
241 - ///////////////////////////////////////////////////////////////////// - Skip events that does not fit to filter parameters: FROM - UNTIL
242 -
775 +
776 +
777 + ///////////////////////////////////////////////////////////////////// - Skip events that does not fit to filter parameters: FROM - UNTIL
778 +
243 779 // $bk_array = wpbm_clear_events_by_dates( $bk_array, $shortcode );
244 780
245 781
246 782 // Sort Events
@@ -245,55 +781,87 @@
245 781
246 782 // Sort Events
247 783 $bk_array = wpbm_sort_events_by( $bk_array );
248 784
249 - // Filter By Dates - "From - Until"
785 + // Filter By Dates - "From - Until"
250 786 $bk_array = wpbm_clear_events_by_dates( $bk_array, $shortcode );
251 787
252 - // Filter events by - "Max"
788 + // Filter events by - "Max"
253 789 $bk_array = wpbm_clear_events_by_count( $bk_array, $shortcode );
254 790
255 -
256 - // <editor-fold defaultstate="collapsed" desc=" Notice - Creation of N bookings " >
791 +
792 + // <editor-fold defaultstate="collapsed" desc=" Notice - Creation of N bookings " >
257 793 do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
258 794 , sprintf( __( 'Imported of %s bookings', 'booking-manager' ), '<strong>' . count( $bk_array ) . '</strong>' )
259 - , 'info', 3000 );
260 -
795 + , 'info', 3000 );
796 +
261 797 do_action( 'wpbc_show_debug', array( 'Create bookings after filtering', $bk_array ) ); // S_Y_S_T_E_M L_O_G
262 798 // </editor-fold>
263 -
799 +
264 800 ///////////////////////////////////////////////////////////////////// - Loop events > C r e a t e B o o k i n g s
265 801
266 - // Get assigning fields for SUMMARY, DESCRIPTION, LOCATION
802 + // Get assigning fields for SUMMARY, DESCRIPTION, LOCATION
267 803 $assigned_fields_arr = WPBM_create_bookings_from_events::get_assigned_form_fields();
268 -
804 +
269 805 $booking_added_num = 0;
270 -
806 +
271 807 foreach ( $bk_array as $ics_event) {
272 808
273 809 //FixIn: 2.0.5.2
274 810 //FixIn: 8.1.3.29
275 - if ( ( class_exists( 'wpdev_bk_biz_s' ) )
276 - && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
277 - && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
278 - && ( get_bk_option( 'booking_ics_import_append_checkout_day' ) !== 'Off' )
279 - ) {
811 +// if ( ( class_exists( 'wpdev_bk_biz_s' ) )
812 +// && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
813 +// && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
814 +// && ( get_bk_option( 'booking_ics_import_append_checkout_day' ) !== 'Off' )
815 +// ) {
816 + if ( 'On' == get_bk_option( 'booking_ics_import_append_checkout_day' ) ) { //FixIn: 2.0.27.1 //FixIn: 9.5.4.1
280 817 // Add one additional day to .ics event (useful in some cases for bookings with change-over days), if the imported .ics dates is coming without check in/our times
281 818 // Later system is adding check in/out times from Booking Calendar to this event
282 819 $ics_event_check_out = $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ];
820 +
821 + //FixIn Start: 2.0.28.1 ------------------------------------------------------------------------------------
822 + // Is check in/out dates in this event it's the same date
823 + $test_check_in = substr( $ics_event['_BOOKING_DATES'][0], 0, 10 );
824 + $test_check_out = substr( $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ], 0, 10 );
825 + if ( $test_check_in === $test_check_out ) {
826 + // It is the same date, like 2024-02-12 10:00:01, 2024-02-12 14:59:52, then remove this date, because we will add new date
827 + unset( $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ] );
828 + // Important! Reindex array, after unset operation.
829 + $ics_event['_BOOKING_DATES'] = array_values( $ics_event['_BOOKING_DATES'] );
830 + } else {
831 + // It is other date, in this case, we need to define other time:
832 + $ics_event['_BOOKING_DATES'][ ( count( $ics_event['_BOOKING_DATES'] ) - 1 ) ] = $test_check_out . ' 00:00:00';
833 + }
834 + //FixIn End: 2.0.28.1 --------------------------------------------------------------------------------------
835 +
283 836 $ics_event_check_out = strtotime( $ics_event_check_out );
284 837 $ics_event_check_out = strtotime( '+1 day', $ics_event_check_out );
285 - $ics_event_check_out = date_i18n( "Y-m-d 00:00:00", $ics_event_check_out );
838 + $ics_event_check_out = date_i18n( "Y-m-d H:i:s", $ics_event_check_out ); //FixIn: 2.0.28.1 //$ics_event_check_out = date_i18n( "Y-m-d 00:00:00", $ics_event_check_out );
286 839 $ics_event['_BOOKING_DATES'][] = $ics_event_check_out;
840 +
841 + if (
842 + ( 'On' === get_bk_option( 'booking_ics_import_append_checkout_day' ) )
843 + && ( 'On' === get_bk_option( 'booking_ics_import_append_extra_checkout_day' ) )
844 + ) {
845 + $ics_event['_BOOKING_DATES'] = wpbm_ics_import_append_extra_checkout_day( $ics_event['_BOOKING_DATES'] );
846 + }
287 847 }
288 848
289 849 $booking_data = array();
290 850
291 - $dates_formats = array_fill( 0, count( $ics_event[ '_BOOKING_DATES' ] ), "Y-m-d" ); // Array ( [0] => Y-m-d [1] => Y-m-d ... )
851 + if ( ( class_exists( 'wpdev_bk_biz_s' ) )
852 + && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
853 + && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
854 + && ( count( $ics_event[ '_BOOKING_DATES' ] ) > 1 )
855 + ) {
856 + $dates_formats = array_fill( 0, count( $ics_event[ '_BOOKING_DATES' ] ), "Y-m-d" ); // Array ( [0] => Y-m-d [1] => Y-m-d ... )
857 + } else {
858 + $dates_formats = array_fill( 0, count( $ics_event[ '_BOOKING_DATES' ] ), "Y-m-d H:i:s" ); //FixIn: 2.0.15.4
859 + }
292 860 $booking_dates_unix = array_map( 'strtotime', $ics_event[ '_BOOKING_DATES' ] ); // Array ( [0] => 1498262400 [1] => 1498348800 )
293 861 $simple_booking_dates = array_map( 'date_i18n', $dates_formats , $booking_dates_unix ); // Array ( '2017-06-23', '2017-06-24', '2017-06-25', '2017-06-26' )
294 -//debuge('$ics_event, $simple_booking_dates', $ics_event, $simple_booking_dates);
295 862
863 +
296 864 //FixIn: 8.1.3.29
297 865 if ( ( class_exists( 'wpdev_bk_biz_s' ) )
298 866 && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
299 867 && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
@@ -324,9 +892,9 @@
324 892
325 893 $booking = array(
326 894 'dates' => $simple_booking_dates // array( '2017-06-24', '2017-06-24', '2017-06-25', '2017-06-26' )
327 895 , 'data' => array()
328 - , 'resource_id' => $shortcode[ 'resource_id' ]
896 + , 'resource_id' => $shortcode[ 'resource_id' ]
329 897 );
330 898
331 899
332 900 $bk_data = array();
@@ -333,17 +901,17 @@
333 901 foreach ( $assigned_fields_arr as $assigned_field ) {
334 902
335 903 switch ( $assigned_field[ 'ics_field_name' ] ) {
336 904
337 - case 'title':
905 + case 'title':
338 906 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_SUMMARY' ] ) );
339 907 break;
340 908
341 - case 'description':
909 + case 'description':
342 910 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_DESCRIPTION' ] ) );
343 911 break;
344 912
345 - case 'where':
913 + case 'where':
346 914 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_LOCATION' ] ) );
347 915 break;
348 916
349 917 default:
@@ -351,9 +919,9 @@
351 919 }
352 920 }
353 921
354 922 // Email
355 - $home_url = explode( '://', home_url() );
923 + $home_url = explode( '://', home_url() );
356 924 //if (count($home_url>0)) //FixIn: 2.0.3.2
357 925 // $email = 'ics@' . $home_url[1];
358 926 //else
359 927 $email = get_option ( 'admin_email' );
@@ -388,26 +956,32 @@
388 956 // $ics_event[ '_BOOKING_SUMMARY' ]; // Event (timezone Pacific GMT-07:00)
389 957 // $ics_event[ '_BOOKING_DESCRIPTION' ]; // 8/7/2017 1:00pm TO 3:30pm 8/8/2017 (GMT-07:00) Pacific Time
390 958 // $ics_event[ '_BOOKING_LOCATION' ]; // Pacific Coast Highway, Pacific Coast Hwy, Los Angeles, CA, USA
391 959 // $ics_event[ '_BOOKING_UID' ]; // [email protected]
392 - // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
960 + // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
393 961 */
394 -
962 +
395 963 add_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10, 5 );
396 -
964 +
397 965 // Do not overupdate "child booking resources" when saving bookings to parent booking resource. Just skip this checking
398 - add_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10, 7 );
966 + add_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10, 7 );
399 967
400 - // Check dates availability and process
968 + // Check dates availability and process
401 969 // only if dates available in specific booking resource!
402 - if ( $shortcode[ 'import_conditions' ] == 'if_dates_free' )
403 - $is_dates_booked = wpbc_api_is_dates_booked( $booking[ 'dates' ], $booking[ 'resource_id' ] );
404 - else
970 + if (
971 + ( $shortcode[ 'import_conditions' ] == 'if_dates_free' )
972 + || ( 'On' == get_bk_option( 'booking_condition_import_if_available' ) ) //FixIn: 9.8.15.8 - 'Import only, if days are available'
973 + ){
974 + $is_dates_booked = wpbc_api_is_dates_booked( $ics_event['_BOOKING_DATES'], $booking['resource_id'] ); //FixIn: 2.0.15.2
975 + //$is_dates_booked = wpbc_api_is_dates_booked( $booking['dates'], $booking['resource_id'] );
976 + } else{
405 977 $is_dates_booked = false;
978 + }
406 979
980 +
407 981 if ( ! $is_dates_booked ) {
408 -
409 - $booking_id = wpbc_api_booking_add_new( $booking[ 'dates' ], $booking[ 'data' ], $booking[ 'resource_id' ] , $additional_params );
982 +
983 + $booking_id = wpbc_api_booking_add_new( $booking[ 'dates' ], $booking[ 'data' ], $booking[ 'resource_id' ] , $additional_params );
410 984 $booking_added_num++;
411 985
412 986 //if ( ( defined( 'WP_BK_AUTO_APPROVE_WHEN_IMPORT_GCAL' ) ) && ( WP_BK_AUTO_APPROVE_WHEN_IMPORT_GCAL ) ){ // Auto approve booking if imported
413 987 if ( ( function_exists( 'get_bk_option' )) && ( get_bk_option( 'booking_auto_approve_bookings_when_import' ) == 'On' ) ) { //FixIn: 8.1.3.27
@@ -446,9 +1020,9 @@
446 1020 } else {
447 1021
448 1022 do_action( 'wpbc_show_debug', // S_Y_S_T_E_M L_O_G
449 1023 sprintf ( 'Event was not create becausse dates %s already booked in booking resource ID = %d'
450 - , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
1024 + , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
451 1025 }
452 1026
453 1027 remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
454 1028 remove_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10 );
@@ -453,16 +1027,16 @@
453 1027 remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
454 1028 remove_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10 );
455 1029
456 1030 // Remove previously saved dates to our 'Static' class.
457 - WPBM_create_bookings_from_events::erase_ics_dates();
1031 + WPBM_create_bookings_from_events::erase_ics_dates();
458 1032 }
459 -
460 - return $booking_added_num;
1033 +
1034 + return $booking_added_num;
461 1035 }
462 -add_action( 'wpbm_ics_import_start', 'wpbm_ics_import_start', 10, 1 );
463 1036
464 1037
1038 +
465 1039 ////////////////////////////////////////////////////////////////////////////////////////////
466 1040 // Booking Calendar support functions
467 1041 ////////////////////////////////////////////////////////////////////////////////////////////
468 1042
@@ -468,9 +1042,9 @@
468 1042
469 1043
470 1044 /** Clear array of Events from events that already exist in Booking table
471 1045 * Check UID and GUID sync paramaters
472 - *
1046 + *
473 1047 * @param array $bk_array - array of events
474 1048 * @return array - trimmed array
475 1049 */
476 1050 function wpbm_clear_events_from_exist_bookings( $bk_array ) {
@@ -477,11 +1051,11 @@
477 1051
478 1052 $bk_uid = $bk_guid = array();
479 1053 // GET array of UID for imported bookings
480 1054 foreach ( $bk_array as $ics_key => $ics_event) {
481 -
1055 +
482 1056 $bk_uid[ $ics_key ] = $ics_event[ '_BOOKING_UID' ];
483 -
1057 +
484 1058 if ( strpos( $ics_event[ '_BOOKING_UID' ], '@google.com') !== false ) {
485 1059 // [email protected] - ID of event from ICS
486 1060 // 15ig8t0i739kajgjc8ekc386dt_20170815 - ID of event during import from Google Calendar (probabaly created by ID before @ + first date)
487 1061
@@ -486,24 +1060,24 @@
486 1060 // 15ig8t0i739kajgjc8ekc386dt_20170815 - ID of event during import from Google Calendar (probabaly created by ID before @ + first date)
487 1061
488 1062 $bk_guid[ $ics_key ] = str_replace( '@google.com'
489 1063 , date_i18n( '_Ymd', strtotime( $ics_event[ '_BOOKING_DATES' ][0] ) )
490 - , $ics_event[ '_BOOKING_UID' ]
1064 + , $ics_event[ '_BOOKING_UID' ]
491 1065 );
492 - }
493 - }
1066 + }
1067 + }
494 1068 $bookings_check_uid = array_merge( $bk_uid,$bk_guid );
495 -
1069 +
496 1070 $bookings_exit_uid = wpbm_get_exist_bookings_gid( $bookings_check_uid );
497 1071
498 1072 // Remove events which already exist
499 1073 foreach ( $bk_uid as $ics_key => $ics_uid ) {
500 -
1074 +
501 1075 // If exist UID remove it from event
502 1076 if ( in_array( $ics_uid, $bookings_exit_uid ) ) {
503 1077 unset( $bk_array[ $ics_key ] );
504 1078 }
505 -
1079 +
506 1080 // If we are having such GUID and it exist, then remove ir
507 1081 if ( isset( $bk_guid[ $ics_key ] ) ) {
508 1082 $ics_gid = $bk_guid[ $ics_key ];
509 1083 if ( in_array( $ics_uid, $bookings_exit_uid ) ) {
@@ -516,191 +1090,212 @@
516 1090 return $bk_array;
517 1091 }
518 1092
519 1093
520 - /** Check if bookings exist with specific sync UID
521 - *
522 - * @global type $wpdb
523 - * @param array of UID to check
524 - * @return array of exist UID
525 - */
526 - function wpbm_get_exist_bookings_gid( $uid_arr ) {
1094 +/**
1095 + * Return existing non-trashed Booking Calendar synchronization UIDs.
1096 + *
1097 + * Event UIDs originate in remote iCalendar content. Each UID is therefore
1098 + * bound through a separate SQL placeholder instead of being interpolated into
1099 + * the dynamic IN clause.
1100 + *
1101 + * @global wpdb $wpdb WordPress database abstraction object.
1102 + *
1103 + * @param array $uid_arr Event UIDs to check.
1104 + *
1105 + * @return array Existing synchronization UIDs.
1106 + */
1107 +function wpbm_get_exist_bookings_gid( $uid_arr ) {
1108 + if ( empty( $uid_arr ) || ! is_array( $uid_arr ) ) {
1109 + return array();
1110 + }
1111 +
1112 + $uid_values = array();
1113 + foreach ( $uid_arr as $uid_value ) {
1114 + if ( ! is_scalar( $uid_value ) ) {
1115 + continue;
1116 + }
1117 +
1118 + $uid_values[] = (string) $uid_value;
1119 + }
1120 +
1121 + if ( empty( $uid_values ) ) {
1122 + return array();
1123 + }
1124 +
1125 + global $wpdb;
1126 +
1127 + $uid_placeholders = implode( ', ', array_fill( 0, count( $uid_values ), '%s' ) );
1128 + $query_values = array_merge( $uid_values, array( 1 ) );
1129 +
1130 + // The placeholder list contains only fixed %s tokens; the table name uses WordPress's trusted prefix.
1131 + $sql = $wpdb->prepare( // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
1132 + "SELECT sync_gid FROM {$wpdb->prefix}booking WHERE sync_gid IN ({$uid_placeholders}) AND trash != %d",
1133 + $query_values
1134 + );
1135 +
1136 + if ( ! is_string( $sql ) ) {
1137 + return array();
1138 + }
1139 +
1140 + $existing_booking_uids = $wpdb->get_col( $sql );
1141 +
1142 + return is_array( $existing_booking_uids ) ? $existing_booking_uids : array();
1143 +}
527 1144
528 - $sql_sync_gid = implode( "','", $uid_arr );
529 1145
530 - $exist_bookings_guid = array();
531 -
532 - if ( ! empty( $sql_sync_gid ) ) {
533 - global $wpdb;
534 -
535 - $my_sql = "SELECT * FROM {$wpdb->prefix}booking WHERE sync_gid IN ('{$sql_sync_gid}') AND trash != 1"; //FixIn: 2.0.9.3
536 -//debuge($sql_sync_gid);
537 -//$my_sql = "SELECT * FROM wp_booking WHERE sync_gid IN ('[email protected]','[email protected]','[email protected]','[email protected]','[email protected]','[email protected]')";
538 -//debuge($my_sql);
539 - $exist_bookings = $wpdb->get_results( $my_sql );
540 -
541 -//debuge( 'wpbc_show_debug', array( 'SQL: ', $my_sql, $exist_bookings ) );
542 -
543 - foreach ( $exist_bookings as $bk ) {
544 - $exist_bookings_guid[] = $bk->sync_gid;
545 - }
546 - }
547 - return $exist_bookings_guid;
548 - }
549 -
550 -
551 1146 /** Trim number of events in array
552 - *
1147 + *
553 1148 * @param array $bk_array
554 1149 * @param array $shortcode
555 1150 * @return array
556 - */
1151 + */
557 1152 function wpbm_clear_events_by_count( $bk_array, $shortcode ) {
558 -
1153 +
559 1154 if ( empty( $shortcode['max'] ) ) {
560 1155 return $bk_array;
561 1156 } else {
562 1157 $max = intval( $shortcode['max'] );
563 1158 }
564 -
1159 +
565 1160 $bk_count= count( $bk_array );
566 1161 if ( $max > $bk_count )
567 1162 return $bk_array;
568 -
1163 +
569 1164 $cnt = 0;
570 1165 $events_arr = array();
571 -
1166 +
572 1167 foreach ( $bk_array as $ev_key => $ev_arr ) {
573 -
1168 +
574 1169 $events_arr[] = $ev_arr;
575 -
1170 +
576 1171 $cnt++;
577 - if ( $cnt >= $max )
1172 + if ( $cnt >= $max )
578 1173 break;
579 1174 }
580 -
1175 +
581 1176 return $events_arr;
582 -}
583 -
1177 +}
584 1178
585 1179
586 1180
1181 +
587 1182 /** Remove ONLY dates from event(s) that does not fit to filter parameters: FROM - UNTIL -- All events will exist here
588 - *
1183 + *
589 1184 * @param array $bk_array - array of events
590 1185 * @param array $shortcode
591 1186 * @return array - trimmed array
592 - */
1187 + */
593 1188 function wpbm_remove_dates_from_event_not_in_condition( $bk_array, $shortcode ) {
594 -
1189 +
595 1190 if ( ( ! isset( $shortcode['from'] ) ) && ( ! isset( $shortcode['until'] ) ) ) {
596 1191 return $bk_array;
597 1192 }
598 -
599 - // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
600 1193
1194 + // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
1195 +
601 1196 // F R O M
602 1197 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'from_offset' ] );
603 -
604 - if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
605 - if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
606 -
1198 +
1199 + if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
1200 + if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
1201 +
607 1202 $condition_from = wpbm_get_time_unix_from_param_offset( $shortcode['from'], $offset );
608 -
1203 +
609 1204 // </editor-fold>
610 -
611 1205
612 - // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
613 -
614 - // U N T I L
1206 +
1207 + // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
1208 +
1209 + // U N T I L
615 1210 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'until_offset' ] );
616 -
617 - if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
618 - if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
619 -
1211 +
1212 + if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
1213 + if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
1214 +
620 1215 $condition_until = wpbm_get_time_unix_from_param_offset( $shortcode['until'], $offset );
621 -
1216 +
622 1217 // </editor-fold>
623 -
624 -
1218 +
1219 +
625 1220 foreach ( $bk_array as $e_key => $ics_event ) {
626 -
1221 +
627 1222 $new_dates = array();
628 -//debuge($ics_event[ '_BOOKING_DATES' ] );
1223 +//debuge($ics_event[ '_BOOKING_DATES' ] );
629 1224 foreach ( $ics_event[ '_BOOKING_DATES' ] as $d_key => $ics_date ) {
630 -
1225 +
631 1226 $ics_date_unix = strtotime( $ics_date );
632 -//debuge( $d_key, $ics_date , array( $condition_from, $condition_until ) );
633 - if ( ( $condition_from <= $ics_date_unix ) && ( $condition_until >= $ics_date_unix ) ) {
634 -
1227 +//debuge( $d_key, $ics_date , array( $condition_from, $condition_until ) );
1228 + if ( ( $condition_from <= $ics_date_unix ) && ( $condition_until >= $ics_date_unix ) ) {
1229 +
635 1230 $new_dates[] = $ics_date;
636 1231 }
637 1232 }
638 -//debuge( $new_dates ); die;
1233 +//debuge( $new_dates ); die;
639 1234 $bk_array[ $e_key ][ '_BOOKING_DATES' ] = $new_dates;
640 1235 }
641 -
1236 +
642 1237 return $bk_array;
643 1238 }
644 1239
645 1240
646 1241 /** Skip events that does not fit to filter parameters: FROM - UNTIL
647 - *
1242 + *
648 1243 * @param array $bk_array - array of events
649 1244 * @param array $shortcode
650 1245 * @return array - trimmed array
651 - */
1246 + */
652 1247 function wpbm_clear_events_by_dates( $bk_array, $shortcode ) {
653 1248
654 1249 if ( ( ! isset( $shortcode['from'] ) ) && ( ! isset( $shortcode['until'] ) ) ) {
655 1250 return $bk_array;
656 1251 }
657 -
658 - // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
659 1252
1253 + // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
1254 +
660 1255 // F R O M
661 1256 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'from_offset' ] );
662 -
663 - if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
664 - if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
665 -
1257 +
1258 + if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
1259 + if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
1260 +
666 1261 $condition_from = wpbm_get_time_unix_from_param_offset( $shortcode['from'], $offset );
667 -
1262 +
668 1263 // </editor-fold>
669 -
670 1264
671 - // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
672 -
673 - // U N T I L
1265 +
1266 + // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
1267 +
1268 + // U N T I L
674 1269 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'until_offset' ] );
675 -
676 - if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
677 - if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
678 -
1270 +
1271 + if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
1272 + if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
1273 +
679 1274 $condition_until = wpbm_get_time_unix_from_param_offset( $shortcode['until'], $offset );
680 -
1275 +
681 1276 // </editor-fold>
682 1277
683 1278 // Conditional of Dates checking. TRUE - Remove event if al least 1 day not in conditional interval, FALSE - save event, if at leat one date in conditional interval
684 1279 if ( ! isset( $shortcode['is_all_dates_in'] ) )
685 - $is_all_dates_in_condition = true;
686 - else
687 - $is_all_dates_in_condition = (bool) $shortcode['is_all_dates_in'];
688 -
1280 + $is_all_dates_in_condition = true;
1281 + else
1282 + $is_all_dates_in_condition = (bool) $shortcode['is_all_dates_in'];
1283 +
689 1284 //debuge($condition_from, date_i18n('Y-m-d H:is',$condition_from));
690 1285 //debuge($condition_until, date_i18n('Y-m-d H:is',$condition_until));
691 1286 //debuge( (int) $is_all_dates_in_condition );
692 1287 //die;
693 1288 // Remove some events, that does not inside From | End time
694 - $remove_events_keys = array();
1289 + $remove_events_keys = array();
695 1290 foreach ( $bk_array as $e_key => $ics_event ) {
696 1291 foreach ( $ics_event[ '_BOOKING_DATES' ] as $d_key => $ics_date ) {
697 1292 $ics_date = strtotime( $ics_date );
698 -
1293 +
699 1294 if ( $is_all_dates_in_condition ) {
700 1295 // STRICT - ALL DATES
701 1296 if ( ( $condition_from > $ics_date ) || ($condition_until < $ics_date ) ) {
702 -
1297 +
703 1298 $remove_events_keys[] = $e_key;
704 1299 continue;
705 1300 }
706 1301 } else {
@@ -705,9 +1300,9 @@
705 1300 }
706 1301 } else {
707 1302 // AT LEAST 1 DATE
708 1303 if ( ( $condition_from <= $ics_date ) && ( $condition_until >= $ics_date ) ) {
709 -
1304 +
710 1305 $remove_events_keys = array_diff( $remove_events_keys, array( $e_key ) ); // Remove values "$e_key" from array
711 1306 break;
712 1307 } else {
713 1308 if ( ! in_array( $e_key, $remove_events_keys ) ) {
@@ -713,18 +1308,18 @@
713 1308 if ( ! in_array( $e_key, $remove_events_keys ) ) {
714 1309 $remove_events_keys[] = $e_key;
715 1310 }
716 1311 }
717 -
1312 +
718 1313 }
719 -
1314 +
720 1315 }
721 1316 }
722 -
1317 +
723 1318 // Remove them
724 1319 $remove_events_keys = array_unique( $remove_events_keys );
725 -
726 -//debuge( $bk_array, $remove_events_keys);
1320 +
1321 +//debuge( $bk_array, $remove_events_keys);
727 1322 foreach ( $remove_events_keys as $evnt_key ) {
728 1323 unset( $bk_array[ $evnt_key ] );
729 1324 }
730 1325
@@ -732,22 +1327,22 @@
732 1327 }
733 1328
734 1329
735 1330 /** Get time offset in seconds based on parameter
736 - *
1331 + *
737 1332 * @param string $offset_param 30s | 5m | 2h | 7d | just seconds
738 1333 * @return int
739 1334 */
740 1335 function wpbm_get_offset_unix_from_param( $offset_param ) {
741 -
742 - $offset = 0;
1336 +
1337 + $offset = 0;
743 1338 if ( ! empty( $offset_param ) ) {
744 -
1339 +
745 1340 $offset_type = substr( $offset_param, -1 );
746 1341 $offset_value = substr( $offset_param, 0, -1 );
747 -
1342 +
748 1343 switch ( $offset_type ) {
749 - case "s": // Seconds
1344 + case "s": // Seconds
750 1345 $offset = intval( $offset_value );
751 1346 break;
752 1347 case "m": // Minutes
753 1348 $offset = intval( $offset_value ) * 60 ;
@@ -759,65 +1354,65 @@
759 1354 $offset = intval( $offset_value ) * 86400 ;
760 1355 break;
761 1356 default:
762 1357 $offset = intval( $offset_value );
763 - }
764 - }
1358 + }
1359 + }
765 1360 return $offset;
766 1361 }
767 1362
768 1363
769 1364 /** Get Unix Time based on date parameter / condition and offset in seconds
770 - *
1365 + *
771 1366 * @param string $check_day - date type: // 'now' | 'today' | 'week' == 'week-start' | 'week-end' | 'month-start' | 'month-end' | 'year-start' | 'year-end' | 'any' == 'any-end' | 'any-start' | '2017-08-07'
772 1367 * @param int $offset_unix - offset in seconds
773 1368 * @return int - Unix time in seconds
774 1369 */
775 1370 function wpbm_get_time_unix_from_param_offset( $check_day, $offset_unix ) {
776 -
1371 +
777 1372 // $condition_end = strtotime ( $shortcode['until'] . ' +1 day - 1 second' );
778 -
1373 +
779 1374 $check_sql_day = explode( '-', $check_day );
780 1375 if ( count( $check_sql_day ) == 3 ) {
781 1376 $check_day = 'date';
782 - }
1377 + }
783 1378
784 1379 switch ( $check_day ) {
785 - // Don't just use time() for 'now', as this will effectively make cache duration 1 second.
1380 + // Don't just use time() for 'now', as this will effectively make cache duration 1 second.
786 1381 // Instead set to previous minute. Events in Google Calendar cannot be set to precision of seconds anyway
787 1382 case 'now':
788 -
789 - //$time_unix = strtotime( date_i18n( 'Y-m-d H:i:s' ) ) + $offset_unix; // "Now" in "Timezone" from WordPress > Settings
790 - $time_unix = mktime( date_i18n( 'H' ), date_i18n( 'i' ), 0, date_i18n( 'm' ), date_i18n( 'j' ), date_i18n( 'Y' ) ) + $offset_unix ;
1383 +
1384 + //$time_unix = strtotime( date_i18n( 'Y-m-d H:i:s' ) ) + $offset_unix; // "Now" in "Timezone" from WordPress > Settings
1385 + $time_unix = mktime( date_i18n( 'H' ), date_i18n( 'i' ), 0, date_i18n( 'm' ), date_i18n( 'j' ), date_i18n( 'Y' ) ) + $offset_unix ;
791 1386 break;
792 1387 case 'today':
793 - //$time_unix = strtotime( date_i18n( 'Y-m-d 00:00:00' ) ) + $offset_unix; // "Today 00:00" in "Timezone" from WordPress > Settings
1388 + //$time_unix = strtotime( date_i18n( 'Y-m-d 00:00:00' ) ) + $offset_unix; // "Today 00:00" in "Timezone" from WordPress > Settings
794 1389 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), date_i18n( 'j' ), date_i18n( 'Y' ) ) + $offset_unix ;
795 1390 break;
796 1391 case 'week':
797 1392 case 'week-start':
798 -
799 - $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
800 - if ( empty( $start_of_week ) )
1393 +
1394 + $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
1395 + if ( empty( $start_of_week ) )
801 1396 $start_of_week = 0;
802 -
1397 +
803 1398 $start_day = date_i18n( 'w' ) - $start_of_week ;
804 - if ( $start_day < 0 )
1399 + if ( $start_day < 0 )
805 1400 $start_day = 7 + $start_day;
806 1401
807 1402 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), ( date_i18n( 'j' ) - $start_day ), date_i18n( 'Y' ) ) + $offset_unix ;
808 1403 break;
809 1404 case 'week-end':
810 -
1405 +
811 1406 $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
812 - if ( empty( $start_of_week ) )
1407 + if ( empty( $start_of_week ) )
813 1408 $start_of_week = 0;
814 -
1409 +
815 1410 $start_day = date_i18n( 'w' ) - $start_of_week ;
816 - if ( $start_day < 0 )
817 - $start_day = 7 + $start_day;
1411 + if ( $start_day < 0 )
1412 + $start_day = 7 + $start_day;
818 1413 // minus 1 second -- prevent of events exactly == start Next period
819 - $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), ( date_i18n( 'j' ) - $start_day + 7 ), date_i18n( 'Y' ) ) + $offset_unix - 1;
1414 + $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), ( date_i18n( 'j' ) - $start_day + 7 ), date_i18n( 'Y' ) ) + $offset_unix - 1;
820 1415 break;
821 1416 case 'month-start':
822 1417 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), 1, date_i18n( 'Y' ) ) + $offset_unix ;
823 1418 break;
@@ -825,12 +1420,12 @@
825 1420 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ) + 1, 1, date_i18n( 'Y' ) ) + $offset_unix - 1; // minus 1 second -- prevent of events exactly == start Next period
826 1421 break;
827 1422 case 'year-start':
828 1423 $time_unix = mktime( 0, 0, 0, 1, 1, date_i18n( 'Y' ) ) + $offset_unix ;
829 - break;
1424 + break;
830 1425 case 'year-end':
831 1426 $time_unix = mktime( 0, 0, 0, 1, 1, date_i18n( 'Y' ) + 1 ) + $offset_unix - 1; // minus 1 second -- prevent of events exactly == start Next period
832 - break;
1427 + break;
833 1428 case 'date':
834 1429
835 1430 if ( intval( $check_sql_day[0] ) - intval( date('Y') ) > 15 ) { //FixIn m.2.0.1
836 1431 $time_unix =2145916800;
@@ -837,12 +1432,12 @@
837 1432 } else {
838 1433 $time_unix = mktime( 0, 0, 0, intval( $check_sql_day[1] ), intval( $check_sql_day[2] ), intval( $check_sql_day[0] ) );
839 1434 }
840 1435 break;
841 - case 'any-start':
1436 + case 'any-start':
842 1437 $time_unix = 0; // any - 1970-01-01 00:00
843 1438 break;
844 - case 'any-end':
1439 + case 'any-end':
845 1440 $time_unix = 2145916800; //any - 2038-01-01 00:00
846 1441 break;
847 1442 default:
848 1443 $time_unix = 2145916800; //any END - 2038-01-01 00:00
@@ -847,9 +1442,9 @@
847 1442 default:
848 1443 $time_unix = 2145916800; //any END - 2038-01-01 00:00
849 1444 }
850 1445
851 -//debuge($time_unix, date_i18n('Y-m-d H:i:s (D)',$time_unix));
1446 +//debuge($time_unix, date_i18n('Y-m-d H:i:s (D)',$time_unix));
852 1447
853 1448
854 1449 return $time_unix;
855 1450 }
@@ -876,9 +1471,9 @@
876 1471 'wh_trash' => 'any',
877 1472 'wh_modification_dateprior' => 1,
878 1473 'wh_modification_date' => 3,
879 1474 'wh_pay_status' => 'all',
880 - 'view_mode' => 'vm_listing',
1475 +
881 1476 'wh_booking_type' => '-999',
882 1477 'wh_keyword' => $uid
883 1478 );
884 1479
@@ -894,11 +1489,11 @@
894 1489
895 1490 foreach ( $res as $booking_obj ) {
896 1491 $booking_id[] = $booking_obj->booking_id;
897 1492 }
898 -
1493 +
899 1494 //debuge('$bookings_arr',$res);
900 1495
901 1496 }
902 1497
903 1498 return implode( ',', $booking_id );
904 -}
1499 +}