PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.2.0
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.2.0
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.2.0, at includes/class-form.php

412 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
145 }
146
147 if ( 'custom_html' === $field['template'] ) {
148 $field['name'] = 'custom_html';
149 }
150
151 $form_fields[] = apply_filters( 'weforms-get-form-field', $field );
152 }
153
154 $this->form_fields = apply_filters( 'weforms-get-form-fields', $form_fields );
155
156 return $this->form_fields;
157 }
158
159 /**
160 * Check if any perticular field template is used in a form
161 *
162 * @return array
163 */
164 public function has_field( $field_template ) {
165
166 foreach ( $this->get_fields() as $key => $field) {
167 if ( isset( $field['template'] ) && $field['template'] == $field_template) {
168 return true;
169 }
170 }
171 }
172
173
174 /**
175 * Get all fields by a template
176 *
177 * @return array
178 */
179 public function search_fields( $field_template ) {
180
181 $fields = array();
182
183 foreach ( $this->get_fields() as $key => $field) {
184 if ( isset( $field['template'] ) && $field['template'] == $field_template) {
185 $fields[] = $field;
186 }
187 }
188
189 return $fields;
190 }
191
192 /**
193 * Search fileds and get the first one
194 *
195 * @return array
196 */
197 public function search_field( $field_template ) {
198
199 $fields = $this->search_fields($field_template);
200
201 return isset($fields[0]) ? $fields[0] : array();
202 }
203
204 /**
205 * Get formatted field name/values
206 *
207 * @return array
208 */
209 public function get_field_values() {
210 $values = array();
211 $fields = $this->get_fields();
212
213 if ( ! $fields ) {
214 return $values;
215 }
216
217 $ignore_fields = apply_filters( 'ignore_fields_list', array( 'recaptcha', 'section_break' ) );
218 $options_fields = apply_filters( 'option_fields_list', array( 'dropdown_field', 'radio_field', 'multiple_select', 'checkbox_field' ) );
219
220 foreach ($fields as $field) {
221
222 if ( in_array( $field['template'], $ignore_fields ) ) {
223 continue;
224 }
225
226 if ( ! isset( $field['name'] ) ) {
227 continue;
228 }
229
230 $value = array(
231 'label' => isset( $field['label'] ) ? $field['label'] : '',
232 'type' => $field['template'],
233 );
234
235 // put options if this is an option field
236 if ( in_array( $field['template'], $options_fields ) ) {
237 $value['options'] = $field['options'];
238 }
239
240 $values[ $field['name'] ] = array_merge( $field, $value);
241 }
242
243 return apply_filters( 'weforms_get_field_values', $values );;
244 }
245
246 /**
247 * Get form settings
248 *
249 * @return array
250 */
251 public function get_settings() {
252
253 $settings = get_post_meta( $this->id, 'wpuf_form_settings', true );
254 $default = weforms_get_default_form_settings();
255
256 return array_merge( $default, $settings);
257 }
258
259 /**
260 * Check if the form submission is open
261 *
262 * @return boolean|WP_Error
263 */
264 public function is_submission_open() {
265 $settings = $this->get_settings();
266
267 $needs_login = ( isset( $settings['require_login'] ) && $settings['require_login'] == 'true' ) ? true : false;
268 $has_limit = ( isset( $settings['limit_entries'] ) && $settings['limit_entries'] == 'true' ) ? true : false;
269 $is_scheduled = ( isset( $settings['schedule_form'] ) && $settings['schedule_form'] == 'true' ) ? true : false;
270
271 if ( $this->data->post_status != 'publish' ) {
272 return new WP_Error( 'needs-publish', __( 'The form is not published yet.', 'weforms' ) );
273 }
274
275 if ( $needs_login && !is_user_logged_in() ) {
276 return new WP_Error( 'needs-login', $settings['req_login_message'] );
277 }
278
279 if ( $has_limit ) {
280 $limit = (int) $settings['limit_number'];
281 $form_entries = $this->num_form_entries();
282
283 if ( $limit < $form_entries ) {
284 return new WP_Error( 'entry-limit', $settings['limit_message'] );
285 }
286 }
287
288 if ( $is_scheduled ) {
289 $start_time = strtotime( $settings['schedule_start'] );
290 $end_time = strtotime( $settings['schedule_end'] );
291 $current_time = current_time( 'timestamp' );
292
293 // too early?
294 if ( $current_time < $start_time ) {
295 return new WP_Error( 'form-pending', $settings['sc_pending_message'] );
296 } elseif ( $current_time > $end_time ) {
297 return new WP_Error( 'form-expired', $settings['sc_expired_message'] );
298 }
299 }
300
301 return true;
302 }
303
304 /**
305 * Get form notifications
306 *
307 * @return array
308 */
309 public function get_notifications() {
310 $notifications = get_post_meta( $this->id, 'notifications', true );
311 $defualt = weforms_get_default_form_notification();
312
313 if ( ! $notifications ) {
314 $notifications = array();
315 }
316
317 $notifications = array_map( function( $notification ) use ( $defualt ) {
318 return array_merge( $defualt, $notification);
319 }, $notifications);
320
321 return $notifications;
322 }
323
324 /**
325 * Get all the integrations
326 *
327 * @return array
328 */
329 public function get_integrations() {
330 $integrations = get_post_meta( $this->id, 'integrations', true );
331
332 if ( ! $integrations ) {
333 return array();
334 }
335
336 return $integrations;
337 }
338
339 /**
340 * Get entries of this form
341 *
342 * @return \WeForms_Form_Entry_Manager
343 */
344 public function entries() {
345 return new WeForms_Form_Entry_Manager( $this->id, $this );
346 }
347
348 /**
349 * Get number of form entries
350 *
351 * @return integer
352 */
353 public function num_form_entries() {
354 return weforms_count_form_entries( $this->id );
355 }
356
357 /**
358 * Get number of form payments
359 *
360 * @return integer
361 */
362 public function num_form_payments() {
363 return weforms_count_form_payments( $this->id );
364 }
365
366 /**
367 * Get the number of form views
368 *
369 * @return integer
370 */
371 public function num_form_views() {
372 return weforms_get_form_views( $this->id );
373 }
374
375
376 /**
377 * prepare_entries
378 *
379 * @return array
380 */
381 public function prepare_entries() {
382
383 $fields = weforms()->fields->get_fields();
384 $form_fields = $this->get_fields();
385
386 $entry_fields = array();
387
388 $ignore_list = apply_filters('wefroms_entry_ignore_list', array(
389 'section_break',
390 'custom_html',
391 'recaptcha'
392 ) );
393
394 foreach ($form_fields as $field) {
395
396 if ( in_array( $field['template'], $ignore_list ) ) {
397 continue;
398 }
399
400 if ( ! array_key_exists( $field['template'], $fields ) ) {
401 continue;
402 }
403
404 $field_class = $fields[ $field['template'] ];
405
406 $entry_fields[ $field['name'] ] = $field_class->prepare_entry( $field );
407 }
408
409 return apply_filters( 'weforms_prepare_entries', $entry_fields );
410 }
411 }
412