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-contact-form.php

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

395 lines 20.0 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));
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( $calendar && isset($calendar[0]) )
250 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))){
251 $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%;">
252 <a href="'.wdk_login_url(wdk_current_url()).'" class="wdk-booking">
253 '.esc_html__('For Booking please login','wpdirectorykit').'
254 </div></a>';
255 } else {
256 $calendar = $calendar[0];
257
258 if(intval(wdk_get_option('wdk_bookings_max_guests')) > 0) {
259 $options = range(1, intval(wdk_get_option('wdk_bookings_max_guests')));
260 } else {
261 $options = range(1, 10);
262 }
263
264 if(empty($calendar->is_guests_disabled)) {
265
266 $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%;">';
267 $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).'">';
268 $output .= '<option value="">'.esc_html__('Adults','wpdirectorykit').'</option>';
269 foreach ($options as $key => $option){
270 if(!next($options)) {
271 $output .= '<option value="'.esc_attr($option).'+">'.esc_html($option).'+</option>';
272 }else {
273 $output .= '<option value="'.esc_attr($option).'">'.esc_html($option).'</option>';
274 }
275 }
276 $output .='</select>
277 </div>';
278
279 $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%;">';
280 $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).'">';
281 $output .= '<option value="">'.esc_html__('Childs','wpdirectorykit').'</option>';
282 foreach ($options as $key => $option){
283 if(!next($options)) {
284 $output .= '<option value="'.esc_attr($option).'+">'.esc_html($option).'+</option>';
285 } else {
286 $output .= '<option value="'.esc_attr($option).'">'.esc_html($option).'</option>';
287 }
288 }
289 $output .='</select>
290 </div>';
291 $this->content ['wlisting_fields'] .= $output;
292 }
293
294
295 $attr = '';
296 if(get_option('wdk_bookings_calendar_single')) {
297 $attr = "data-wdksingle = 'true'";
298 }
299
300 if(!wmvc_show_data('is_hour_enabled',$calendar, false)){
301 $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%;">
302 <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').'">
303 </div>
304 ';
305 $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%;">
306 <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').'">
307 </div>
308 ';
309 } else {
310 $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%;">
311 <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').'">
312 </div>
313 ';
314 $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%;">
315 <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').'">
316 </div>
317 ';
318 }
319
320 if(true && function_exists('wdk_booking_currency_symbol')){
321 if(!empty($calendar->json_data_fees))
322 $calendar_fees = json_decode($calendar->json_data_fees );
323
324 if(!empty($calendar_fees)) {
325
326 foreach ($calendar_fees as $fee) {
327 if(!wmvc_show_data('is_activated', $fee, false,TRUE,TRUE)) continue;
328
329 $field = str_replace(' ','_',strtolower(esc_html(wmvc_show_data('title', $fee,'-',TRUE,TRUE))));
330
331 $readonly = '';
332 if(wmvc_show_data('is_required', $fee, false,TRUE,TRUE)) {
333 $readonly = 'readonly disabled';
334 }
335
336 $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%;">
337 <label for="'.esc_attr($field).'">
338 <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)).'" >
339 '.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())).'/'.
340 ((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>
341 </label>
342 </div>';
343 }
344 }
345 }
346
347 if($settings['booking_hide_if_сhildrens_allowed_field'] != 'yes') {
348 $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%;">
349 <label for="сhildrens_allowed">
350 <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').'" >
351 '.esc_html__('Childrens ','wpdirectorykit').'
352 </label>
353 </div>';
354 }
355
356
357 if ($settings['booking_hide_if_pets_allowed_field'] != 'yes') {
358 $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%;">
359 <label for="pets_allowed">
360 <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').'" >
361 '.esc_html__('Pets ', 'wpdirectorykit').'
362 </label>
363 </div>';
364 }
365
366 wp_enqueue_script( 'daterangepicker-moment' );
367
368 wp_enqueue_script( 'daterangepicker' );
369 wp_enqueue_style('daterangepicker');
370
371
372 }
373 }
374
375 if( is_user_logged_in()) {
376 wp_enqueue_script( 'wdk-notify' );
377 $data_user = get_userdata(get_current_user_id());
378 $custom_js ="
379 jQuery('document').ready(function($){
380 $('#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))."');
381 $('#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))."');
382 $('#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))."');
383 $('#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'))."');
384 })
385 ";
386 wp_add_inline_script( 'wdk-notify', $custom_js );
387 }
388
389
390 parent::render();
391 }
392
393 }
394
395