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

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