PluginProbe
WP Directory Kit / 1.5.5
WP Directory Kit v1.5.5
1.5.9 1.5.7 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 All 37 releases
wpdirectorykit / elementor-extensions / class-ajax-handler.php

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

831 lines 52.0 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 $ret =false;
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">'. sprintf(
577 esc_html__('Server can\'t send emails, please use SMTP mail configuration. Check %1$sGuide%2$s', 'wpdirectorykit'),
578 '<a href="https://wpdirectorykit.com/e-mail-sending-issues-smtp-mail-configuration/" target="_blank" style="text-decoration: underline">',
579 '</a>'
580 ).'</div>';
581 $filter_output['no_clear_from'] = true;
582 return $filter_output;
583 } );
584 }
585 }
586
587 } else {
588 /* auto is_enable_noapprovements disabled */
589 global $Winter_MVC_WDK;
590 $Winter_MVC_WDK->model('listingusers_m');
591 $Winter_MVC_WDK->model('listing_m');
592 $Winter_MVC_WDK->load_helper('listing');
593
594 $data_listing = $Winter_MVC_WDK->listing_m->get($post_id, TRUE);
595 $user_client = get_userdata( wmvc_show_data('user_id', $data) );
596 /* owner data */
597 $user_owner = NULL;
598 $owner_email = get_bloginfo('admin_email');
599
600 if(wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE )) {
601 $user_owner = get_userdata( wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE ) );
602 if($user_owner)
603 $owner_email = $user_owner->user_email;
604 }
605
606 /* waiting approve owner */
607 $data_message = array();
608 $data_message['user_owner'] = $user_owner;
609 $data_message['user_client'] = $user_client;
610 $data_message['reservation_id'] = $insert_id;
611 $data_message['reservation'] = $data; /* reservation data */
612 $data_message['listing'] = $data_listing;
613 $data_message['data'] = array(
614 __('Reservation ID', 'wpdirectorykit')=> $insert_id,
615 __('Date From', 'wpdirectorykit')=> wdk_get_date($date_from),
616 __('Date To', 'wpdirectorykit')=> wdk_get_date($date_to),
617 __('Nights', 'wpdirectorykit')=> wdk_calculate_nights(wdk_get_date($date_from), wdk_get_date($date_to)),
618 );
619 $nights = (int)abs(strtotime($date_to) - strtotime($date_from))/(60*60*24);
620 $guests_number = intval(wmvc_show_data('guests_number_adults', $_POST, 0)) + intval(wmvc_show_data('guests_number_childs', $_POST, 0));
621 foreach ($calendar_fees as $fee) {
622 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
623
624 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
625 if(!wmvc_show_data('is_required', $fee, false,TRUE,TRUE) && !isset($_POST['fee_'.$field])) {
626
627 } else {
628 if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_night') {
629 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $nights;
630 } else if(wmvc_show_data('calculation_base', $fee,'',TRUE,TRUE) == 'per_person') {
631 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE)) * $guests_number;
632 } else {
633 $data_message['data'][__('Price', 'wpdirectorykit').' '.wmvc_show_data('title', $fee, '-', TRUE, TRUE)] = intval(wmvc_show_data('value', $fee,'',TRUE,TRUE));
634 }
635 }
636 }
637
638 $data_message['data'][__('Total Price', 'wpdirectorykit')] = wmvc_show_data('price', $price).wdk_booking_currency_symbol();
639
640 $data_message['notes'] = $note;
641
642 if(wmvc_show_data ('сhildrens_allowed', $_POST, false))
643 $data_message['data'][__('Childrens', 'wpdirectorykit')] = 'yes';
644
645 if(wmvc_show_data ('pets_allowed', $_POST, false))
646 $data_message['data'][__('Pets', 'wpdirectorykit')] = 'yes';
647
648 if(empty($calendar->is_guests_disabled)){
649 if(wmvc_show_data ('guests_number_adults', $_POST, false))
650 $data_message['data'][__('Guests Adult', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('guests_number_adults', $_POST));
651 if(wmvc_show_data ('guests_number_childs', $_POST, false))
652 $data_message['data'][__('Guests Childs', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('guests_number_childs', $_POST));
653 }
654
655 if(wmvc_show_data ('Name', $_POST, false))
656 $data_message['data'][__('Name', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('Name', $_POST));
657
658 if(wmvc_show_data ('Email', $_POST, false))
659 $data_message['data'][__('Email', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('Email', $_POST));
660
661 if(wmvc_show_data ('Message', $_POST, false))
662 $data_message['data'][__('Message', 'wpdirectorykit')] = sanitize_text_field(wmvc_show_data ('Message', $_POST));
663
664 $ret = wdk_mail( $owner_email, __('New Reservation Waiting For Approvement', 'wpdirectorykit'), $data_message, 'reservation_waiting_for_approve_owner');
665
666 /* waiting approve to client */
667 $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');
668 $ret =false;
669 if( $ret) {
670 add_filter( 'eli/ajax-handler/filter_output', function($filter_output){
671 $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>';
672 return $filter_output;
673 } );
674 }
675 else
676 {
677 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) {
678 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'. sprintf(
679 esc_html__('Server can\'t send emails, please use SMTP mail configuration. Check %1$sGuide%2$s', 'wpdirectorykit'),
680 '<a href="https://wpdirectorykit.com/e-mail-sending-issues-smtp-mail-configuration/" target="_blank" style="text-decoration: underline">',
681 '</a>'
682 ).'</div>';
683 $filter_output['no_clear_from'] = true;
684 return $filter_output;
685 } );
686 }
687 }
688
689
690 }
691
692 /* skip default message */
693 $message_skip = true;
694 }
695 }
696
697 if(!$message_skip) {
698 /* message data */
699 if (!empty($post_id) && !empty($email)) {
700 $data = array(
701 'post_id' => ($post_id),
702 'email_sender' => ($email),
703 'message' => ($message),
704 'json_object' => json_encode($_POST),
705 'user_id_sender' => get_current_user_id()
706 );
707
708 $insert_idmessage = $this->WMVC->messages_m->insert($data, null);
709 if ($insert_idmessage && isset($_POST['listing_id'])) {
710 $data_mess= array();
711
712 foreach($_POST as $key => $value){
713 if($key=='element_id') continue;
714 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;
715
716 if(empty($value)) continue;
717
718 if(filter_var($value, FILTER_VALIDATE_URL ) || strpos( $value, 'http' ) !== FALSE) {
719 $data_mess []= '<p><strong>'.__(str_replace('_',' ', ucfirst($key)), 'wpdirectorykit').':</strong> <a href="'.esc_url($value).'">'.$value.'</a></p>';
720 } else {
721 $data_mess []= '<p><strong>'.__(str_replace('_',' ', ucfirst($key)), 'wpdirectorykit').':</strong> '.$value.'</p>';
722 }
723 }
724
725 global $Winter_MVC_WDK;
726 $Winter_MVC_WDK->model('listingusers_m');
727 $Winter_MVC_WDK->model('listing_m');
728 $Winter_MVC_WDK->load_helper('listing');
729 $data_listing = $Winter_MVC_WDK->listing_m->get($post_id, TRUE);
730
731 if(function_exists('run_wdk_bookings')) {
732 if(isset($_POST['date_from']) && isset($_POST['date_to']) && !empty($_POST['date_from']) && !empty($_POST['date_to'])) {
733 $data_mess []= '<p><strong>'.__('Nights', 'wpdirectorykit').':</strong> '.wdk_calculate_nights(wdk_get_date($_POST['date_from']), wdk_get_date($_POST['date_to'])).'</p>';
734 }
735 }
736
737 /* message for user */
738 if (!empty($email)) {
739 $data_message = array();
740 $data_message['email_data'] = $data;
741 $data_message['listing'] = $data;
742 $data_message['message'] = '';
743
744 if(function_exists('run_wdk_bookings')) {
745 if(isset($_POST['date_from']) && isset($_POST['date_to']) && !empty($_POST['date_from']) && !empty($_POST['date_to'])) {
746 $data_message['message'] .= '<h2>'.__('Date reservation change to', 'wpdirectorykit').'</h2>';
747 $data_message['message'] .= '<p>'.__('Details from contact form', 'wpdirectorykit').'</p>';
748 }
749 }
750
751 $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>';
752
753 $data_message['message'] .= implode('', $data_mess);
754
755 $ret = wdk_mail($email, __('Your messages sent on', 'wpdirectorykit').' '.html_entity_decode(get_bloginfo('name')), $data_message, 'new_message');
756 }
757
758 /* message for admin */
759 $data_message = array();
760 $data_message['email_data'] = $data;
761 $data_message['message'] = '';
762
763
764 $message_title = __('New Message', 'wpdirectorykit');
765
766 if(function_exists('run_wdk_bookings')) {
767
768 if(isset($_POST['date_from']) && isset($_POST['date_to']) && !empty($_POST['date_from']) && !empty($_POST['date_to'])) {
769 $data_message['message'] .= '<h2>'.__('Date reservation change to', 'wpdirectorykit').'</h2>';
770 $data_message['message'] .= '<p>'.__('Details from contact form', 'wpdirectorykit').'</p>';
771
772 $message_title = __('Contact message related to reservation on page', 'wpdirectorykit').' '.get_bloginfo('name');
773 }
774 }
775
776 $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>';
777 $data_message['message'] .= implode('', $data_mess);
778
779 /* owner data */
780 $user_owner = NULL;
781 $owner_email = get_bloginfo('admin_email');
782 if(wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE )) {
783 $user_owner = get_userdata( wmvc_show_data('user_id_editor', $data_listing, false, TRUE, TRUE ) );
784 if($user_owner)
785 $owner_email = $user_owner->user_email;
786 }
787
788 $ret = wdk_mail($owner_email, $message_title, $data_message, 'new_message', '', NULL, $email);
789 $ret =false;
790 if( $ret) {
791 add_filter( 'eli/ajax-handler/filter_output', function($filter_output){
792 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-success" role="alert">'.esc_html__('Thanks for the message.', 'wpdirectorykit').'</div>';
793 return $filter_output;
794 } );
795 add_filter( 'eli/ajax-handler/filter_from_data', function ($form_data = array()) {
796 /* disable double sent to admin mail */
797 $form_data['settings']['disable_mail_send'] = 1;
798 return $form_data;
799 }
800 );
801 }
802 else
803 {
804 add_filter( 'eli/ajax-handler/filter_output', function($filter_output) {
805 $filter_output['message'] = '<div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger" role="alert">'.
806 sprintf(
807 esc_html__('Server can\'t send emails, please use SMTP mail configuration. Check %1$sGuide%2$s', 'wpdirectorykit'),
808 '<a href="https://wpdirectorykit.com/e-mail-sending-issues-smtp-mail-configuration/" target="_blank" style="text-decoration: underline">',
809 '</a>'
810 )
811 .'</div>';
812
813
814 $filter_output['success'] = false;
815 $filter_output['no_clear_from'] = true;
816 return $filter_output;
817 } );
818 }
819
820
821
822
823 }
824 }
825 }
826
827
828 }
829
830 }
831