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 +848 -252 2.0.13 → 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,81 +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' ]
141 + $shortcode[ $param_name ] = str_replace( '&amp;', '&', $shortcode[ $param_name ] ); //FixIn: 2.0.14.2
88 142 break;
89 143
90 144 case 'import_conditions':
91 - $shortcode[ $param_name ] = esc_attr( $param_value ); // $shortcode[ 'resource_id' ]
145 + $shortcode[ $param_name ] = esc_attr( $param_value ); // $shortcode[ 'resource_id' ]
92 146 break;
93 -
94 - case 'resource_id':
95 - $shortcode[ $param_name ] = intval($param_value ); // $shortcode[ 'resource_id' ]
147 +
148 + case 'resource_id':
149 + $shortcode[ $param_name ] = intval($param_value ); // $shortcode[ 'resource_id' ]
96 150 break;
97 -
151 +
98 152 case 'from': // 'now', 'today', 'week', 'month-start', 'month-end', 'year-start', 'any', 'date' = 2017-08-07
99 153 $shortcode[ $param_name ] = $param_value;
100 154 break;
101 -
155 +
102 156 case 'from_offset': // 5d, 10h, 5m, 30s -- if from: { 'now', 'today', 'week', 'month-start', 'month-end', 'year-start' }
103 - $shortcode[ $param_name ] = $param_value;
157 + $shortcode[ $param_name ] = $param_value;
104 158 break;
105 -
159 +
106 160 case 'until': // 'now', 'today', 'week', 'month-start', 'month-end', 'year-end', 'any', 'date' = 2017-08-07
107 161 $shortcode[ $param_name ] = $param_value;
108 162 break;
109 -
163 +
110 164 case 'until_offset': // 5d, 10h, 5m, 30s -- if until: { 'now', 'today', 'week', 'month-start', 'month-end', 'year-end' }
111 - $shortcode[ $param_name ] = $param_value;
165 + $shortcode[ $param_name ] = $param_value;
112 166 break;
113 -
114 - case 'max':
115 - $shortcode[ $param_name ] = intval( $param_value );
167 +
168 + case 'max':
169 + $shortcode[ $param_name ] = intval( $param_value );
116 170 break;
117 -
171 +
118 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
119 - $shortcode[ $param_name ] = intval( $param_value );
173 + $shortcode[ $param_name ] = intval( $param_value );
120 174 break;
121 -
122 -
175 +
176 +
123 177 default:
124 178 $shortcode[ $param_name ] = $param_value;
125 179 break;
126 - }
127 - }
180 + }
181 + }
128 182 $shortcode = wp_parse_args( $shortcode, $defaults );
129 183 // </editor-fold>
130 184
185 + // <editor-fold defaultstate="collapsed" desc=" Notice - Import Parameters | Error No URL" >
131 186
132 - 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
133 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>
134 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 +
135 661 //debuge($shortcode);
136 - // <editor-fold defaultstate="collapsed" desc=" Notice - Import Parameters | Error No URL" >
137 -
662 + // <editor-fold defaultstate="collapsed" desc=" Notice - Import Parameters | Error No URL" >
663 +
138 664 do_action( 'wpbc_show_debug', array( 'Import Parameters' , $shortcode ) ); // S_Y_S_T_E_M L_O_G
139 665
140 - if ( empty( $shortcode[ 'url' ] ) ) {
141 - 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
142 668 return false;
143 - }
669 + }
144 670 // </editor-fold>
145 -
146 671
147 - ///////////////////////////////////////////////////////////////////// - Get, Parse ICS Feed
148 -
672 + ///////////////////////////////////////////////////////////////////// - Get, Parse ICS Feed
673 +
149 674 $ics_array = wpbm_ics_file_to_array( $shortcode[ 'url' ] );
150 675
151 - // <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 " >
152 677 do_action( 'wpbc_show_debug', array( 'Imported data' , $ics_array) ); // S_Y_S_T_E_M L_O_G
153 678
154 679 // If Error
155 680 if ( is_wp_error( $ics_array ) ) {
156 -
157 - $error_message = $ics_array->get_error_message();
158 - 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
159 684 return false;
160 685 }
161 686
162 687 //FixIn: 2.0.7.3
@@ -165,17 +690,22 @@
165 690 $ics_array_events_num = count( $ics_array[ 'events' ] );
166 691 }
167 692 do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
168 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>' )
169 - , 'info', 5000 );
694 + , 'info', 5000 );
170 695 // </editor-fold>
171 -
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 +
172 702 $bk_array = array();
173 - // Get Only '_BOOKING...' field from ICS array
174 - if ( $ics_array !== false ) {
175 - $bk_array = wpbm_get_booking_fields_from_ics_array( $ics_array[ 'events' ] );
176 - }
177 -
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 +
178 708 do_action( 'wpbc_show_debug', array( 'Imported Events', $bk_array ) ); // S_Y_S_T_E_M L_O_G
179 709
180 710
181 711 //FixIn: 2.0.6.1 - Set timezone frrom Booking > Settings > Sync page for booking listing shortcode
@@ -216,30 +746,37 @@
216 746
217 747 ///////////////////////////////////////////////////////////////////// - Check if these EVENTS was imported before or NOT
218 748
219 749 $booking_ics_force_import = get_bk_option( 'booking_ics_force_import' ); //FixIn: 2.0.10.1
220 -
221 - if ( 'On' !== $booking_ics_force_import ) {
222 - $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 + }
223 761 }
224 762
225 -
226 763 // <editor-fold defaultstate="collapsed" desc=" Notice - if events was imported previously | Already ALL Imported " >
227 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
228 765
229 766 if ( empty( $bk_array ) ) {
230 -
231 - do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
232 - , '<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> '
233 770 . sprintf( __( 'No any new events to import! These events was import previously, already.', 'booking-manager' ), '<strong>' . count( $bk_array ) . '</strong>' )
234 - , 'warning', 3000 );
235 - return 0;
771 + , 'warning', 3000 );
772 + return 0;
236 773 }
237 774 // </editor-fold>
238 -
239 -
240 - ///////////////////////////////////////////////////////////////////// - Skip events that does not fit to filter parameters: FROM - UNTIL
241 -
775 +
776 +
777 + ///////////////////////////////////////////////////////////////////// - Skip events that does not fit to filter parameters: FROM - UNTIL
778 +
242 779 // $bk_array = wpbm_clear_events_by_dates( $bk_array, $shortcode );
243 780
244 781
245 782 // Sort Events
@@ -244,55 +781,87 @@
244 781
245 782 // Sort Events
246 783 $bk_array = wpbm_sort_events_by( $bk_array );
247 784
248 - // Filter By Dates - "From - Until"
785 + // Filter By Dates - "From - Until"
249 786 $bk_array = wpbm_clear_events_by_dates( $bk_array, $shortcode );
250 787
251 - // Filter events by - "Max"
788 + // Filter events by - "Max"
252 789 $bk_array = wpbm_clear_events_by_count( $bk_array, $shortcode );
253 790
254 -
255 - // <editor-fold defaultstate="collapsed" desc=" Notice - Creation of N bookings " >
791 +
792 + // <editor-fold defaultstate="collapsed" desc=" Notice - Creation of N bookings " >
256 793 do_action( 'wpbc_admin_show_top_notice' // N_O_T_I_C_E in H_E_A_D_E_R
257 794 , sprintf( __( 'Imported of %s bookings', 'booking-manager' ), '<strong>' . count( $bk_array ) . '</strong>' )
258 - , 'info', 3000 );
259 -
795 + , 'info', 3000 );
796 +
260 797 do_action( 'wpbc_show_debug', array( 'Create bookings after filtering', $bk_array ) ); // S_Y_S_T_E_M L_O_G
261 798 // </editor-fold>
262 -
799 +
263 800 ///////////////////////////////////////////////////////////////////// - Loop events > C r e a t e B o o k i n g s
264 801
265 - // Get assigning fields for SUMMARY, DESCRIPTION, LOCATION
802 + // Get assigning fields for SUMMARY, DESCRIPTION, LOCATION
266 803 $assigned_fields_arr = WPBM_create_bookings_from_events::get_assigned_form_fields();
267 -
804 +
268 805 $booking_added_num = 0;
269 -
806 +
270 807 foreach ( $bk_array as $ics_event) {
271 808
272 809 //FixIn: 2.0.5.2
273 810 //FixIn: 8.1.3.29
274 - if ( ( class_exists( 'wpdev_bk_biz_s' ) )
275 - && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
276 - && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
277 - && ( get_bk_option( 'booking_ics_import_append_checkout_day' ) !== 'Off' )
278 - ) {
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
279 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
280 818 // Later system is adding check in/out times from Booking Calendar to this event
281 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 +
282 836 $ics_event_check_out = strtotime( $ics_event_check_out );
283 837 $ics_event_check_out = strtotime( '+1 day', $ics_event_check_out );
284 - $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 );
285 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 + }
286 847 }
287 848
288 849 $booking_data = array();
289 850
290 - $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 + }
291 860 $booking_dates_unix = array_map( 'strtotime', $ics_event[ '_BOOKING_DATES' ] ); // Array ( [0] => 1498262400 [1] => 1498348800 )
292 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' )
293 -//debuge('$ics_event, $simple_booking_dates', $ics_event, $simple_booking_dates);
294 862
863 +
295 864 //FixIn: 8.1.3.29
296 865 if ( ( class_exists( 'wpdev_bk_biz_s' ) )
297 866 && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
298 867 && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
@@ -323,9 +892,9 @@
323 892
324 893 $booking = array(
325 894 'dates' => $simple_booking_dates // array( '2017-06-24', '2017-06-24', '2017-06-25', '2017-06-26' )
326 895 , 'data' => array()
327 - , 'resource_id' => $shortcode[ 'resource_id' ]
896 + , 'resource_id' => $shortcode[ 'resource_id' ]
328 897 );
329 898
330 899
331 900 $bk_data = array();
@@ -332,17 +901,17 @@
332 901 foreach ( $assigned_fields_arr as $assigned_field ) {
333 902
334 903 switch ( $assigned_field[ 'ics_field_name' ] ) {
335 904
336 - case 'title':
905 + case 'title':
337 906 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_SUMMARY' ] ) );
338 907 break;
339 908
340 - case 'description':
909 + case 'description':
341 910 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_DESCRIPTION' ] ) );
342 911 break;
343 912
344 - case 'where':
913 + case 'where':
345 914 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_LOCATION' ] ) );
346 915 break;
347 916
348 917 default:
@@ -350,9 +919,9 @@
350 919 }
351 920 }
352 921
353 922 // Email
354 - $home_url = explode( '://', home_url() );
923 + $home_url = explode( '://', home_url() );
355 924 //if (count($home_url>0)) //FixIn: 2.0.3.2
356 925 // $email = 'ics@' . $home_url[1];
357 926 //else
358 927 $email = get_option ( 'admin_email' );
@@ -387,26 +956,32 @@
387 956 // $ics_event[ '_BOOKING_SUMMARY' ]; // Event (timezone Pacific GMT-07:00)
388 957 // $ics_event[ '_BOOKING_DESCRIPTION' ]; // 8/7/2017 1:00pm TO 3:30pm 8/8/2017 (GMT-07:00) Pacific Time
389 958 // $ics_event[ '_BOOKING_LOCATION' ]; // Pacific Coast Highway, Pacific Coast Hwy, Los Angeles, CA, USA
390 959 // $ics_event[ '_BOOKING_UID' ]; // [email protected]
391 - // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
960 + // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
392 961 */
393 -
962 +
394 963 add_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10, 5 );
395 -
964 +
396 965 // Do not overupdate "child booking resources" when saving bookings to parent booking resource. Just skip this checking
397 - 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 );
398 967
399 - // Check dates availability and process
968 + // Check dates availability and process
400 969 // only if dates available in specific booking resource!
401 - if ( $shortcode[ 'import_conditions' ] == 'if_dates_free' )
402 - $is_dates_booked = wpbc_api_is_dates_booked( $booking[ 'dates' ], $booking[ 'resource_id' ] );
403 - 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{
404 977 $is_dates_booked = false;
978 + }
405 979
980 +
406 981 if ( ! $is_dates_booked ) {
407 -
408 - $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 );
409 984 $booking_added_num++;
410 985
411 986 //if ( ( defined( 'WP_BK_AUTO_APPROVE_WHEN_IMPORT_GCAL' ) ) && ( WP_BK_AUTO_APPROVE_WHEN_IMPORT_GCAL ) ){ // Auto approve booking if imported
412 987 if ( ( function_exists( 'get_bk_option' )) && ( get_bk_option( 'booking_auto_approve_bookings_when_import' ) == 'On' ) ) { //FixIn: 8.1.3.27
@@ -445,9 +1020,9 @@
445 1020 } else {
446 1021
447 1022 do_action( 'wpbc_show_debug', // S_Y_S_T_E_M L_O_G
448 1023 sprintf ( 'Event was not create becausse dates %s already booked in booking resource ID = %d'
449 - , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
1024 + , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
450 1025 }
451 1026
452 1027 remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
453 1028 remove_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10 );
@@ -452,16 +1027,16 @@
452 1027 remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
453 1028 remove_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10 );
454 1029
455 1030 // Remove previously saved dates to our 'Static' class.
456 - WPBM_create_bookings_from_events::erase_ics_dates();
1031 + WPBM_create_bookings_from_events::erase_ics_dates();
457 1032 }
458 -
459 - return $booking_added_num;
1033 +
1034 + return $booking_added_num;
460 1035 }
461 -add_action( 'wpbm_ics_import_start', 'wpbm_ics_import_start', 10, 1 );
462 1036
463 1037
1038 +
464 1039 ////////////////////////////////////////////////////////////////////////////////////////////
465 1040 // Booking Calendar support functions
466 1041 ////////////////////////////////////////////////////////////////////////////////////////////
467 1042
@@ -467,9 +1042,9 @@
467 1042
468 1043
469 1044 /** Clear array of Events from events that already exist in Booking table
470 1045 * Check UID and GUID sync paramaters
471 - *
1046 + *
472 1047 * @param array $bk_array - array of events
473 1048 * @return array - trimmed array
474 1049 */
475 1050 function wpbm_clear_events_from_exist_bookings( $bk_array ) {
@@ -476,11 +1051,11 @@
476 1051
477 1052 $bk_uid = $bk_guid = array();
478 1053 // GET array of UID for imported bookings
479 1054 foreach ( $bk_array as $ics_key => $ics_event) {
480 -
1055 +
481 1056 $bk_uid[ $ics_key ] = $ics_event[ '_BOOKING_UID' ];
482 -
1057 +
483 1058 if ( strpos( $ics_event[ '_BOOKING_UID' ], '@google.com') !== false ) {
484 1059 // [email protected] - ID of event from ICS
485 1060 // 15ig8t0i739kajgjc8ekc386dt_20170815 - ID of event during import from Google Calendar (probabaly created by ID before @ + first date)
486 1061
@@ -485,24 +1060,24 @@
485 1060 // 15ig8t0i739kajgjc8ekc386dt_20170815 - ID of event during import from Google Calendar (probabaly created by ID before @ + first date)
486 1061
487 1062 $bk_guid[ $ics_key ] = str_replace( '@google.com'
488 1063 , date_i18n( '_Ymd', strtotime( $ics_event[ '_BOOKING_DATES' ][0] ) )
489 - , $ics_event[ '_BOOKING_UID' ]
1064 + , $ics_event[ '_BOOKING_UID' ]
490 1065 );
491 - }
492 - }
1066 + }
1067 + }
493 1068 $bookings_check_uid = array_merge( $bk_uid,$bk_guid );
494 -
1069 +
495 1070 $bookings_exit_uid = wpbm_get_exist_bookings_gid( $bookings_check_uid );
496 1071
497 1072 // Remove events which already exist
498 1073 foreach ( $bk_uid as $ics_key => $ics_uid ) {
499 -
1074 +
500 1075 // If exist UID remove it from event
501 1076 if ( in_array( $ics_uid, $bookings_exit_uid ) ) {
502 1077 unset( $bk_array[ $ics_key ] );
503 1078 }
504 -
1079 +
505 1080 // If we are having such GUID and it exist, then remove ir
506 1081 if ( isset( $bk_guid[ $ics_key ] ) ) {
507 1082 $ics_gid = $bk_guid[ $ics_key ];
508 1083 if ( in_array( $ics_uid, $bookings_exit_uid ) ) {
@@ -515,191 +1090,212 @@
515 1090 return $bk_array;
516 1091 }
517 1092
518 1093
519 - /** Check if bookings exist with specific sync UID
520 - *
521 - * @global type $wpdb
522 - * @param array of UID to check
523 - * @return array of exist UID
524 - */
525 - 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 +}
526 1144
527 - $sql_sync_gid = implode( "','", $uid_arr );
528 1145
529 - $exist_bookings_guid = array();
530 -
531 - if ( ! empty( $sql_sync_gid ) ) {
532 - global $wpdb;
533 -
534 - $my_sql = "SELECT * FROM {$wpdb->prefix}booking WHERE sync_gid IN ('{$sql_sync_gid}') AND trash != 1"; //FixIn: 2.0.9.3
535 -//debuge($sql_sync_gid);
536 -//$my_sql = "SELECT * FROM wp_booking WHERE sync_gid IN ('[email protected]','[email protected]','[email protected]','[email protected]','[email protected]','[email protected]')";
537 -//debuge($my_sql);
538 - $exist_bookings = $wpdb->get_results( $my_sql );
539 -
540 -//debuge( 'wpbc_show_debug', array( 'SQL: ', $my_sql, $exist_bookings ) );
541 -
542 - foreach ( $exist_bookings as $bk ) {
543 - $exist_bookings_guid[] = $bk->sync_gid;
544 - }
545 - }
546 - return $exist_bookings_guid;
547 - }
548 -
549 -
550 1146 /** Trim number of events in array
551 - *
1147 + *
552 1148 * @param array $bk_array
553 1149 * @param array $shortcode
554 1150 * @return array
555 - */
1151 + */
556 1152 function wpbm_clear_events_by_count( $bk_array, $shortcode ) {
557 -
1153 +
558 1154 if ( empty( $shortcode['max'] ) ) {
559 1155 return $bk_array;
560 1156 } else {
561 1157 $max = intval( $shortcode['max'] );
562 1158 }
563 -
1159 +
564 1160 $bk_count= count( $bk_array );
565 1161 if ( $max > $bk_count )
566 1162 return $bk_array;
567 -
1163 +
568 1164 $cnt = 0;
569 1165 $events_arr = array();
570 -
1166 +
571 1167 foreach ( $bk_array as $ev_key => $ev_arr ) {
572 -
1168 +
573 1169 $events_arr[] = $ev_arr;
574 -
1170 +
575 1171 $cnt++;
576 - if ( $cnt >= $max )
1172 + if ( $cnt >= $max )
577 1173 break;
578 1174 }
579 -
1175 +
580 1176 return $events_arr;
581 -}
582 -
1177 +}
583 1178
584 1179
585 1180
1181 +
586 1182 /** Remove ONLY dates from event(s) that does not fit to filter parameters: FROM - UNTIL -- All events will exist here
587 - *
1183 + *
588 1184 * @param array $bk_array - array of events
589 1185 * @param array $shortcode
590 1186 * @return array - trimmed array
591 - */
1187 + */
592 1188 function wpbm_remove_dates_from_event_not_in_condition( $bk_array, $shortcode ) {
593 -
1189 +
594 1190 if ( ( ! isset( $shortcode['from'] ) ) && ( ! isset( $shortcode['until'] ) ) ) {
595 1191 return $bk_array;
596 1192 }
597 -
598 - // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
599 1193
1194 + // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
1195 +
600 1196 // F R O M
601 1197 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'from_offset' ] );
602 -
603 - if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
604 - if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
605 -
1198 +
1199 + if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
1200 + if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
1201 +
606 1202 $condition_from = wpbm_get_time_unix_from_param_offset( $shortcode['from'], $offset );
607 -
1203 +
608 1204 // </editor-fold>
609 -
610 1205
611 - // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
612 -
613 - // 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
614 1210 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'until_offset' ] );
615 -
616 - if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
617 - if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
618 -
1211 +
1212 + if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
1213 + if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
1214 +
619 1215 $condition_until = wpbm_get_time_unix_from_param_offset( $shortcode['until'], $offset );
620 -
1216 +
621 1217 // </editor-fold>
622 -
623 -
1218 +
1219 +
624 1220 foreach ( $bk_array as $e_key => $ics_event ) {
625 -
1221 +
626 1222 $new_dates = array();
627 -//debuge($ics_event[ '_BOOKING_DATES' ] );
1223 +//debuge($ics_event[ '_BOOKING_DATES' ] );
628 1224 foreach ( $ics_event[ '_BOOKING_DATES' ] as $d_key => $ics_date ) {
629 -
1225 +
630 1226 $ics_date_unix = strtotime( $ics_date );
631 -//debuge( $d_key, $ics_date , array( $condition_from, $condition_until ) );
632 - if ( ( $condition_from <= $ics_date_unix ) && ( $condition_until >= $ics_date_unix ) ) {
633 -
1227 +//debuge( $d_key, $ics_date , array( $condition_from, $condition_until ) );
1228 + if ( ( $condition_from <= $ics_date_unix ) && ( $condition_until >= $ics_date_unix ) ) {
1229 +
634 1230 $new_dates[] = $ics_date;
635 1231 }
636 1232 }
637 -//debuge( $new_dates ); die;
1233 +//debuge( $new_dates ); die;
638 1234 $bk_array[ $e_key ][ '_BOOKING_DATES' ] = $new_dates;
639 1235 }
640 -
1236 +
641 1237 return $bk_array;
642 1238 }
643 1239
644 1240
645 1241 /** Skip events that does not fit to filter parameters: FROM - UNTIL
646 - *
1242 + *
647 1243 * @param array $bk_array - array of events
648 1244 * @param array $shortcode
649 1245 * @return array - trimmed array
650 - */
1246 + */
651 1247 function wpbm_clear_events_by_dates( $bk_array, $shortcode ) {
652 1248
653 1249 if ( ( ! isset( $shortcode['from'] ) ) && ( ! isset( $shortcode['until'] ) ) ) {
654 1250 return $bk_array;
655 1251 }
656 -
657 - // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
658 1252
1253 + // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
1254 +
659 1255 // F R O M
660 1256 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'from_offset' ] );
661 -
662 - if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
663 - if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
664 -
1257 +
1258 + if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
1259 + if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
1260 +
665 1261 $condition_from = wpbm_get_time_unix_from_param_offset( $shortcode['from'], $offset );
666 -
1262 +
667 1263 // </editor-fold>
668 -
669 1264
670 - // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
671 -
672 - // 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
673 1269 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'until_offset' ] );
674 -
675 - if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
676 - if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
677 -
1270 +
1271 + if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
1272 + if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
1273 +
678 1274 $condition_until = wpbm_get_time_unix_from_param_offset( $shortcode['until'], $offset );
679 -
1275 +
680 1276 // </editor-fold>
681 1277
682 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
683 1279 if ( ! isset( $shortcode['is_all_dates_in'] ) )
684 - $is_all_dates_in_condition = true;
685 - else
686 - $is_all_dates_in_condition = (bool) $shortcode['is_all_dates_in'];
687 -
1280 + $is_all_dates_in_condition = true;
1281 + else
1282 + $is_all_dates_in_condition = (bool) $shortcode['is_all_dates_in'];
1283 +
688 1284 //debuge($condition_from, date_i18n('Y-m-d H:is',$condition_from));
689 1285 //debuge($condition_until, date_i18n('Y-m-d H:is',$condition_until));
690 1286 //debuge( (int) $is_all_dates_in_condition );
691 1287 //die;
692 1288 // Remove some events, that does not inside From | End time
693 - $remove_events_keys = array();
1289 + $remove_events_keys = array();
694 1290 foreach ( $bk_array as $e_key => $ics_event ) {
695 1291 foreach ( $ics_event[ '_BOOKING_DATES' ] as $d_key => $ics_date ) {
696 1292 $ics_date = strtotime( $ics_date );
697 -
1293 +
698 1294 if ( $is_all_dates_in_condition ) {
699 1295 // STRICT - ALL DATES
700 1296 if ( ( $condition_from > $ics_date ) || ($condition_until < $ics_date ) ) {
701 -
1297 +
702 1298 $remove_events_keys[] = $e_key;
703 1299 continue;
704 1300 }
705 1301 } else {
@@ -704,9 +1300,9 @@
704 1300 }
705 1301 } else {
706 1302 // AT LEAST 1 DATE
707 1303 if ( ( $condition_from <= $ics_date ) && ( $condition_until >= $ics_date ) ) {
708 -
1304 +
709 1305 $remove_events_keys = array_diff( $remove_events_keys, array( $e_key ) ); // Remove values "$e_key" from array
710 1306 break;
711 1307 } else {
712 1308 if ( ! in_array( $e_key, $remove_events_keys ) ) {
@@ -712,18 +1308,18 @@
712 1308 if ( ! in_array( $e_key, $remove_events_keys ) ) {
713 1309 $remove_events_keys[] = $e_key;
714 1310 }
715 1311 }
716 -
1312 +
717 1313 }
718 -
1314 +
719 1315 }
720 1316 }
721 -
1317 +
722 1318 // Remove them
723 1319 $remove_events_keys = array_unique( $remove_events_keys );
724 -
725 -//debuge( $bk_array, $remove_events_keys);
1320 +
1321 +//debuge( $bk_array, $remove_events_keys);
726 1322 foreach ( $remove_events_keys as $evnt_key ) {
727 1323 unset( $bk_array[ $evnt_key ] );
728 1324 }
729 1325
@@ -731,22 +1327,22 @@
731 1327 }
732 1328
733 1329
734 1330 /** Get time offset in seconds based on parameter
735 - *
1331 + *
736 1332 * @param string $offset_param 30s | 5m | 2h | 7d | just seconds
737 1333 * @return int
738 1334 */
739 1335 function wpbm_get_offset_unix_from_param( $offset_param ) {
740 -
741 - $offset = 0;
1336 +
1337 + $offset = 0;
742 1338 if ( ! empty( $offset_param ) ) {
743 -
1339 +
744 1340 $offset_type = substr( $offset_param, -1 );
745 1341 $offset_value = substr( $offset_param, 0, -1 );
746 -
1342 +
747 1343 switch ( $offset_type ) {
748 - case "s": // Seconds
1344 + case "s": // Seconds
749 1345 $offset = intval( $offset_value );
750 1346 break;
751 1347 case "m": // Minutes
752 1348 $offset = intval( $offset_value ) * 60 ;
@@ -758,65 +1354,65 @@
758 1354 $offset = intval( $offset_value ) * 86400 ;
759 1355 break;
760 1356 default:
761 1357 $offset = intval( $offset_value );
762 - }
763 - }
1358 + }
1359 + }
764 1360 return $offset;
765 1361 }
766 1362
767 1363
768 1364 /** Get Unix Time based on date parameter / condition and offset in seconds
769 - *
1365 + *
770 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'
771 1367 * @param int $offset_unix - offset in seconds
772 1368 * @return int - Unix time in seconds
773 1369 */
774 1370 function wpbm_get_time_unix_from_param_offset( $check_day, $offset_unix ) {
775 -
1371 +
776 1372 // $condition_end = strtotime ( $shortcode['until'] . ' +1 day - 1 second' );
777 -
1373 +
778 1374 $check_sql_day = explode( '-', $check_day );
779 1375 if ( count( $check_sql_day ) == 3 ) {
780 1376 $check_day = 'date';
781 - }
1377 + }
782 1378
783 1379 switch ( $check_day ) {
784 - // 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.
785 1381 // Instead set to previous minute. Events in Google Calendar cannot be set to precision of seconds anyway
786 1382 case 'now':
787 -
788 - //$time_unix = strtotime( date_i18n( 'Y-m-d H:i:s' ) ) + $offset_unix; // "Now" in "Timezone" from WordPress > Settings
789 - $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 ;
790 1386 break;
791 1387 case 'today':
792 - //$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
793 1389 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), date_i18n( 'j' ), date_i18n( 'Y' ) ) + $offset_unix ;
794 1390 break;
795 1391 case 'week':
796 1392 case 'week-start':
797 -
798 - $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
799 - 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 ) )
800 1396 $start_of_week = 0;
801 -
1397 +
802 1398 $start_day = date_i18n( 'w' ) - $start_of_week ;
803 - if ( $start_day < 0 )
1399 + if ( $start_day < 0 )
804 1400 $start_day = 7 + $start_day;
805 1401
806 1402 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), ( date_i18n( 'j' ) - $start_day ), date_i18n( 'Y' ) ) + $offset_unix ;
807 1403 break;
808 1404 case 'week-end':
809 -
1405 +
810 1406 $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
811 - if ( empty( $start_of_week ) )
1407 + if ( empty( $start_of_week ) )
812 1408 $start_of_week = 0;
813 -
1409 +
814 1410 $start_day = date_i18n( 'w' ) - $start_of_week ;
815 - if ( $start_day < 0 )
816 - $start_day = 7 + $start_day;
1411 + if ( $start_day < 0 )
1412 + $start_day = 7 + $start_day;
817 1413 // minus 1 second -- prevent of events exactly == start Next period
818 - $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;
819 1415 break;
820 1416 case 'month-start':
821 1417 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), 1, date_i18n( 'Y' ) ) + $offset_unix ;
822 1418 break;
@@ -824,12 +1420,12 @@
824 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
825 1421 break;
826 1422 case 'year-start':
827 1423 $time_unix = mktime( 0, 0, 0, 1, 1, date_i18n( 'Y' ) ) + $offset_unix ;
828 - break;
1424 + break;
829 1425 case 'year-end':
830 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
831 - break;
1427 + break;
832 1428 case 'date':
833 1429
834 1430 if ( intval( $check_sql_day[0] ) - intval( date('Y') ) > 15 ) { //FixIn m.2.0.1
835 1431 $time_unix =2145916800;
@@ -836,12 +1432,12 @@
836 1432 } else {
837 1433 $time_unix = mktime( 0, 0, 0, intval( $check_sql_day[1] ), intval( $check_sql_day[2] ), intval( $check_sql_day[0] ) );
838 1434 }
839 1435 break;
840 - case 'any-start':
1436 + case 'any-start':
841 1437 $time_unix = 0; // any - 1970-01-01 00:00
842 1438 break;
843 - case 'any-end':
1439 + case 'any-end':
844 1440 $time_unix = 2145916800; //any - 2038-01-01 00:00
845 1441 break;
846 1442 default:
847 1443 $time_unix = 2145916800; //any END - 2038-01-01 00:00
@@ -846,9 +1442,9 @@
846 1442 default:
847 1443 $time_unix = 2145916800; //any END - 2038-01-01 00:00
848 1444 }
849 1445
850 -//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));
851 1447
852 1448
853 1449 return $time_unix;
854 1450 }
@@ -862,9 +1458,9 @@
862 1458 * @return empty string | int $booking_id
863 1459 */
864 1460 function wpbm_get_booking_id_by_UID( $uid ){
865 1461
866 - $booking_id = [];
1462 + $booking_id = array(); //FixIn: 2.0.14.1
867 1463
868 1464 if ( function_exists( 'wpbc_api_get_bookings_arr' ) ) {
869 1465
870 1466 /*
@@ -875,9 +1471,9 @@
875 1471 'wh_trash' => 'any',
876 1472 'wh_modification_dateprior' => 1,
877 1473 'wh_modification_date' => 3,
878 1474 'wh_pay_status' => 'all',
879 - 'view_mode' => 'vm_listing',
1475 +
880 1476 'wh_booking_type' => '-999',
881 1477 'wh_keyword' => $uid
882 1478 );
883 1479
@@ -893,11 +1489,11 @@
893 1489
894 1490 foreach ( $res as $booking_obj ) {
895 1491 $booking_id[] = $booking_obj->booking_id;
896 1492 }
897 -
1493 +
898 1494 //debuge('$bookings_arr',$res);
899 1495
900 1496 }
901 1497
902 1498 return implode( ',', $booking_id );
903 -}
1499 +}