PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.3.2
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.3.2
1.6.7 1.6.8 1.6.9 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.18 1.6.19 1.6.2 1.6.20 1.6.21 1.6.22 1.6.23 1.6.24 1.6.25 1.6.26 1.6.27 1.6.28 1.6.3 1.6.4 1.6.5 1.6.6 All 74 releases
weforms / includes / class-form.php

class-form.php in weForms – Easy Drag & Drop Contact Form Builder For WordPress 1.3.2, at includes/class-form.php

406 lines 10.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The Form Class
5 *
6 * @since 1.1.0
7 */
8 class WeForms_Form {
9
10 /**
11 * The form id
12 *
13 * @var integer
14 */
15 public $id = 0;
16
17 /**
18 * The form title
19 *
20 * @var string
21 */
22 public $name = '';
23
24 /**
25 * Holds the post data object
26 *
27 * @var null|WP_post
28 */
29 public $data = null;
30
31 /**
32 * Form fields
33 *
34 * @var array
35 */
36 public $form_fields = array();
37
38 /**
39 * The Constructor
40 *
41 * @param int|WP_Post $form
42 */
43 public function __construct( $form = null ) {
44
45 if ( is_numeric( $form ) ) {
46
47 $the_post = get_post( $form );
48
49 if ( $the_post ) {
50 $this->id = $the_post->ID;
51 $this->name = $the_post->post_title;
52 $this->data = $the_post;
53 }
54
55 } elseif ( is_a( $form, 'WP_Post' ) ) {
56 $this->id = $form->ID;
57 $this->name = $form->post_title;
58 $this->data = $form;
59 }
60 }
61
62 /**
63 * Get the form ID
64 *
65 * @return integer
66 */
67 public function get_id() {
68 return $this->id;
69 }
70
71 /**
72 * Get the form name
73 *
74 * @return string
75 */
76 public function get_name() {
77 return $this->name;
78 }
79
80 /**
81 * Get all form fields of this form
82 *
83 * @return array
84 */
85 public function get_fields() {
86
87 // return if already fetched
88 if ( $this->form_fields ) {
89 return $this->form_fields;
90 }
91
92 $fields = get_children(array(
93 'post_parent' => $this->id,
94 'post_status' => 'publish',
95 'post_type' => 'wpuf_input',
96 'numberposts' => '-1',
97 'orderby' => 'menu_order',
98 'order' => 'ASC',
99 ));
100
101 $form_fields = array();
102
103 foreach ( $fields as $key => $content ) {
104
105 $field = maybe_unserialize( $content->post_content );
106
107 if ( empty( $field['template'] ) ) {
108 continue;
109 }
110
111
112 $field['id'] = $content->ID;
113
114 // Add inline property for radio and checkbox fields
115 $inline_supported_fields = apply_filters( 'inline_supported_fields_list', array( 'radio_field', 'checkbox_field' ) );
116 if ( in_array( $field['template'] , $inline_supported_fields ) ) {
117 if ( ! isset( $field['inline'] ) ) {
118 $field['inline'] = 'no';
119 }
120 }
121
122 // Add 'selected' property
123 $option_based_fields = apply_filters( 'option_based_fields_list', array( 'dropdown_field', 'multiple_select', 'radio_field', 'checkbox_field' ) );
124 if ( in_array( $field['template'] , $option_based_fields ) ) {
125 if ( ! isset( $field['selected'] ) ) {
126
127 if ( 'dropdown_field' === $field['template'] || 'radio_field' === $field['template'] ) {
128 $field['selected'] = '';
129 } else {
130 $field['selected'] = array();
131 }
132
133 }
134 }
135
136 // Add 'multiple' key for template:repeat
137 if ( 'repeat_field' === $field['template'] && ! isset( $field['multiple'] ) ) {
138 $field['multiple'] = '';
139 }
140
141 if ( 'recaptcha' === $field['template'] ) {
142 $field['name'] = 'recaptcha';
143 $field['enable_no_captcha'] = isset( $field['enable_no_captcha'] ) ? $field['enable_no_captcha'] : '';
144 $field['recaptcha_theme'] = isset( $field['recaptcha_theme'] ) ? $field['recaptcha_theme'] : 'light';
145 }
146
147 $form_fields[] = apply_filters( 'weforms-get-form-field', $field );
148 }
149
150 $this->form_fields = apply_filters( 'weforms-get-form-fields', $form_fields );
151
152 return $this->form_fields;
153 }
154
155 /**
156 * Check if any perticular field template is used in a form
157 *
158 * @return array
159 */
160 public function has_field( $field_template ) {
161
162 foreach ( $this->get_fields() as $key => $field) {
163 if ( isset( $field['template'] ) && $field['template'] == $field_template) {
164 return true;
165 }
166 }
167 }
168
169
170 /**
171 * Get all fields by a template
172 *
173 * @return array
174 */
175 public function search_fields( $field_template ) {
176
177 $fields = array();
178
179 foreach ( $this->get_fields() as $key => $field) {
180 if ( isset( $field['template'] ) && $field['template'] == $field_template) {
181 $fields[] = $field;
182 }
183 }
184
185 return $fields;
186 }
187
188 /**
189 * Search fileds and get the first one
190 *
191 * @return array
192 */
193 public function search_field( $field_template ) {
194
195 $fields = $this->search_fields($field_template);
196
197 return isset($fields[0]) ? $fields[0] : array();
198 }
199
200 /**
201 * Get formatted field name/values
202 *
203 * @return array
204 */
205 public function get_field_values() {
206 $values = array();
207 $fields = $this->get_fields();
208
209 if ( ! $fields ) {
210 return $values;
211 }
212
213 $ignore_fields = apply_filters( 'ignore_fields_list', array( 'recaptcha' ) );
214 $options_fields = apply_filters( 'option_fields_list', array( 'dropdown_field', 'radio_field', 'multiple_select', 'checkbox_field' ) );
215
216 foreach ($fields as $field) {
217
218 if ( in_array( $field['template'], $ignore_fields ) ) {
219 continue;
220 }
221
222 if ( ! isset( $field['name'] ) ) {
223 continue;
224 }
225
226 $value = array(
227 'label' => isset( $field['label'] ) ? $field['label'] : '',
228 'type' => $field['template'],
229 );
230
231 // put options if this is an option field
232 if ( in_array( $field['template'], $options_fields ) ) {
233 $value['options'] = $field['options'];
234 }
235
236 $values[ $field['name'] ] = array_merge( $field, $value);
237 }
238
239 return apply_filters( 'weforms_get_field_values', $values );;
240 }
241
242 /**
243 * Get form settings
244 *
245 * @return array
246 */
247 public function get_settings() {
248
249 $settings = get_post_meta( $this->id, 'wpuf_form_settings', true );
250 $default = weforms_get_default_form_settings();
251
252 return array_merge( $default, $settings);
253 }
254
255 /**
256 * Check if the form submission is open
257 *
258 * @return boolean|WP_Error
259 */
260 public function is_submission_open() {
261 $settings = $this->get_settings();
262
263 $needs_login = ( isset( $settings['require_login'] ) && $settings['require_login'] == 'true' ) ? true : false;
264 $has_limit = ( isset( $settings['limit_entries'] ) && $settings['limit_entries'] == 'true' ) ? true : false;
265 $is_scheduled = ( isset( $settings['schedule_form'] ) && $settings['schedule_form'] == 'true' ) ? true : false;
266
267 if ( $this->data->post_status != 'publish' ) {
268 return new WP_Error( 'needs-publish', __( 'The form is not published yet.', 'weforms' ) );
269 }
270
271 if ( $needs_login && !is_user_logged_in() ) {
272 return new WP_Error( 'needs-login', $settings['req_login_message'] );
273 }
274
275 if ( $has_limit ) {
276 $limit = (int) $settings['limit_number'];
277 $form_entries = $this->num_form_entries();
278
279 if ( $limit < $form_entries ) {
280 return new WP_Error( 'entry-limit', $settings['limit_message'] );
281 }
282 }
283
284 if ( $is_scheduled ) {
285 $start_time = strtotime( $settings['schedule_start'] );
286 $end_time = strtotime( $settings['schedule_end'] );
287 $current_time = current_time( 'timestamp' );
288
289 // too early?
290 if ( $current_time < $start_time ) {
291 return new WP_Error( 'form-pending', $settings['sc_pending_message'] );
292 } elseif ( $current_time > $end_time ) {
293 return new WP_Error( 'form-expired', $settings['sc_expired_message'] );
294 }
295 }
296
297 return apply_filters( 'weforms_is_submission_open', true, $settings, $this);
298 }
299
300 /**
301 * Get form notifications
302 *
303 * @return array
304 */
305 public function get_notifications() {
306 $notifications = get_post_meta( $this->id, 'notifications', true );
307 $defualt = weforms_get_default_form_notification();
308
309 if ( ! $notifications ) {
310 $notifications = array();
311 }
312
313 $notifications = array_map( function( $notification ) use ( $defualt ) {
314 return array_merge( $defualt, $notification);
315 }, $notifications);
316
317 return $notifications;
318 }
319
320 /**
321 * Get all the integrations
322 *
323 * @return array
324 */
325 public function get_integrations() {
326 $integrations = get_post_meta( $this->id, 'integrations', true );
327
328 if ( ! $integrations ) {
329 return array();
330 }
331
332 return $integrations;
333 }
334
335 /**
336 * Get entries of this form
337 *
338 * @return \WeForms_Form_Entry_Manager
339 */
340 public function entries() {
341 return new WeForms_Form_Entry_Manager( $this->id, $this );
342 }
343
344 /**
345 * Get number of form entries
346 *
347 * @return integer
348 */
349 public function num_form_entries() {
350 return weforms_count_form_entries( $this->id );
351 }
352
353 /**
354 * Get number of form payments
355 *
356 * @return integer
357 */
358 public function num_form_payments() {
359 return weforms_count_form_payments( $this->id );
360 }
361
362 /**
363 * Get the number of form views
364 *
365 * @return integer
366 */
367 public function num_form_views() {
368 return weforms_get_form_views( $this->id );
369 }
370
371
372 /**
373 * prepare_entries
374 *
375 * @return array
376 */
377 public function prepare_entries() {
378
379 $fields = weforms()->fields->get_fields();
380 $form_fields = $this->get_fields();
381
382 $entry_fields = array();
383
384 $ignore_list = apply_filters('wefroms_entry_ignore_list', array(
385 'recaptcha'
386 ) );
387
388 foreach ($form_fields as $field) {
389
390 if ( in_array( $field['template'], $ignore_list ) ) {
391 continue;
392 }
393
394 if ( ! array_key_exists( $field['template'], $fields ) ) {
395 continue;
396 }
397
398 $field_class = $fields[ $field['template'] ];
399
400 $entry_fields[ $field['name'] ] = $field_class->prepare_entry( $field );
401 }
402
403 return apply_filters( 'weforms_prepare_entries', $entry_fields );
404 }
405 }
406