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

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