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 +832 -249 2.0.16 → 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,51 +781,74 @@
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 -
292 851 if ( ( class_exists( 'wpdev_bk_biz_s' ) )
293 852 && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
294 853 && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
295 854 && ( count( $ics_event[ '_BOOKING_DATES' ] ) > 1 )
@@ -299,10 +858,10 @@
299 858 $dates_formats = array_fill( 0, count( $ics_event[ '_BOOKING_DATES' ] ), "Y-m-d H:i:s" ); //FixIn: 2.0.15.4
300 859 }
301 860 $booking_dates_unix = array_map( 'strtotime', $ics_event[ '_BOOKING_DATES' ] ); // Array ( [0] => 1498262400 [1] => 1498348800 )
302 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' )
303 -//debuge('$ics_event, $simple_booking_dates', $ics_event, $simple_booking_dates);
304 862
863 +
305 864 //FixIn: 8.1.3.29
306 865 if ( ( class_exists( 'wpdev_bk_biz_s' ) )
307 866 && ( get_bk_option( 'booking_range_selection_time_is_active') == 'On' )
308 867 && ( get_bk_option( 'booking_ics_import_add_change_over_time' ) !== 'Off' )
@@ -333,9 +892,9 @@
333 892
334 893 $booking = array(
335 894 'dates' => $simple_booking_dates // array( '2017-06-24', '2017-06-24', '2017-06-25', '2017-06-26' )
336 895 , 'data' => array()
337 - , 'resource_id' => $shortcode[ 'resource_id' ]
896 + , 'resource_id' => $shortcode[ 'resource_id' ]
338 897 );
339 898
340 899
341 900 $bk_data = array();
@@ -342,17 +901,17 @@
342 901 foreach ( $assigned_fields_arr as $assigned_field ) {
343 902
344 903 switch ( $assigned_field[ 'ics_field_name' ] ) {
345 904
346 - case 'title':
905 + case 'title':
347 906 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_SUMMARY' ] ) );
348 907 break;
349 908
350 - case 'description':
909 + case 'description':
351 910 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_DESCRIPTION' ] ) );
352 911 break;
353 912
354 - case 'where':
913 + case 'where':
355 914 $bk_data [ $assigned_field[ 'name' ] ]= array( 'type' => $assigned_field[ 'type' ], 'value' => trim( $ics_event[ '_BOOKING_LOCATION' ] ) );
356 915 break;
357 916
358 917 default:
@@ -360,9 +919,9 @@
360 919 }
361 920 }
362 921
363 922 // Email
364 - $home_url = explode( '://', home_url() );
923 + $home_url = explode( '://', home_url() );
365 924 //if (count($home_url>0)) //FixIn: 2.0.3.2
366 925 // $email = 'ics@' . $home_url[1];
367 926 //else
368 927 $email = get_option ( 'admin_email' );
@@ -397,19 +956,22 @@
397 956 // $ics_event[ '_BOOKING_SUMMARY' ]; // Event (timezone Pacific GMT-07:00)
398 957 // $ics_event[ '_BOOKING_DESCRIPTION' ]; // 8/7/2017 1:00pm TO 3:30pm 8/8/2017 (GMT-07:00) Pacific Time
399 958 // $ics_event[ '_BOOKING_LOCATION' ]; // Pacific Coast Highway, Pacific Coast Hwy, Los Angeles, CA, USA
400 959 // $ics_event[ '_BOOKING_UID' ]; // [email protected]
401 - // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
960 + // $ics_event[ '_BOOKING_MODIFIED' ]; // 2017-06-28 10:12:35
402 961 */
403 -
962 +
404 963 add_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10, 5 );
405 -
964 +
406 965 // Do not overupdate "child booking resources" when saving bookings to parent booking resource. Just skip this checking
407 - 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 );
408 967
409 - // Check dates availability and process
968 + // Check dates availability and process
410 969 // only if dates available in specific booking resource!
411 - if ( $shortcode[ 'import_conditions' ] == 'if_dates_free' ) {
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 + ){
412 974 $is_dates_booked = wpbc_api_is_dates_booked( $ics_event['_BOOKING_DATES'], $booking['resource_id'] ); //FixIn: 2.0.15.2
413 975 //$is_dates_booked = wpbc_api_is_dates_booked( $booking['dates'], $booking['resource_id'] );
414 976 } else{
415 977 $is_dates_booked = false;
@@ -416,10 +978,10 @@
416 978 }
417 979
418 980
419 981 if ( ! $is_dates_booked ) {
420 -
421 - $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 );
422 984 $booking_added_num++;
423 985
424 986 //if ( ( defined( 'WP_BK_AUTO_APPROVE_WHEN_IMPORT_GCAL' ) ) && ( WP_BK_AUTO_APPROVE_WHEN_IMPORT_GCAL ) ){ // Auto approve booking if imported
425 987 if ( ( function_exists( 'get_bk_option' )) && ( get_bk_option( 'booking_auto_approve_bookings_when_import' ) == 'On' ) ) { //FixIn: 8.1.3.27
@@ -458,9 +1020,9 @@
458 1020 } else {
459 1021
460 1022 do_action( 'wpbc_show_debug', // S_Y_S_T_E_M L_O_G
461 1023 sprintf ( 'Event was not create becausse dates %s already booked in booking resource ID = %d'
462 - , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
1024 + , implode( ', ', $booking[ 'dates' ] ) , $booking[ 'resource_id' ] ) );
463 1025 }
464 1026
465 1027 remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
466 1028 remove_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10 );
@@ -465,16 +1027,16 @@
465 1027 remove_filter( 'wpbc_get_insert_sql_for_dates', 'wpbm_get_insert_sql_for_dates', 10 );
466 1028 remove_filter( 'wpbc_is_reupdate_dates_to_child_resources', 'wpbm_is_reupdate_dates_to_child_resources', 10 );
467 1029
468 1030 // Remove previously saved dates to our 'Static' class.
469 - WPBM_create_bookings_from_events::erase_ics_dates();
1031 + WPBM_create_bookings_from_events::erase_ics_dates();
470 1032 }
471 -
472 - return $booking_added_num;
1033 +
1034 + return $booking_added_num;
473 1035 }
474 -add_action( 'wpbm_ics_import_start', 'wpbm_ics_import_start', 10, 1 );
475 1036
476 1037
1038 +
477 1039 ////////////////////////////////////////////////////////////////////////////////////////////
478 1040 // Booking Calendar support functions
479 1041 ////////////////////////////////////////////////////////////////////////////////////////////
480 1042
@@ -480,9 +1042,9 @@
480 1042
481 1043
482 1044 /** Clear array of Events from events that already exist in Booking table
483 1045 * Check UID and GUID sync paramaters
484 - *
1046 + *
485 1047 * @param array $bk_array - array of events
486 1048 * @return array - trimmed array
487 1049 */
488 1050 function wpbm_clear_events_from_exist_bookings( $bk_array ) {
@@ -489,11 +1051,11 @@
489 1051
490 1052 $bk_uid = $bk_guid = array();
491 1053 // GET array of UID for imported bookings
492 1054 foreach ( $bk_array as $ics_key => $ics_event) {
493 -
1055 +
494 1056 $bk_uid[ $ics_key ] = $ics_event[ '_BOOKING_UID' ];
495 -
1057 +
496 1058 if ( strpos( $ics_event[ '_BOOKING_UID' ], '@google.com') !== false ) {
497 1059 // [email protected] - ID of event from ICS
498 1060 // 15ig8t0i739kajgjc8ekc386dt_20170815 - ID of event during import from Google Calendar (probabaly created by ID before @ + first date)
499 1061
@@ -498,24 +1060,24 @@
498 1060 // 15ig8t0i739kajgjc8ekc386dt_20170815 - ID of event during import from Google Calendar (probabaly created by ID before @ + first date)
499 1061
500 1062 $bk_guid[ $ics_key ] = str_replace( '@google.com'
501 1063 , date_i18n( '_Ymd', strtotime( $ics_event[ '_BOOKING_DATES' ][0] ) )
502 - , $ics_event[ '_BOOKING_UID' ]
1064 + , $ics_event[ '_BOOKING_UID' ]
503 1065 );
504 - }
505 - }
1066 + }
1067 + }
506 1068 $bookings_check_uid = array_merge( $bk_uid,$bk_guid );
507 -
1069 +
508 1070 $bookings_exit_uid = wpbm_get_exist_bookings_gid( $bookings_check_uid );
509 1071
510 1072 // Remove events which already exist
511 1073 foreach ( $bk_uid as $ics_key => $ics_uid ) {
512 -
1074 +
513 1075 // If exist UID remove it from event
514 1076 if ( in_array( $ics_uid, $bookings_exit_uid ) ) {
515 1077 unset( $bk_array[ $ics_key ] );
516 1078 }
517 -
1079 +
518 1080 // If we are having such GUID and it exist, then remove ir
519 1081 if ( isset( $bk_guid[ $ics_key ] ) ) {
520 1082 $ics_gid = $bk_guid[ $ics_key ];
521 1083 if ( in_array( $ics_uid, $bookings_exit_uid ) ) {
@@ -528,191 +1090,212 @@
528 1090 return $bk_array;
529 1091 }
530 1092
531 1093
532 - /** Check if bookings exist with specific sync UID
533 - *
534 - * @global type $wpdb
535 - * @param array of UID to check
536 - * @return array of exist UID
537 - */
538 - 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 +}
539 1144
540 - $sql_sync_gid = implode( "','", $uid_arr );
541 1145
542 - $exist_bookings_guid = array();
543 -
544 - if ( ! empty( $sql_sync_gid ) ) {
545 - global $wpdb;
546 -
547 - $my_sql = "SELECT * FROM {$wpdb->prefix}booking WHERE sync_gid IN ('{$sql_sync_gid}') AND trash != 1"; //FixIn: 2.0.9.3
548 -//debuge($sql_sync_gid);
549 -//$my_sql = "SELECT * FROM wp_booking WHERE sync_gid IN ('[email protected]','[email protected]','[email protected]','[email protected]','[email protected]','[email protected]')";
550 -//debuge($my_sql);
551 - $exist_bookings = $wpdb->get_results( $my_sql );
552 -
553 -//debuge( 'wpbc_show_debug', array( 'SQL: ', $my_sql, $exist_bookings ) );
554 -
555 - foreach ( $exist_bookings as $bk ) {
556 - $exist_bookings_guid[] = $bk->sync_gid;
557 - }
558 - }
559 - return $exist_bookings_guid;
560 - }
561 -
562 -
563 1146 /** Trim number of events in array
564 - *
1147 + *
565 1148 * @param array $bk_array
566 1149 * @param array $shortcode
567 1150 * @return array
568 - */
1151 + */
569 1152 function wpbm_clear_events_by_count( $bk_array, $shortcode ) {
570 -
1153 +
571 1154 if ( empty( $shortcode['max'] ) ) {
572 1155 return $bk_array;
573 1156 } else {
574 1157 $max = intval( $shortcode['max'] );
575 1158 }
576 -
1159 +
577 1160 $bk_count= count( $bk_array );
578 1161 if ( $max > $bk_count )
579 1162 return $bk_array;
580 -
1163 +
581 1164 $cnt = 0;
582 1165 $events_arr = array();
583 -
1166 +
584 1167 foreach ( $bk_array as $ev_key => $ev_arr ) {
585 -
1168 +
586 1169 $events_arr[] = $ev_arr;
587 -
1170 +
588 1171 $cnt++;
589 - if ( $cnt >= $max )
1172 + if ( $cnt >= $max )
590 1173 break;
591 1174 }
592 -
1175 +
593 1176 return $events_arr;
594 -}
595 -
1177 +}
596 1178
597 1179
598 1180
1181 +
599 1182 /** Remove ONLY dates from event(s) that does not fit to filter parameters: FROM - UNTIL -- All events will exist here
600 - *
1183 + *
601 1184 * @param array $bk_array - array of events
602 1185 * @param array $shortcode
603 1186 * @return array - trimmed array
604 - */
1187 + */
605 1188 function wpbm_remove_dates_from_event_not_in_condition( $bk_array, $shortcode ) {
606 -
1189 +
607 1190 if ( ( ! isset( $shortcode['from'] ) ) && ( ! isset( $shortcode['until'] ) ) ) {
608 1191 return $bk_array;
609 1192 }
610 -
611 - // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
612 1193
1194 + // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
1195 +
613 1196 // F R O M
614 1197 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'from_offset' ] );
615 -
616 - if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
617 - if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
618 -
1198 +
1199 + if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
1200 + if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
1201 +
619 1202 $condition_from = wpbm_get_time_unix_from_param_offset( $shortcode['from'], $offset );
620 -
1203 +
621 1204 // </editor-fold>
622 -
623 1205
624 - // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
625 -
626 - // 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
627 1210 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'until_offset' ] );
628 -
629 - if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
630 - if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
631 -
1211 +
1212 + if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
1213 + if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
1214 +
632 1215 $condition_until = wpbm_get_time_unix_from_param_offset( $shortcode['until'], $offset );
633 -
1216 +
634 1217 // </editor-fold>
635 -
636 -
1218 +
1219 +
637 1220 foreach ( $bk_array as $e_key => $ics_event ) {
638 -
1221 +
639 1222 $new_dates = array();
640 -//debuge($ics_event[ '_BOOKING_DATES' ] );
1223 +//debuge($ics_event[ '_BOOKING_DATES' ] );
641 1224 foreach ( $ics_event[ '_BOOKING_DATES' ] as $d_key => $ics_date ) {
642 -
1225 +
643 1226 $ics_date_unix = strtotime( $ics_date );
644 -//debuge( $d_key, $ics_date , array( $condition_from, $condition_until ) );
645 - if ( ( $condition_from <= $ics_date_unix ) && ( $condition_until >= $ics_date_unix ) ) {
646 -
1227 +//debuge( $d_key, $ics_date , array( $condition_from, $condition_until ) );
1228 + if ( ( $condition_from <= $ics_date_unix ) && ( $condition_until >= $ics_date_unix ) ) {
1229 +
647 1230 $new_dates[] = $ics_date;
648 1231 }
649 1232 }
650 -//debuge( $new_dates ); die;
1233 +//debuge( $new_dates ); die;
651 1234 $bk_array[ $e_key ][ '_BOOKING_DATES' ] = $new_dates;
652 1235 }
653 -
1236 +
654 1237 return $bk_array;
655 1238 }
656 1239
657 1240
658 1241 /** Skip events that does not fit to filter parameters: FROM - UNTIL
659 - *
1242 + *
660 1243 * @param array $bk_array - array of events
661 1244 * @param array $shortcode
662 1245 * @return array - trimmed array
663 - */
1246 + */
664 1247 function wpbm_clear_events_by_dates( $bk_array, $shortcode ) {
665 1248
666 1249 if ( ( ! isset( $shortcode['from'] ) ) && ( ! isset( $shortcode['until'] ) ) ) {
667 1250 return $bk_array;
668 1251 }
669 -
670 - // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
671 1252
1253 + // <editor-fold defaultstate="collapsed" desc=" F R O M C o n d " >
1254 +
672 1255 // F R O M
673 1256 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'from_offset' ] );
674 -
675 - if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
676 - if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
677 -
1257 +
1258 + if ( $shortcode['from'] == 'any' ) $shortcode['from'] = 'any-start';
1259 + if ( $shortcode['from'] == 'week' ) $shortcode['from'] = 'week-start';
1260 +
678 1261 $condition_from = wpbm_get_time_unix_from_param_offset( $shortcode['from'], $offset );
679 -
1262 +
680 1263 // </editor-fold>
681 -
682 1264
683 - // <editor-fold defaultstate="collapsed" desc=" U N T I L C o n d " >
684 -
685 - // 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
686 1269 $offset = wpbm_get_offset_unix_from_param( $shortcode[ 'until_offset' ] );
687 -
688 - if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
689 - if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
690 -
1270 +
1271 + if ( $shortcode['until'] == 'any' ) $shortcode['until'] = 'any-end';
1272 + if ( $shortcode['until'] == 'week' ) $shortcode['until'] = 'week-end';
1273 +
691 1274 $condition_until = wpbm_get_time_unix_from_param_offset( $shortcode['until'], $offset );
692 -
1275 +
693 1276 // </editor-fold>
694 1277
695 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
696 1279 if ( ! isset( $shortcode['is_all_dates_in'] ) )
697 - $is_all_dates_in_condition = true;
698 - else
699 - $is_all_dates_in_condition = (bool) $shortcode['is_all_dates_in'];
700 -
1280 + $is_all_dates_in_condition = true;
1281 + else
1282 + $is_all_dates_in_condition = (bool) $shortcode['is_all_dates_in'];
1283 +
701 1284 //debuge($condition_from, date_i18n('Y-m-d H:is',$condition_from));
702 1285 //debuge($condition_until, date_i18n('Y-m-d H:is',$condition_until));
703 1286 //debuge( (int) $is_all_dates_in_condition );
704 1287 //die;
705 1288 // Remove some events, that does not inside From | End time
706 - $remove_events_keys = array();
1289 + $remove_events_keys = array();
707 1290 foreach ( $bk_array as $e_key => $ics_event ) {
708 1291 foreach ( $ics_event[ '_BOOKING_DATES' ] as $d_key => $ics_date ) {
709 1292 $ics_date = strtotime( $ics_date );
710 -
1293 +
711 1294 if ( $is_all_dates_in_condition ) {
712 1295 // STRICT - ALL DATES
713 1296 if ( ( $condition_from > $ics_date ) || ($condition_until < $ics_date ) ) {
714 -
1297 +
715 1298 $remove_events_keys[] = $e_key;
716 1299 continue;
717 1300 }
718 1301 } else {
@@ -717,9 +1300,9 @@
717 1300 }
718 1301 } else {
719 1302 // AT LEAST 1 DATE
720 1303 if ( ( $condition_from <= $ics_date ) && ( $condition_until >= $ics_date ) ) {
721 -
1304 +
722 1305 $remove_events_keys = array_diff( $remove_events_keys, array( $e_key ) ); // Remove values "$e_key" from array
723 1306 break;
724 1307 } else {
725 1308 if ( ! in_array( $e_key, $remove_events_keys ) ) {
@@ -725,18 +1308,18 @@
725 1308 if ( ! in_array( $e_key, $remove_events_keys ) ) {
726 1309 $remove_events_keys[] = $e_key;
727 1310 }
728 1311 }
729 -
1312 +
730 1313 }
731 -
1314 +
732 1315 }
733 1316 }
734 -
1317 +
735 1318 // Remove them
736 1319 $remove_events_keys = array_unique( $remove_events_keys );
737 -
738 -//debuge( $bk_array, $remove_events_keys);
1320 +
1321 +//debuge( $bk_array, $remove_events_keys);
739 1322 foreach ( $remove_events_keys as $evnt_key ) {
740 1323 unset( $bk_array[ $evnt_key ] );
741 1324 }
742 1325
@@ -744,22 +1327,22 @@
744 1327 }
745 1328
746 1329
747 1330 /** Get time offset in seconds based on parameter
748 - *
1331 + *
749 1332 * @param string $offset_param 30s | 5m | 2h | 7d | just seconds
750 1333 * @return int
751 1334 */
752 1335 function wpbm_get_offset_unix_from_param( $offset_param ) {
753 -
754 - $offset = 0;
1336 +
1337 + $offset = 0;
755 1338 if ( ! empty( $offset_param ) ) {
756 -
1339 +
757 1340 $offset_type = substr( $offset_param, -1 );
758 1341 $offset_value = substr( $offset_param, 0, -1 );
759 -
1342 +
760 1343 switch ( $offset_type ) {
761 - case "s": // Seconds
1344 + case "s": // Seconds
762 1345 $offset = intval( $offset_value );
763 1346 break;
764 1347 case "m": // Minutes
765 1348 $offset = intval( $offset_value ) * 60 ;
@@ -771,65 +1354,65 @@
771 1354 $offset = intval( $offset_value ) * 86400 ;
772 1355 break;
773 1356 default:
774 1357 $offset = intval( $offset_value );
775 - }
776 - }
1358 + }
1359 + }
777 1360 return $offset;
778 1361 }
779 1362
780 1363
781 1364 /** Get Unix Time based on date parameter / condition and offset in seconds
782 - *
1365 + *
783 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'
784 1367 * @param int $offset_unix - offset in seconds
785 1368 * @return int - Unix time in seconds
786 1369 */
787 1370 function wpbm_get_time_unix_from_param_offset( $check_day, $offset_unix ) {
788 -
1371 +
789 1372 // $condition_end = strtotime ( $shortcode['until'] . ' +1 day - 1 second' );
790 -
1373 +
791 1374 $check_sql_day = explode( '-', $check_day );
792 1375 if ( count( $check_sql_day ) == 3 ) {
793 1376 $check_day = 'date';
794 - }
1377 + }
795 1378
796 1379 switch ( $check_day ) {
797 - // 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.
798 1381 // Instead set to previous minute. Events in Google Calendar cannot be set to precision of seconds anyway
799 1382 case 'now':
800 -
801 - //$time_unix = strtotime( date_i18n( 'Y-m-d H:i:s' ) ) + $offset_unix; // "Now" in "Timezone" from WordPress > Settings
802 - $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 ;
803 1386 break;
804 1387 case 'today':
805 - //$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
806 1389 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), date_i18n( 'j' ), date_i18n( 'Y' ) ) + $offset_unix ;
807 1390 break;
808 1391 case 'week':
809 1392 case 'week-start':
810 -
811 - $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
812 - 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 ) )
813 1396 $start_of_week = 0;
814 -
1397 +
815 1398 $start_day = date_i18n( 'w' ) - $start_of_week ;
816 - if ( $start_day < 0 )
1399 + if ( $start_day < 0 )
817 1400 $start_day = 7 + $start_day;
818 1401
819 1402 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), ( date_i18n( 'j' ) - $start_day ), date_i18n( 'Y' ) ) + $offset_unix ;
820 1403 break;
821 1404 case 'week-end':
822 -
1405 +
823 1406 $start_of_week = get_wpbm_option( 'wpbm_start_day_weeek' ); //get_option( 'start_of_week' );
824 - if ( empty( $start_of_week ) )
1407 + if ( empty( $start_of_week ) )
825 1408 $start_of_week = 0;
826 -
1409 +
827 1410 $start_day = date_i18n( 'w' ) - $start_of_week ;
828 - if ( $start_day < 0 )
829 - $start_day = 7 + $start_day;
1411 + if ( $start_day < 0 )
1412 + $start_day = 7 + $start_day;
830 1413 // minus 1 second -- prevent of events exactly == start Next period
831 - $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;
832 1415 break;
833 1416 case 'month-start':
834 1417 $time_unix = mktime( 0, 0, 0, date_i18n( 'm' ), 1, date_i18n( 'Y' ) ) + $offset_unix ;
835 1418 break;
@@ -837,12 +1420,12 @@
837 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
838 1421 break;
839 1422 case 'year-start':
840 1423 $time_unix = mktime( 0, 0, 0, 1, 1, date_i18n( 'Y' ) ) + $offset_unix ;
841 - break;
1424 + break;
842 1425 case 'year-end':
843 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
844 - break;
1427 + break;
845 1428 case 'date':
846 1429
847 1430 if ( intval( $check_sql_day[0] ) - intval( date('Y') ) > 15 ) { //FixIn m.2.0.1
848 1431 $time_unix =2145916800;
@@ -849,12 +1432,12 @@
849 1432 } else {
850 1433 $time_unix = mktime( 0, 0, 0, intval( $check_sql_day[1] ), intval( $check_sql_day[2] ), intval( $check_sql_day[0] ) );
851 1434 }
852 1435 break;
853 - case 'any-start':
1436 + case 'any-start':
854 1437 $time_unix = 0; // any - 1970-01-01 00:00
855 1438 break;
856 - case 'any-end':
1439 + case 'any-end':
857 1440 $time_unix = 2145916800; //any - 2038-01-01 00:00
858 1441 break;
859 1442 default:
860 1443 $time_unix = 2145916800; //any END - 2038-01-01 00:00
@@ -859,9 +1442,9 @@
859 1442 default:
860 1443 $time_unix = 2145916800; //any END - 2038-01-01 00:00
861 1444 }
862 1445
863 -//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));
864 1447
865 1448
866 1449 return $time_unix;
867 1450 }
@@ -888,9 +1471,9 @@
888 1471 'wh_trash' => 'any',
889 1472 'wh_modification_dateprior' => 1,
890 1473 'wh_modification_date' => 3,
891 1474 'wh_pay_status' => 'all',
892 - 'view_mode' => 'vm_listing',
1475 +
893 1476 'wh_booking_type' => '-999',
894 1477 'wh_keyword' => $uid
895 1478 );
896 1479
@@ -906,11 +1489,11 @@
906 1489
907 1490 foreach ( $res as $booking_obj ) {
908 1491 $booking_id[] = $booking_obj->booking_id;
909 1492 }
910 -
1493 +
911 1494 //debuge('$bookings_arr',$res);
912 1495
913 1496 }
914 1497
915 1498 return implode( ',', $booking_id );
916 -}
1499 +}