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

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