PluginProbe
WP Directory Kit / 1.4.8
WP Directory Kit v1.4.8
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.4.8, at elementor-extensions/class-ajax-handler.php

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