PluginProbe
WP Directory Kit / 1.3.4
WP Directory Kit v1.3.4
1.5.6 1.5.5 1.5.4 1.5.3 trunk 1.1.0 1.1.6 1.1.8 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.8 1.4.0 1.4.1 All 35 releases
wpdirectorykit / elementor-extensions / class-ajax-handler.php

class-ajax-handler.php in WP Directory Kit 1.3.4, at elementor-extensions/class-ajax-handler.php

802 lines 49.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Wdk\Elementor\Extensions;
3
4 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
5
6 class AjaxHandler {
7 /**
8 * data array
9 *
10 * @var array
11 */
12 protected $data = array();
13 public $_translate_strings = array();
14 protected $WMVC = NULL;
15
16
17 public function __construct($data = array(), $args = null) {
18 add_action( 'eli/ajax-handler/after', array( $this, 'after' ) );
19 add_filter( 'eli/ajax-handler/filter_from_data', array( $this, 'filter_from_data' ) );
20
21 $this->_translate_strings = array(
22 __('Guests number', 'wpdirectorykit'),
23 __('Listing link', 'wpdirectorykit'),
24 __('Name', 'wpdirectorykit'),
25 __('Date from', 'wpdirectorykit'),
26 __('Date to', 'wpdirectorykit'),
27 );
28 }
29
30 public function filter_output ($filter_output = array()) {
31 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-primary" role="alert">The form was sent successfully.</div>';
32 return $filter_output;
33 }
34
35 public function filter_from_data ($form_data = array()) {
36 if (isset($_POST['date_from']) && isset($_POST['date_to'])) {
37 /* disable double sent to admin mail */
38 $form_data['settings']['disable_mail_send'] = 1;
39 }
40 if (isset($_POST['listing_id']) && !empty($_POST['listing_id'])) {
41 /* disable double sent to admin mail */
42 $form_data['settings']['disable_mail_send'] = 1;
43 }
44 return $form_data;
45 }
46
47 public function after ($form_data = array()) {
48
49 $this->WMVC = &wdk_get_instance();
50 $this->WMVC->model('messages_m');
51
52 $message_skip = false;
53
54 $email = '';
55 $message = '';
56 $post_id = '';
57 $wdk_widget = '';
58 foreach ($_POST as $key => $value) {
59 if (stripos($key, 'mail') !== false || filter_var($value, FILTER_VALIDATE_EMAIL)) {
60 $email = sanitize_email($value);
61 }
62 if (stripos($key, 'message') !== false) {
63 $message = sanitize_text_field($value);
64 }
65 if (stripos($key, 'wdk_widget') !== false) {
66 $wdk_widget = sanitize_text_field($value);
67 }
68 if (stripos($key, 'listing_id') !== false) {
69 $post_id = sanitize_text_field($value);
70 }
71 }
72
73 if(function_exists('run_wdk_bookings') && (
74 is_user_logged_in() ||
75 $wdk_widget == 'wdk-booking-quick-submission' ||
76 wdk_get_option('wdk_booking_disable_for_not_login') ||
77 (!wdk_get_option('wdk_booking_disable_for_not_login') && wdk_get_option('wdk_bookings_enable_woocommerce_payments'))
78 )
79 ) {
80 if(isset($_POST['date_from']) && isset($_POST['date_to']) && !empty($_POST['date_from']) && !empty($_POST['date_to'])) {
81 $date_from = sanitize_text_field($_POST['date_from']);
82 $date_to = sanitize_text_field($_POST['date_to']);
83 $errors = '';
84
85 global $Winter_MVC_wdk_bookings;
86 $Winter_MVC_wdk_bookings->model('reservation_m');
87 $Winter_MVC_wdk_bookings->model('calendar_m');
88 $Winter_MVC_wdk_bookings->model('price_m');
89
90 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_by(array('post_id'=>$post_id), TRUE); // date_package_expire package_id
91
92
93 if(wdk_is_date($date_from))
94 {
95 $date_from = wdk_normalize_date_db($date_from, 'Y-m-d H:i:s', (!wmvc_show_data('is_hour_enabled', $calendar,false)) ? 'Y-m-d': 'Y-m-d H:i:s');
96 }
97 else
98 {
99 return false;
100 }
101
102 if(wdk_is_date($date_to))
103 {
104 $date_to = wdk_normalize_date_db($date_to, 'Y-m-d H:i:s', (!wmvc_show_data('is_hour_enabled', $calendar,false)) ? 'Y-m-d': 'Y-m-d H:i:s');
105 }
106 else
107 {
108 return false;
109 }
110
111
112 /* message data */
113
114
115 $price = $Winter_MVC_wdk_bookings->reservation_m->calculate_price($post_id, $date_from, $date_to);
116
117 $calendar_fees = array();
118 if($calendar && !empty($calendar->json_data_fees))
119 $calendar_fees = json_decode($calendar->json_data_fees );
120
121 if($price) {
122 $guests_number = intval(wmvc_show_data('guests_number_adults', $_POST, 0)) + intval(wmvc_show_data('guests_number_childs', $_POST, 0));
123 $nights = (int)abs(strtotime($date_to) - strtotime($date_from))/(60*60*24);
124 foreach ($calendar_fees as $fee) {
125 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
126 if(is_intval(wmvc_show_data('value', $fee,'',TRUE,TRUE))) {
127 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
128 if(!wmvc_show_data('is_required', $fee, false,TRUE,TRUE) && !isset($_POST['fee_'.$field])) {
129
130 } else {
131 if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_night') {
132 $price['price'] += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $nights;
133 } else if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_person') {
134 $price['price'] += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $guests_number;
135 } else {
136 $price['price'] += intval(wmvc_show_data('value', $fee,'',TRUE,TRUE));
137 }
138 }
139 }
140 }
141 }
142
143 $note = '<br>';
144 if(empty($calendar->is_guests_disabled)){
145 if(wmvc_show_data ('guests_number_adults', $_POST, false))
146 $note .= '<b>'.__('Guests Adult', 'wpdirectorykit').':</b> '.sanitize_text_field(wmvc_show_data('guests_number_adults', $_POST)).'<br>'.PHP_EOL;
147 if(wmvc_show_data ('guests_number_childs', $_POST, false))
148 $note .= '<b>'.__('Guests Childs', 'wpdirectorykit').':</b> '.sanitize_text_field(wmvc_show_data('guests_number_childs', $_POST)).'<br>'.PHP_EOL;
149 }
150
151 if(wmvc_show_data ('сhildrens_allowed', $_POST, false) || intval(wmvc_show_data ('guests_number_childs', $_POST, false)) > 0)
152 $note .= '<b>'.__('Childrens', 'wpdirectorykit').':</b> yes'.'<br>'.PHP_EOL;
153
154 if(wmvc_show_data ('pets_allowed', $_POST, false))
155 $note .= '<b>'.__('Pets', 'wpdirectorykit').':</b> yes'.'<br>'.PHP_EOL;
156
157 if(wmvc_show_data ('Name', $_POST, false))
158 $note .= '<b>'.__('Name', 'wpdirectorykit').':</b> '.sanitize_text_field(wmvc_show_data ('Name', $_POST)).'<br>'.PHP_EOL;
159
160 if(wmvc_show_data ('Email', $_POST, false))
161 $note .= '<b>'.__('Email', 'wpdirectorykit').':</b> '.sanitize_text_field(wmvc_show_data ('Email', $_POST)).'<br>'.PHP_EOL;
162
163 if(wmvc_show_data ('Message', $_POST, false))
164 $note .= '<b>'.__('Message', 'wpdirectorykit').':</b> '.sanitize_text_field(wmvc_show_data ('Message', $_POST)).'<br>'.PHP_EOL;
165
166 if(wmvc_show_data ('Phone', $_POST, false))
167 $note .= '<b>'.__('Phone', 'wpdirectorykit').':</b> '.sanitize_text_field(wmvc_show_data ('Phone', $_POST)).'<br>'.PHP_EOL;
168
169 if(true)
170 foreach($_POST as $key => $value) {
171 if($key=='element_id') continue;
172 if(in_array($key, array('eli_page_id', 'g-recaptcha-response','eli_id', 'eli_type','ID','filter','action','send_action_type','Phone','Message','Email','Name','pets_allowed','сhildrens_allowed','guests_number','guests_number_childs','guests_number_adults'))) continue;
173 if(in_array($key, array('listing_link','date_from','date_to','listing_id','wdk_widget', 'function','page'))) continue;
174
175 if(filter_var($value, FILTER_VALIDATE_URL ) || strpos( $value, 'http' ) !== FALSE) {
176 $note .= '<b> '.__(str_replace('_',' ', ucfirst($key)), 'wpdirectorykit').':</b> <a href="'.esc_url($value).'">'.$value.'</a><br>';
177 } else {
178 $note .= '<b> '.__(str_replace('_',' ', ucfirst($key)), 'wpdirectorykit').':</b> '.$value.'<br>';
179 }
180 }
181
182
183 if( !is_user_logged_in()) {
184
185 if(
186 $wdk_widget == 'wdk-booking-quick-submission' ||
187 (!wdk_get_option('wdk_booking_disable_for_not_login') && wdk_get_option('wdk_bookings_enable_woocommerce_payments'))
188 ) {
189
190 /* if not disable for not login users, try create user */
191 $userlogin = $email;
192 $username = '';
193 $email_address = $email;
194 $password = wp_generate_password();
195
196 if(wmvc_show_data('name', $_POST, false))
197 $username = sanitize_text_field(wmvc_show_data('name', $_POST, false));
198
199 $user_id = wp_create_user( $userlogin, $password, $email_address );
200
201 if(is_intval($user_id)) {
202 // Set the nickname
203 wp_update_user(
204 array(
205 'ID' => $user_id,
206 'nickname' => $email_address
207 )
208 );
209
210 $user = new \WP_User( $user_id );
211 $user->set_role('wdk_visitor');
212
213 wp_update_user( array ('ID' => $user_id, 'display_name' => esc_html( $username ) ) );
214
215 $userdata = get_userdata($user_id);
216
217 $subject = __('New user on our website!', 'wdk-membership');
218 $data_message = array();
219 $data_message['login'] = $userlogin;
220 $data_message['password'] = $password;
221 $data_message['user'] = $userdata;
222 $data_message['data'] = '';
223
224 update_user_meta( $user_id, 'first_name', $username);
225
226 wdk_mail($email_address, $subject, $data_message, 'new_user_auto_created');
227
228 /* auto login */
229 wp_set_current_user($user_id, $userdata->user_login );
230 wp_set_auth_cookie($user_id);
231
232 } elseif($user = get_user_by( 'email', $email_address)) {
233 $user_id = $user->ID;
234 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.wdk_sprintf(__( 'For Booking required login, user with email %1$s already exists, please first try login', 'wpdirectorykit' ), $email_address).' <a href="'.wdk_login_url().'" target="_blank" style="text-decoration: underline;">'.esc_html__('here', 'wpdirectorykit').'</a></div>';
235 } else {
236 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('For Booking please login', 'wpdirectorykit').' <a href="'.wdk_login_url().'" target="_blank" style="text-decoration: underline;">'.esc_html__('here', 'wpdirectorykit').'</div>';
237 }
238 } else {
239 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('For Booking please login', 'wpdirectorykit').' <a href="'.wdk_login_url().'" target="_blank" style="text-decoration: underline;">'.esc_html__('here', 'wpdirectorykit').'</div>';
240 }
241 }
242
243 $data = array(
244 'post_id' => ($post_id),
245 'date_from' => ($date_from),
246 'date_to' => ($date_to),
247 'notes' => $message,
248 'user_id' => get_current_user_id(),
249 'price' => wmvc_show_data('price', $price),
250 'currency_code' => wdk_booking_currency_symbol(),
251 'calendar_id' => wmvc_show_data('idcalendar', $calendar),
252 'notes' => $note,
253 );
254
255 if(wmvc_show_data('is_enable_noapprovements', $calendar, false))
256 $data['is_approved'] = 1;
257
258 $results = $Winter_MVC_wdk_bookings->reservation_m->is_booked($post_id, $date_from, $date_to);
259
260
261 $Winter_MVC_wdk_bookings->db->where("date_from <='".$date_from."'");
262 $Winter_MVC_wdk_bookings->db->where("date_to >= '".$date_to."'");
263 $price_reservation = $Winter_MVC_wdk_bookings->price_m->get_by(array('post_id'=>$post_id), TRUE);
264 /* manual validation */
265 if( !$results ){
266 if($date_from == $date_to) {
267 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Please set different dates', 'wpdirectorykit').'</div>';
268 }
269
270 if(empty($calendar->is_guests_disabled)){
271 $guests_number = intval(wmvc_show_data('guests_number_adults', $_POST, 0)) + intval(wmvc_show_data('guests_number_childs', $_POST, 0));
272 if(!empty(wmvc_show_data('guests', $calendar, 0, TRUE, TRUE)) && $guests_number > wmvc_show_data('guests', $calendar, 0, TRUE, TRUE)) {
273 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Possible max', 'wpdirectorykit').' '.esc_html(wmvc_show_data('guests', $calendar, 0, TRUE, TRUE)).' '.esc_html__('guest(s)', 'wpdirectorykit').'</div>';
274 }
275 }
276
277 if((wmvc_show_data('сhildrens_allowed', $_POST, false) || wmvc_show_data('guests_number_childs', $_POST, 0) > 0) && !wmvc_show_data('is_children_acceptable', $calendar, false, TRUE, TRUE)) {
278 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Only without children\'s', 'wpdirectorykit').'</div>';
279 }
280
281 if(wmvc_show_data('pets_allowed', $_POST, false) && !wmvc_show_data('is_pets_acceptable', $calendar, false, TRUE, TRUE)) {
282 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Only without pet\'s', 'wpdirectorykit').'</div>';
283 }
284
285 $days = array(
286 '1'=>__('Monday', 'wpdirectorykit'),
287 '2'=>__('Tuesday', 'wpdirectorykit'),
288 '3'=>__('Wednesday', 'wpdirectorykit'),
289 '4'=>__('Thursday', 'wpdirectorykit'),
290 '5'=>__('Friday', 'wpdirectorykit'),
291 '6'=>__('Saturday', 'wpdirectorykit'),
292 '7'=>__('Sunday', 'wpdirectorykit'),
293 );
294
295 $day_num_from = date('N', strtotime($date_from));
296 $day_num_to = date('N', strtotime($date_to));
297
298 if(wmvc_show_data('changeover_day', $price_reservation, false, TRUE, TRUE) && (
299 wmvc_show_data('changeover_day', $price_reservation, false, TRUE, TRUE) != $day_num_from
300 || wmvc_show_data('changeover_day', $price_reservation, false, TRUE, TRUE) != $day_num_to
301 )
302 ) {
303 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Changeover day is', 'wpdirectorykit').' '.esc_html($days[wmvc_show_data('changeover_day', $price_reservation, false, TRUE, TRUE)]).'</div>';
304 }
305
306 $hours_reservation = abs(strtotime($date_to) - strtotime($date_from))/(60*60);
307
308 if(wmvc_show_data('min_hours', $price_reservation, false, TRUE, TRUE) && wmvc_show_data('min_hours', $price_reservation, false, TRUE, TRUE) > $hours_reservation) {
309 $period = '';
310 $min_hours = intval(wmvc_show_data('min_hours', $price_reservation, false, TRUE, TRUE));
311 if((int)($min_hours/24) >= 1) {
312 $days = (int)($min_hours/24);
313 $period .= esc_html(sprintf(_nx(
314 '%1$s day',
315 '%1$s days',
316 $days,
317 'days',
318 'wpdirectorykit'
319 ), $days));
320
321 $min_hours -= $days * 24;
322 }
323
324 if(!empty($min_hours)) {
325 $period .= ' '.esc_html(sprintf(_nx(
326 '%1$s hour',
327 '%1$s hours',
328 (int)($min_hours),
329 'hours',
330 'wpdirectorykit'
331 ), (int)($min_hours)));
332 }
333
334 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Min', 'wpdirectorykit').' '.esc_html($period).'</div>';
335 }
336
337 if(wmvc_show_data('max_hours', $price_reservation, false, TRUE, TRUE) && wmvc_show_data('max_hours', $price_reservation, false, TRUE, TRUE) < $hours_reservation) {
338 $period = '';
339 $max_hours = intval(wmvc_show_data('max_hours', $price_reservation, false, TRUE, TRUE));
340 if((int)($max_hours/24) >= 1) {
341 $days = (int)($max_hours/24);
342 $period .= esc_html(sprintf(_nx(
343 '%1$s day',
344 '%1$s days',
345 $days,
346 'days',
347 'wpdirectorykit'
348 ), $days));
349
350 $max_hours -= $days * 24;
351 }
352
353 if(!empty($max_hours)) {
354 $period .= ' '.esc_html(sprintf(_nx(
355 '%1$s hour',
356 '%1$s hours',
357 (int)($max_hours),
358 'hours',
359 'wpdirectorykit'
360 ), (int)($max_hours)));
361 }
362
363 $errors .= '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Max', 'wpdirectorykit').' '.esc_html($period).'</div>';
364 }
365 }
366
367 if( $results ) {
368 add_filter( 'eli/ajax-handler/filter_output', function($filter_output){
369 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Date not available', 'wpdirectorykit').'</div>';
370 $filter_output['no_clear_from'] = true;
371 $filter_output['success'] = false;
372 return $filter_output;
373 } );
374 } elseif( !empty($errors) ) {
375 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) use ($errors) {
376 $filter_output['message'] = $errors;
377 $filter_output['success'] = false;
378 $filter_output['no_clear_from'] = true;
379 return $filter_output;
380 } );
381 } else {
382
383 if(wmvc_show_data('is_hour_enabled', $calendar, false) && !empty($data['date_from']) && !empty($data['date_to'])) {
384 $data['date_from'] = date('Y-m-d 00:00:00', strtotime($data['date_from']));
385 $data['date_to'] = date('Y-m-d 00:00:00', strtotime($data['date_to']));
386 }
387 $insert_id = $Winter_MVC_wdk_bookings->reservation_m->insert($data, NULL);
388
389 /* auto is_enable_noapprovements enabled */
390 if(wmvc_show_data('is_enable_noapprovements', $calendar, false)) {
391 /* if woo payment enabled */
392 if(wdk_get_option('wdk_bookings_enable_woocommerce_payments')) {
393 global $Winter_MVC_WDK;
394 $Winter_MVC_WDK->model('listingusers_m');
395 $Winter_MVC_WDK->model('listing_m');
396 $Winter_MVC_WDK->load_helper('listing');
397 $listing = $Winter_MVC_WDK->listing_m->get($post_id, TRUE);
398 $user_owner_id = NULL;
399 $user_data_owner = NULL;
400
401 if( wmvc_show_data('user_id_editor', $listing, '', TRUE, TRUE )) {
402 $user_owner_id = wmvc_show_data('user_id_editor', $listing, '', TRUE, TRUE );
403 if(wmvc_show_data('user_id', $user_listing, false, TRUE, TRUE )) {
404 $user_data_owner = get_userdata( wmvc_show_data('user_id', $user_listing, false, TRUE, TRUE ) );
405 }
406 }
407
408 if(empty($user_data_owner)) {
409 $user_data_owner = array(
410 'display_name' => __('Administrator', 'wpdirectorykit'),
411 'user_email' => get_bloginfo('admin_email'),
412 );
413 }
414
415 /* auto create woo item and redirect to order */
416 $url_pay = '';
417
418 if(class_exists( 'WooCommerce' )) {
419
420 $title = __('Reservation for', 'wpdirectorykit').' '.wdk_field_value ('post_title', $post_id).' #'.$post_id;
421 if($user_owner_id) {
422 $title .= ' A'.$user_owner_id;
423 }
424 $title .= ' '.wdk_get_date($date_from).' - '.wdk_get_date($date_to); // The product's Title
425
426 $post_args = array (
427 'post_author' => $user_owner_id, // The user's ID
428 'post_title' => $title, // The product's Title
429 'post_content' => str_replace(PHP_EOL,'<br style="line-height: 0;">', $note), // The product's Title
430 'post_type' => 'product',
431 'post_status' => 'publish' // This could also be $data['status'];
432 );
433
434 $woo_id = wp_insert_post( $post_args );
435 // If the post was created okay, let's try update the WooCommerce values.
436 if ( ! empty( $woo_id ) && function_exists( 'wc_get_product' ) ) {
437 $product = wc_get_product( $woo_id );
438 $product->set_virtual(true);
439 $product->set_sold_individually(true);
440 $product->set_sku( 'wdk-booking-' . $woo_id ); // Generate a SKU with a prefix. (i.e. 'pre-123')
441 $product->set_regular_price(wmvc_show_data('price', $price)); // Be sure to use the correct decimal price.
442 $product->save(); // Save/update the WooCommerce order object.
443
444 $terms = array( 'exclude-from-catalog', 'exclude-from-search' );
445 wp_set_object_terms( $woo_id, $terms, 'product_visibility' );
446
447 update_post_meta($woo_id, '_manage_stock', 'yes');
448 update_post_meta($woo_id, '_stock', 1);
449
450 $wdk_attach_id = NULL;
451 $image_ids = explode(',', trim(wdk_show_data('listing_images' , $listing, '', TRUE, TRUE), ','));
452
453 if(is_array($image_ids))
454 $wdk_attach_id = $image_ids[0];
455
456 set_post_thumbnail( $woo_id, $wdk_attach_id );
457
458 /* set woo product id for reservation */
459 $update_data = array('woocommerce_product_id'=>$woo_id);
460 $Winter_MVC_wdk_bookings->reservation_m->insert($update_data, $insert_id);
461
462 if(function_exists('wc_get_cart_url')) {
463 $url_pay = wdk_url_suffix(wc_get_cart_url(), 'add-to-cart='.esc_attr($woo_id).'&reservation_id='.esc_attr($insert_id));
464
465 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) use ($url_pay){
466 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-success" role="alert">'.esc_html__('Reservation created, auto redirect to order page', 'wpdirectorykit').'</div>';
467 $filter_output['redirect'] = $url_pay;
468 return $filter_output;
469 } );
470 }
471 }
472 } else {
473
474 }
475 /* message */
476 $data_message = array();
477 $data_message['user'] = get_userdata(get_current_user_id());
478 $data_message['user_owner'] = get_userdata(get_current_user_id());
479 $data_message['listing'] = $listing;
480 $data_message['user_owner'] = $user_data_owner;
481 $data_message['pay_link'] = $url_pay;
482 $data_message['hours_for_payment'] = false;
483 $data_message['reservation'] = $data;
484 $data_message['reservation_id'] = $insert_id;
485
486 if(wdk_get_option(('wdk_bookings_time_for_payment'))) {
487 $data_message['hours_for_payment'] = intval(wdk_get_option(('wdk_bookings_time_for_payment')));
488
489 /* set date_expire for reservation */
490 $update_data = array('date_expire'=>esc_sql(date("Y-m-d H:i:s", strtotime("+".intval(wdk_get_option(('wdk_bookings_time_for_payment')))." hours"))));
491 $Winter_MVC_wdk_bookings->reservation_m->insert($update_data, $insert_id);
492 }
493
494 wdk_mail(wdk_show_data('user_email', $data_message['user'], '' , TRUE, TRUE), __('Reservation waiting for payment', 'wpdirectorykit'), $data_message, 'reservation_user_payment_notify');
495 } else {
496 /* manual pay */
497 global $Winter_MVC_WDK;
498 $user_owner_id = NULL;
499 $Winter_MVC_WDK->model('listingusers_m');
500 $Winter_MVC_WDK->model('listing_m');
501 $Winter_MVC_WDK->load_helper('listing');
502 $listing = $Winter_MVC_WDK->listing_m->get($post_id, TRUE);
503 $user = get_userdata( wmvc_show_data('user_id', $data) );
504
505 $user_owner_id = NULL;
506 $user_data_owner = NULL;
507 if(wmvc_show_data('user_id_editor', $listing, '', TRUE, TRUE )) {
508 $user_owner_id = wmvc_show_data('user_id_editor', $listing, '', TRUE, TRUE );
509 $user_data_owner = get_userdata( wmvc_show_data('user_id_editor', $listing, false, TRUE, TRUE ) );
510 }
511
512 if(empty($user_data_owner)) {
513 $user_data_owner = array(
514 'display_name' => __('Administrator', 'wpdirectorykit'),
515 'user_email' => get_bloginfo('admin_email'),
516 );
517 }
518
519 /* message */
520 $data_message = array();
521 $data_message['user'] = $user;
522 $data_message['user_owner'] = $user_data_owner;
523 $data_message['listing'] = $listing;
524 $data_message['reservation'] = $data;
525 $data_message['reservation_id'] = $insert_id;
526 $data_message['data'] = array(
527 __('Reservation ID', 'wpdirectorykit')=> $insert_id,
528 __('Date From', 'wpdirectorykit')=> wdk_get_date($date_from),
529 __('Date To', 'wpdirectorykit')=> wdk_get_date($date_to),
530 );
531
532 $nights = (int)abs(strtotime($date_to) - strtotime($date_from))/(60*60*24);
533 $guests_number = intval(wmvc_show_data('guests_number_adults', $_POST, 0)) + intval(wmvc_show_data('guests_number_childs', $_POST, 0));
534 foreach ($calendar_fees as $fee) {
535 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
536
537 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
538 if(!wmvc_show_data('is_required', $fee, false,TRUE,TRUE) && !isset($_POST['fee_'.$field])) {
539
540 } else {
541 if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_night') {
542 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $nights;
543 } else if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_person') {
544 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $guests_number;
545 } else {
546 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE));
547 }
548 }
549 }
550
551 $data_message['data'][__('Total Price', 'wpdirectorykit')] = wmvc_show_data('price', $price).wdk_booking_currency_symbol();
552
553 $data_message['notes'] = $note;
554 if(wmvc_show_data('payment_info', $calendar, false, TRUE, TRUE)) {
555 $data_message['data'][__('Payment info', 'wpdirectorykit')] = str_replace(PHP_EOL,'<br style="line-height: 0;">', wmvc_show_data('payment_info', $calendar, false, TRUE, TRUE));
556 }
557
558 $ret = wdk_mail(wdk_show_data('user_email', $data_message['user'], '' , TRUE, TRUE), __('Reservation approved, waiting for payment', 'wpdirectorykit'), $data_message, 'reservation_approved_visitor');
559
560 $ret = wdk_mail(wdk_show_data('user_email', $data_message['user_owner'], '' , TRUE, TRUE), __('New Reservation approved, please confirm as paid when you receive payment', 'wpdirectorykit'), $data_message, 'reservation_approved_owner');
561
562 if( $ret) {
563 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) {
564 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-success" role="alert">'.esc_html__('Reservation sent, please check your email with payment details', 'wpdirectorykit').'</div>';
565 return $filter_output;
566 } );
567 }
568 else
569 {
570 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) {
571 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Server can\'t send emails, please use SMTP mail configuration.', 'wpdirectorykit').'</div>';
572 $filter_output['no_clear_from'] = true;
573 return $filter_output;
574 } );
575 }
576 }
577
578 } else {
579 /* auto is_enable_noapprovements disabled */
580 global $Winter_MVC_WDK;
581 $Winter_MVC_WDK->model('listingusers_m');
582 $Winter_MVC_WDK->model('listing_m');
583 $Winter_MVC_WDK->load_helper('listing');
584
585 $data_listing = $Winter_MVC_WDK->listing_m->get($post_id, TRUE);
586 $user_client = get_userdata( wmvc_show_data('user_id', $data) );
587 /* owner data */
588 $user_owner = NULL;
589 $owner_email = get_bloginfo('admin_email');
590
591 if(wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE )) {
592 $user_owner = get_userdata( wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE ) );
593 if($user_owner)
594 $owner_email = $user_owner->user_email;
595 }
596
597 /* waiting approve owner */
598 $data_message = array();
599 $data_message['user_owner'] = $user_owner;
600 $data_message['user_client'] = $user_client;
601 $data_message['reservation_id'] = $insert_id;
602 $data_message['reservation'] = $data; /* reservation data */
603 $data_message['listing'] = $data_listing;
604 $data_message['data'] = array(
605 __('Reservation ID', 'wpdirectorykit')=> $insert_id,
606 __('Date From', 'wpdirectorykit')=> wdk_get_date($date_from),
607 __('Date To', 'wpdirectorykit')=> wdk_get_date($date_to),
608 );
609 $nights = (int)abs(strtotime($date_to) - strtotime($date_from))/(60*60*24);
610 $guests_number = intval(wmvc_show_data('guests_number_adults', $_POST, 0)) + intval(wmvc_show_data('guests_number_childs', $_POST, 0));
611 foreach ($calendar_fees as $fee) {
612 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
613
614 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
615 if(!wmvc_show_data('is_required', $fee, false,TRUE,TRUE) && !isset($_POST['fee_'.$field])) {
616
617 } else {
618 if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_night') {
619 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $nights;
620 } else if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_person') {
621 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $guests_number;
622 } else {
623 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE));
624 }
625 }
626 }
627
628 $data_message['data'][__('Total Price', 'wpdirectorykit')] = wmvc_show_data('price', $price).wdk_booking_currency_symbol();
629
630 $data_message['notes'] = $note;
631
632 if(wmvc_show_data ('сhildrens_allowed', $_POST, false))
633 $data_message['data'][__('Childrens', 'wpdirectorykit')] = 'yes';
634
635 if(wmvc_show_data ('pets_allowed', $_POST, false))
636 $data_message['data'][__('Pets', 'wpdirectorykit')] = 'yes';
637
638 if(empty($calendar->is_guests_disabled)){
639 if(wmvc_show_data ('guests_number_adults', $_POST, false))
640 $data_message['data'][__('Guests Adult', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('guests_number_adults', $_POST));
641 if(wmvc_show_data ('guests_number_childs', $_POST, false))
642 $data_message['data'][__('Guests Childs', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('guests_number_childs', $_POST));
643 }
644
645 if(wmvc_show_data ('Name', $_POST, false))
646 $data_message['data'][__('Name', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('Name', $_POST));
647
648 if(wmvc_show_data ('Email', $_POST, false))
649 $data_message['data'][__('Email', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('Email', $_POST));
650
651 if(wmvc_show_data ('Message', $_POST, false))
652 $data_message['data'][__('Message', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('Message', $_POST));
653
654 $ret = wdk_mail( $owner_email, __('New Reservation Waiting For Approvement', 'wpdirectorykit'), $data_message, 'reservation_waiting_for_approve_owner');
655
656 /* waiting approve to client */
657 $ret = wdk_mail(wdk_show_data('user_email', $user_client, '' , TRUE, TRUE), __('Your reservation waiting approvement by owner', 'wpdirectorykit'), $data_message, 'reservation_waiting_for_approve_visitor');
658
659 if( $ret) {
660 add_filter( 'eli/ajax-handler/filter_output', function($filter_output){
661 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-success" role="alert">'.esc_html__('Thanks on reservation, after owner approvement you will receive details for payment', 'wpdirectorykit').'</div>';
662 return $filter_output;
663 } );
664 }
665 else
666 {
667 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) {
668 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Server can\'t send emails, please use SMTP mail configuration.', 'wpdirectorykit').'</div>';
669 $filter_output['no_clear_from'] = true;
670 return $filter_output;
671 } );
672 }
673 }
674
675
676 }
677
678 /* skip default message */
679 $message_skip = true;
680 }
681 }
682
683 if(!$message_skip) {
684 /* message data */
685 if (!empty($post_id) && !empty($email)) {
686 $data = array(
687 'post_id' => ($post_id),
688 'email_sender' => ($email),
689 'message' => ($message),
690 'json_object' => json_encode($_POST),
691 'user_id_sender' => get_current_user_id()
692 );
693
694 $insert_idmessage = $this->WMVC->messages_m->insert($data, null);
695 if ($insert_idmessage && isset($_POST['listing_id'])) {
696 $data_mess= array();
697
698 foreach($_POST as $key => $value){
699 if($key=='element_id') continue;
700 if(in_array($key, array('eli_id','eli_page_id', 'eli_type','ID','filter','action','send_action_type', 'page_link', 'g-recaptcha-response'))) continue;
701
702 if(empty($value)) continue;
703
704 if(filter_var($value, FILTER_VALIDATE_URL ) || strpos( $value, 'http' ) !== FALSE) {
705 $data_mess []= '<p><strong>'.__(str_replace('_',' ', ucfirst($key)), 'wpdirectorykit').':</strong> <a href="'.esc_url($value).'">'.$value.'</a></p>';
706 } else {
707 $data_mess []= '<p><strong>'.__(str_replace('_',' ', ucfirst($key)), 'wpdirectorykit').':</strong> '.$value.'</p>';
708 }
709 }
710
711 global $Winter_MVC_WDK;
712 $Winter_MVC_WDK->model('listingusers_m');
713 $Winter_MVC_WDK->model('listing_m');
714 $Winter_MVC_WDK->load_helper('listing');
715 $data_listing = $Winter_MVC_WDK->listing_m->get($post_id, TRUE);
716
717 /* message for user */
718 if (!empty($email)) {
719 $data_message = array();
720 $data_message['email_data'] = $data;
721 $data_message['listing'] = $data;
722 $data_message['message'] = '';
723
724 if(function_exists('run_wdk_bookings')) {
725 if(isset($_POST['date_from']) && isset($_POST['date_to']) && !empty($_POST['date_from']) && !empty($_POST['date_to'])) {
726 $data_message['message'] .= '<h2>'.__('Date reservation change to', 'wpdirectorykit').'</h2>';
727 $data_message['message'] .= '<p>'.__('Details from contact form', 'wpdirectorykit').'</p>';
728 }
729 }
730
731 $data_message['message'] .= '<p>'.__('Contact message related to listing', 'wpdirectorykit').' <a href="'.esc_url(get_permalink($data_listing)).'">'.esc_html(wmvc_show_data('post_title', $data_listing, '', TRUE, TRUE)).'</a></p>';
732
733 $data_message['message'] .= implode('', $data_mess);
734
735 $ret = wdk_mail($email, __('Your messages sent on', 'wpdirectorykit').' '.html_entity_decode(get_bloginfo('name')), $data_message, 'new_message');
736 }
737
738 /* message for admin */
739 $data_message = array();
740 $data_message['email_data'] = $data;
741 $data_message['message'] = '';
742
743
744 $message_title = __('New Message', 'wpdirectorykit');
745
746 if(function_exists('run_wdk_bookings')) {
747
748 if(isset($_POST['date_from']) && isset($_POST['date_to']) && !empty($_POST['date_from']) && !empty($_POST['date_to'])) {
749 $data_message['message'] .= '<h2>'.__('Date reservation change to', 'wpdirectorykit').'</h2>';
750 $data_message['message'] .= '<p>'.__('Details from contact form', 'wpdirectorykit').'</p>';
751
752 $message_title = __('Contact message related to reservation on page', 'wpdirectorykit').' '.get_bloginfo('name');
753 }
754 }
755
756 $data_message['message'] .= '<p>'.__('Contact message related to listing', 'wpdirectorykit').' <a href="'.esc_url(get_permalink($data_listing)).'">'.esc_html(wmvc_show_data('post_title', $data_listing, '', TRUE, TRUE)).'</a></p>';
757 $data_message['message'] .= implode('', $data_mess);
758
759 /* owner data */
760 $user_owner = NULL;
761 $owner_email = get_bloginfo('admin_email');
762 if(wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE )) {
763 $user_owner = get_userdata( wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE ) );
764 if($user_owner)
765 $owner_email = $user_owner->user_email;
766 }
767
768 $ret = wdk_mail($owner_email, $message_title, $data_message, 'new_message', '', NULL, $email);
769 if( $ret) {
770 add_filter( 'eli/ajax-handler/filter_output', function($filter_output){
771 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-success" role="alert">'.esc_html__('Thanks on message', 'wpdirectorykit').'</div>';
772 return $filter_output;
773 } );
774 add_filter( 'eli/ajax-handler/filter_from_data', function ($form_data = array()) {
775 /* disable double sent to admin mail */
776 $form_data['settings']['disable_mail_send'] = 1;
777 return $form_data;
778 }
779 );
780 }
781 else
782 {
783 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) {
784 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.esc_html__('Server can\'t send emails, please use SMTP mail configuration.', 'wpdirectorykit').'</div>';
785 $filter_output['success'] = false;
786 $filter_output['no_clear_from'] = true;
787 return $filter_output;
788 } );
789 }
790
791
792
793
794 }
795 }
796 }
797
798
799 }
800
801 }
802