PluginProbe
WP Directory Kit / 1.2.8
WP Directory Kit v1.2.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-contact-form.php

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

413 lines 21.3 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::SWITCHER,
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 $this->end_controls_section();
178 }
179
180 /**
181 * Render the widget output on the frontend.
182 *
183 * Written in PHP and used to generate the final HTML.
184 *
185 * @since 1.1.0
186 *
187 * @access protected
188 */
189 protected function render() {
190 $settings = $this->get_settings();
191 global $wdk_listing_id;
192
193 $validation_form_email = false;
194 $validation_form_message = false;
195
196 foreach ($settings['form_fields'] as $field) {
197
198 $field_name = '';
199
200 if(empty($field['field_id'])) {
201 $field_name = $field['field_id'];
202 }
203
204 if(empty($field_name)) {
205 $field_name = $field['field_label'];
206 }
207
208 if(empty($field_name)) {
209 $field_name = $field['placeholder'];
210 }
211
212 if(strtolower($field_name) == 'email') {
213 $validation_form_email = true;
214 }
215
216 if(strtolower($field_name) == 'message') {
217 $validation_form_message = true;
218 }
219 }
220
221 if(!$validation_form_email || !$validation_form_message) {
222 $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%;">';
223 $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>';
224 $this->content ['wlisting_fields'] .= '</div>';
225 }
226
227
228 $post_id = get_the_ID();
229 if(isset($wdk_listing_id)){
230 $this->content ['wlisting_fields'] .= '<input name="listing_id" type="hidden" value="'.$wdk_listing_id.'" >';
231 $this->content ['wlisting_fields'] .= '<input name="listing_link" type="hidden" value="'.get_permalink(wmvc_show_data('post_id', $post_id)) .'" >';
232 }
233 wp_enqueue_script( 'wdk-booking-calculator-price' );
234 if(function_exists('run_wdk_bookings')) {
235 global $Winter_MVC_wdk_bookings;
236
237 $Winter_MVC_wdk_bookings->model('calendar_m');
238 $Winter_MVC_wdk_bookings->model('reservation_m');
239 $calendar = $Winter_MVC_wdk_bookings->calendar_m->get_pagination(NULL, NULL, array('post_id' => $wdk_listing_id, 'is_activated' => 1));
240
241 $dates = $Winter_MVC_wdk_bookings->reservation_m->get_enabled_dates($wdk_listing_id);
242 $dates = (str_replace("'",'',join(' ',$dates)));
243
244 /* booking price selector */
245 $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%;">
246 <div class="wdk_booking_auto_calculate_price"></div>
247 </div>'. $this->content ['wlisting_fields'];
248
249 if(wdk_get_option('wdk_bookings_enable_woocommerce_payments') && wc_get_cart_url() == home_url()) {
250 $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%;">
251 <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>
252 </div>';
253 }
254
255
256 if( $calendar && isset($calendar[0]) )
257 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'))){
258 $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%;">
259 <a href="'.wdk_login_url(wdk_current_url()).'" class="wdk-booking">
260 '.esc_html__('For Booking please login','wpdirectorykit').'
261 </a></div>';
262 } else {
263 $calendar = $calendar[0];
264
265 if(intval(wdk_get_option('wdk_bookings_max_guests')) > 0) {
266 $options = range(1, intval(wdk_get_option('wdk_bookings_max_guests')));
267 } else {
268 $options = range(1, 10);
269 }
270
271 if(empty($calendar->is_guests_disabled)) {
272
273 $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%;">';
274 $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).'">';
275 $output .= '<option value="">'.esc_html__('Adults','wpdirectorykit').'</option>';
276 foreach ($options as $key => $option){
277 if(!next($options)) {
278 $output .= '<option value="'.esc_attr($option).'+">'.esc_html($option).'+</option>';
279 }else {
280 $output .= '<option value="'.esc_attr($option).'">'.esc_html($option).'</option>';
281 }
282 }
283 $output .='</select>
284 </div>';
285
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 $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).'">';
288 $output .= '<option value="">'.esc_html__('Childs','wpdirectorykit').'</option>';
289 foreach ($options as $key => $option){
290 if(!next($options)) {
291 $output .= '<option value="'.esc_attr($option).'+">'.esc_html($option).'+</option>';
292 } else {
293 $output .= '<option value="'.esc_attr($option).'">'.esc_html($option).'</option>';
294 }
295 }
296 $output .='</select>
297 </div>';
298 $this->content ['wlisting_fields'] .= $output;
299 }
300
301
302 $attr = '';
303 if(get_option('wdk_bookings_calendar_single') && !wmvc_show_data('is_hour_enabled',$calendar, false)) {
304 $attr = "data-wdksingle = 'true'";
305 } else {
306
307 $custom_css = '.daterangepicker .drp-calendar.left .calendar-table::after {
308 content: "'.__('Please select from date/time','wpdirectorykit').'";
309 }';
310
311 $custom_css .= '.daterangepicker .drp-calendar.right .calendar-table::after {
312 content: "'.__('Please select to date/time','wpdirectorykit').'";
313 }';
314
315 wp_add_inline_style( 'daterangepicker', $custom_css);
316 }
317
318 if(!wmvc_show_data('is_hour_enabled',$calendar, false)){
319 $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%;">
320 <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').'">
321 </div>
322 ';
323 $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%;">
324 <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').'">
325 </div>
326 ';
327 } else {
328 $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%;">
329 <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').'">
330 </div>
331 ';
332 $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%;">
333 <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').'">
334 </div>
335 ';
336 }
337
338 if(true && function_exists('wdk_booking_currency_symbol')){
339 if(!empty($calendar->json_data_fees))
340 $calendar_fees = json_decode($calendar->json_data_fees );
341
342 if(!empty($calendar_fees)) {
343
344 foreach ($calendar_fees as $fee) {
345 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
346
347 $field = str_replace(' ','_',strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
348
349 $readonly = '';
350 if(wmvc_show_data('is_required', $fee, false,TRUE,TRUE)) {
351 $readonly = 'readonly disabled';
352 }
353
354 $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%;">
355 <label for="'.esc_attr($field).'">
356 <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)).'" >
357 '.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())).'/'.
358 ((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>
359 </label>
360 </div>';
361 }
362 }
363 }
364
365 if($settings['booking_hide_if_сhildrens_allowed_field'] != 'yes') {
366 $this->content ['wlisting_fields'] .='<div class="elementinvader_addons_for_elementor_f_group checkbox elementinvader_addons_for_elementor_f_group_el_сhildrens" style="width: 100%;-webkit-flex: 0 0 100%;flex: 0 0 100%;">
367 <label for="сhildrens_allowed">
368 <input name="сhildrens_allowed" id="сhildrens_allowed" type="checkbox" class="elementinvader_addons_for_elementor_f_field_checkbox" value="yes" placeholder="'.esc_attr__('Childrens allowed ','wpdirectorykit').'" >
369 '.esc_html__('Childrens ','wpdirectorykit').'
370 </label>
371 </div>';
372 }
373
374
375 if ($settings['booking_hide_if_pets_allowed_field'] != 'yes') {
376 $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%;">
377 <label for="pets_allowed">
378 <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').'" >
379 '.esc_html__('Pets', 'wpdirectorykit').'
380 </label>
381 </div>';
382 }
383
384 wp_enqueue_script( 'daterangepicker-moment' );
385
386 wp_enqueue_script( 'daterangepicker' );
387 wp_enqueue_style('daterangepicker');
388
389
390 }
391 }
392
393 if( is_user_logged_in()) {
394 wp_enqueue_script( 'wdk-notify' );
395 $data_user = get_userdata(get_current_user_id());
396 $custom_js ="
397 jQuery('document').ready(function($){
398 $('#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))."');
399 $('#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))."');
400 $('#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))."');
401 $('#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'))."');
402 })
403 ";
404 wp_add_inline_script( 'wdk-notify', $custom_js );
405 }
406
407
408 parent::render();
409 }
410
411 }
412
413