PluginProbe
WP Directory Kit / 1.3.1
WP Directory Kit v1.3.1
1.5.6 1.5.5 1.5.4 1.5.3 trunk 1.1.0 1.1.6 1.1.8 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.8 1.4.0 1.4.1 All 35 releases
wpdirectorykit / elementor-extensions / class-contact-form.php

class-contact-form.php in WP Directory Kit 1.3.1, at elementor-extensions/class-contact-form.php

423 lines 21.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Wdk\Elementor\Extensions;
4
5
6 use Wdk\Elementor\Widgets\WdkElementorBase;
7 use Elementor\Widget_Base;
8 use Elementor\Controls_Manager;
9 use Elementor\Utils;
10 use Elementor\Typography;
11 use Elementor\Editor;
12 use Elementor\Plugin;
13 use Elementor\Repeater;
14 use Elementor\Core\Schemes;
15 use Elementor\Icons_Manager;
16 use Elementor\Group_Control_Typography;
17 use Elementor\Group_Control_Border;
18 use Elementor\Group_Control_Box_Shadow;
19
20 if (!defined('ABSPATH'))
21 exit; // Exit if accessed directly
22
23 /**
24 * @since 1.1.0
25 */
26 class WdkContactFormExt extends \ElementinvaderAddonsForElementor\Widgets\EliContact_Form {
27 public $field_types = array();
28
29 public function __construct($data = array(), $args = null) {
30 parent::__construct($data, $args);
31 }
32
33 /**
34 * Retrieve the widget name.
35 *
36 * @since 1.1.0
37 *
38 * @access public
39 *
40 * @return string Widget name.
41 */
42 public function get_name() {
43 return 'wdk-class-contact-form';
44 }
45
46 /**
47 * Retrieve the list of categories the widget belongs to.
48 *
49 * Used to determine where to display the widget in the editor.
50 *
51 * Note that currently Elementor supports only one category.
52 * When multiple categories passed, Elementor uses the first one.
53 *
54 * @since 1.1.0
55 *
56 * @access public
57 *
58 * @return array Widget categories.
59 */
60 public function get_categories() {
61 return [ 'wdk-elementor-listing-preview' ];
62 }
63
64 /**
65 * Retrieve the widget title.
66 *
67 * @since 1.1.0
68 *
69 * @access public
70 *
71 * @return string Widget title.
72 */
73 public function get_title() {
74 return esc_html__('Wdk Contact Form', 'wpdirectorykit');
75 }
76
77 /**
78 * Retrieve the widget icon.
79 *
80 * @since 1.1.0
81 *
82 * @access public
83 *
84 * @return string Widget icon.
85 */
86 public function get_icon() {
87 return 'eicon-mail';
88 }
89
90 /**
91 * Register the widget controls.
92 *
93 * Adds different input fields to allow the user to change and customize the widget settings.
94 *
95 * @since 1.1.0
96 *
97 * @access protected
98 */
99 protected function register_controls() {
100 //$this->field_types ['user_id'] = esc_html__('Hidden Field Agent ID', 'wpdirectorykit');
101 parent::register_controls();
102
103 $items = [
104 [
105 'key'=>'button_booking',
106 'label'=> esc_html__('Button Booking', 'wpdirectorykit'),
107 'selector'=>'.elementinvader_contact_form .wdk-booking',
108 'options'=>'full',
109 ],
110 ];
111
112 foreach ($items as $item) {
113 $this->start_controls_section(
114 $item['key'].'_section',
115 [
116 'label' => $item['label'],
117 'tab' => Controls_Manager::TAB_STYLE,
118 ]
119 );
120
121 $this->add_responsive_control(
122 $item['key'].'_hide',
123 [
124 'label' => esc_html__('Hide Element', 'wpdirectorykit'),
125 'type' => Controls_Manager::SWITCHER,
126 'none' => esc_html__('Hide', 'wpdirectorykit'),
127 'block' => esc_html__('Show', 'wpdirectorykit'),
128 'return_value' => 'none',
129 'default' => '',
130 'selectors' => [
131 '{{WRAPPER}} '.$item['selector'] => 'display: {{VALUE}};',
132 ],
133 ]
134 );
135
136 $selectors = array(
137 'normal' => '{{WRAPPER}} '.$item['selector'],
138 'hover'=>'{{WRAPPER}} '.$item['selector'].'%1$s'
139 );
140
141 $this->generate_renders_tabs($selectors, $item['key'].'_dynamic', $item['options']);
142
143 $this->end_controls_section();
144 }
145
146 $this->start_controls_section(
147 'booking_section',
148 [
149 'label' => esc_html__('Booking', 'wpdirectorykit'),
150 'tab' => 'fields_tab',
151 ]
152 );
153
154 $this->add_control(
155 'booking_hide_if_сhildrens_allowed_field',
156 [
157 'label' => esc_html__('Childrens allowed field hide', 'wpdirectorykit'),
158 'type' => Controls_Manager::HIDDEN,
159 'none' => esc_html__('Yes', 'wpdirectorykit'),
160 'block' => esc_html__('No', 'wpdirectorykit'),
161 'return_value' => 'yes',
162 'default' => '',
163 ]
164 );
165
166 $this->add_control(
167 'booking_hide_if_pets_allowed_field',
168 [
169 'label' => esc_html__('Pets allowed field hide', 'wpdirectorykit'),
170 'type' => Controls_Manager::SWITCHER,
171 'none' => esc_html__('Yes', 'wpdirectorykit'),
172 'block' => esc_html__('No', 'wpdirectorykit'),
173 'return_value' => 'yes',
174 'default' => '',
175 ]
176 );
177
178 $this->add_control(
179 'booking_hide_count_childs_field',
180 [
181 'label' => esc_html__('Hide booking field count childs', 'wpdirectorykit'),
182 'type' => Controls_Manager::SWITCHER,
183 'none' => esc_html__('Yes', 'wpdirectorykit'),
184 'block' => esc_html__('No', 'wpdirectorykit'),
185 'return_value' => 'yes',
186 'default' => '',
187 ]
188 );
189 $this->end_controls_section();
190 }
191
192 /**
193 * Render the widget output on the frontend.
194 *
195 * Written in PHP and used to generate the final HTML.
196 *
197 * @since 1.1.0
198 *
199 * @access protected
200 */
201 protected function render() {
202 $settings = $this->get_settings();
203 global $wdk_listing_id;
204
205 $validation_form_email = false;
206 $validation_form_message = false;
207
208 foreach ($settings['form_fields'] as $field) {
209
210 $field_name = '';
211
212 if(empty($field['field_id'])) {
213 $field_name = $field['field_id'];
214 }
215
216 if(empty($field_name)) {
217 $field_name = $field['field_label'];
218 }
219
220 if(empty($field_name)) {
221 $field_name = $field['placeholder'];
222 }
223
224 if(strtolower($field_name) == 'email') {
225 $validation_form_email = true;
226 }
227
228 if(strtolower($field_name) == 'message') {
229 $validation_form_message = true;
230 }
231 }
232
233 if(!$validation_form_email || !$validation_form_message) {
234 $this->content ['wlisting_fields'] .= '<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">';
235 $this->content ['wlisting_fields'] .= '<div role="alert" class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger">'.esc_html__('Field with ID "email" and "message" missing, please add fields with this ID-s or form can\'t work properly','wpdirectorykit').'</div>';
236 $this->content ['wlisting_fields'] .= '</div>';
237 }
238
239
240 $post_id = get_the_ID();
241 if(isset($wdk_listing_id)){
242 $this->content ['wlisting_fields'] .= '<input name="listing_id" type="hidden" value="'.$wdk_listing_id.'" >';
243 $this->content ['wlisting_fields'] .= '<input name="listing_link" type="hidden" value="'.get_permalink(wmvc_show_data('post_id', $post_id)) .'" >';
244 }
245 wp_enqueue_script( 'wdk-booking-calculator-price' );
246 if(function_exists('run_wdk_bookings')) {
247 global $Winter_MVC_wdk_bookings;
248
249 $Winter_MVC_wdk_bookings->model('calendar_m');
250 $Winter_MVC_wdk_bookings->model('reservation_m');
251 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_pagination(NULL, NULL, array('post_id' => $wdk_listing_id, 'is_activated' => 1));
252
253 $dates = $Winter_MVC_wdk_bookings->reservation_m->get_enabled_dates($wdk_listing_id);
254 $dates = (str_replace("'",'',join(' ',$dates)));
255
256 /* booking price selector */
257 $this->content ['wlisting_fields'] ='<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">
258 <div class="wdk_booking_auto_calculate_price"></div>
259 </div>'. $this->content ['wlisting_fields'];
260
261 if(wdk_get_option('wdk_bookings_enable_woocommerce_payments') && wc_get_cart_url() == home_url()) {
262 $this->content ['wlisting_fields'] .= '<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">
263 <div class="elementinvader_addons_for_elementor_alert elementinvader_addons_for_elementor_alert-danger">'.esc_html__('Missing cart page in WooCommerce, please configure by guide','wpdirectorykit').'</div>
264 </div>';
265 }
266
267
268 if( $calendar && isset($calendar[0]) )
269 if( !is_user_logged_in() && ((isset($settings['booking_hide_if_not_login']) && !$settings['booking_hide_if_not_login'] == 'yes') || wmvc_show_data('is_disable_for_not_login',$calendar[0],false, TRUE, TRUE) || wdk_get_option('wdk_booking_disable_for_not_login'))){
270 $this->content ['wlisting_fields'] .= '<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">
271 <a href="'.wdk_login_url(wdk_current_url()).'" class="wdk-booking">
272 '.esc_html__('For Booking please login','wpdirectorykit').'
273 </a></div>';
274 } else {
275 $calendar = $calendar[0];
276
277 if(intval(wdk_get_option('wdk_bookings_max_guests')) > 0) {
278 $options = range(1, intval(wdk_get_option('wdk_bookings_max_guests')));
279 } else {
280 $options = range(1, 10);
281 }
282
283 if(empty($calendar->is_guests_disabled)) {
284
285 if($settings['booking_hide_count_childs_field'] != 'yes') {
286 $output ='<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 50%;-webkit-flex: 0 0 50%;flex: 0 0 50%;">';
287 } else {
288 $output ='<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">';
289 }
290
291 $output .='<select name="guests_number_adults" id="guests_number_adults" type="select" class="elementinvader_addons_for_elementor_f_field" value="'.wmvc_show_data('guests_number', $_GET).'">';
292 $output .= '<option value="">'.esc_html__('Adults','wpdirectorykit').'</option>';
293 foreach ($options as $key => $option){
294 if(!next($options)) {
295 $output .= '<option value="'.esc_attr($option).'+">'.esc_html($option).'+</option>';
296 }else {
297 $output .= '<option value="'.esc_attr($option).'">'.esc_html($option).'</option>';
298 }
299 }
300 $output .='</select>
301 </div>';
302
303 if($settings['booking_hide_count_childs_field'] != 'yes') {
304 $output .='<div class="elementinvader_addons_for_elementor_f_group elementinvader_addons_for_elementor_f_group_el_guests" style="width: 50%;-webkit-flex: 0 0 50%;flex: 0 0 50%;">';
305 $output .='<select name="guests_number_childs" id="guests_number_childs" type="select" class="elementinvader_addons_for_elementor_f_field" value="'.wmvc_show_data('guests_number', $_GET).'">';
306 $output .= '<option value="">'.esc_html__('Childs','wpdirectorykit').'</option>';
307 foreach ($options as $key => $option){
308 if(!next($options)) {
309 $output .= '<option value="'.esc_attr($option).'+">'.esc_html($option).'+</option>';
310 } else {
311 $output .= '<option value="'.esc_attr($option).'">'.esc_html($option).'</option>';
312 }
313 }
314 $output .='</select>
315 </div>';
316 }
317
318 $this->content ['wlisting_fields'] .= $output;
319 }
320
321
322 $attr = '';
323 if(get_option('wdk_bookings_calendar_single') && !wmvc_show_data('is_hour_enabled',$calendar, false)) {
324 $attr = "data-wdksingle = 'true'";
325 } else {
326
327 $custom_css = '.daterangepicker .drp-calendar.left .calendar-table::after {
328 content: "'.__('Please select from date/time','wpdirectorykit').'";
329 }';
330
331 $custom_css .= '.daterangepicker .drp-calendar.right .calendar-table::after {
332 content: "'.__('Please select to date/time','wpdirectorykit').'";
333 }';
334
335 wp_add_inline_style( 'daterangepicker', $custom_css);
336 }
337
338 if(!wmvc_show_data('is_hour_enabled',$calendar, false)){
339 $this->content ['wlisting_fields'] .= ' <div class="elementinvader_addons_for_elementor_f_group text elementinvader_addons_for_elementor_f_group_el_1" style="width: 50%;-webkit-flex: 0 0 50%;flex: 0 0 50%;">
340 <input '.$attr.' data-allowdates="'.$dates.'" name="date_from" id="date_from" type="text" class="date_from wdk-fielddate_range elementinvader_addons_for_elementor_f_field" placeholder="'.esc_html__('Date Range','wpdirectorykit').'">
341 </div>
342 ';
343 $this->content ['wlisting_fields'] .= ' <div class="elementinvader_addons_for_elementor_f_group text elementinvader_addons_for_elementor_f_group_el_1" style="width: 50%;-webkit-flex: 0 0 50%;flex: 0 0 50%;">
344 <input '.$attr.' data-allowdates="'.$dates.'" name="date_to" id="date_to" type="text" class="date_to wdk-fielddate_range elementinvader_addons_for_elementor_f_field" placeholder="'.esc_html__('Date Range','wpdirectorykit').'">
345 </div>
346 ';
347 } else {
348 $this->content ['wlisting_fields'] .= ' <div class="elementinvader_addons_for_elementor_f_group text elementinvader_addons_for_elementor_f_group_el_1" style="width: 50%;-webkit-flex: 0 0 50%;flex: 0 0 50%;">
349 <input '.$attr.' data-allowdates="'.$dates.'" name="date_from" id="date_from" type="text" class="date_from wdk-fielddatetime_range elementinvader_addons_for_elementor_f_field" placeholder="'.esc_html__('Date Range','wpdirectorykit').'">
350 </div>
351 ';
352 $this->content ['wlisting_fields'] .= ' <div class="elementinvader_addons_for_elementor_f_group text elementinvader_addons_for_elementor_f_group_el_1" style="width: 50%;-webkit-flex: 0 0 50%;flex: 0 0 50%;">
353 <input '.$attr.' data-allowdates="'.$dates.'" name="date_to" id="date_to" type="text" class="date_to wdk-fielddatetime_range elementinvader_addons_for_elementor_f_field" placeholder="'.esc_html__('Date Range','wpdirectorykit').'">
354 </div>
355 ';
356 }
357
358 if(true && function_exists('wdk_booking_currency_symbol')){
359 if(!empty($calendar->json_data_fees))
360 $calendar_fees = json_decode($calendar->json_data_fees );
361
362 if(!empty($calendar_fees)) {
363
364 foreach ($calendar_fees as $fee) {
365 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
366
367 $field = wdk_generate_slug(strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
368
369 $readonly = '';
370 if(wmvc_show_data('is_required', $fee, false,TRUE,TRUE)) {
371 $readonly = 'readonly disabled';
372 }
373
374 $this->content ['wlisting_fields'] .='<div class="elementinvader_addons_for_elementor_f_group checkbox fee_group" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">
375 <label for="'.esc_attr($field).'">
376 <input name="fee_'.esc_attr($field).'" checked="checked" '.esc_attr($readonly).' id="'.esc_attr($field).'" type="checkbox" class="elementinvader_addons_for_elementor_f_field_checkbox fees_checkbox" value="yes" placeholder="'.esc_attr(wmvc_show_data('title', $fee,'-',TRUE,TRUE)).'" >
377 '.esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE)).'<span class="fee_price"> ('.esc_html(wmvc_show_data('value', $fee,'-',TRUE,TRUE)).esc_html(apply_filters( 'wdk-currency-conversion/convert/symbol', wdk_booking_currency_symbol())).'/'.
378 ((isset($Winter_MVC_wdk_bookings->calendar_m->calculation_base[wmvc_show_data('calculation_base', $fee,'-',TRUE,TRUE)])) ? $Winter_MVC_wdk_bookings->calendar_m->calculation_base[wmvc_show_data('calculation_base', $fee,'-',TRUE,TRUE)] : 'per stay').')</span>
379 </label>
380 </div>';
381 }
382 }
383 }
384
385 if ($settings['booking_hide_if_pets_allowed_field'] != 'yes') {
386 $this->content ['wlisting_fields'] .='<div class="elementinvader_addons_for_elementor_f_group checkbox elementinvader_addons_for_elementor_f_group_el_pets" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">
387 <label for="pets_allowed">
388 <input name="pets_allowed" id="pets_allowed" type="checkbox" class="elementinvader_addons_for_elementor_f_field_checkbox" value="yes" placeholder="'.esc_attr__('Pets allowed', 'wpdirectorykit').'" >
389 '.esc_html__('Pets', 'wpdirectorykit').'
390 </label>
391 </div>';
392 }
393
394 wp_enqueue_script( 'daterangepicker-moment' );
395
396 wp_enqueue_script( 'daterangepicker' );
397 wp_enqueue_style('daterangepicker');
398
399
400 }
401 }
402
403 if( is_user_logged_in()) {
404 wp_enqueue_script( 'wdk-notify' );
405 $data_user = get_userdata(get_current_user_id());
406 $custom_js ="
407 jQuery('document').ready(function($){
408 $('#elementinvader_addons_for_elementor_".esc_html($this->get_id_int())." #namename').val('".esc_js(wdk_show_data('display_name', $data_user, '' , TRUE, TRUE))."').attr('data-default','".esc_js(wdk_show_data('display_name', $data_user, '' , TRUE, TRUE))."');
409 $('#elementinvader_addons_for_elementor_".esc_html($this->get_id_int())." #emailemail').val('".esc_js(wdk_show_data('user_email', $data_user, '' , TRUE, TRUE))."').attr('data-default','".esc_js(wdk_show_data('user_email', $data_user, '' , TRUE, TRUE))."');
410 $('#elementinvader_addons_for_elementor_".esc_html($this->get_id_int())." [name=\"Phone\"]').val('".esc_js(wdk_show_data('wdk_phone', $data_user, '' , TRUE, TRUE))."').attr('data-default','".esc_js(wdk_show_data('wdk_phone', $data_user, '' , TRUE, TRUE))."');
411 $('#elementinvader_addons_for_elementor_".esc_html($this->get_id_int())." #messagemessage').val('".esc_js(esc_html__('Interested for listing', 'wpdirectorykit'))."').attr('data-default','".esc_js(esc_html__('Interested for listing', 'wpdirectorykit'))."');
412 })
413 ";
414 wp_add_inline_script( 'wdk-notify', $custom_js );
415 }
416
417
418 parent::render();
419 }
420
421 }
422
423