PluginProbe
WP Directory Kit / 1.1.8
WP Directory Kit v1.1.8
1.5.9 1.5.7 1.5.6 1.5.5 1.5.4 1.5.3 trunk 1.1.0 1.1.6 1.1.8 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.8 All 37 releases
wpdirectorykit / elementor-extensions / class-ajax-handler.php

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

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