PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.2.9
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.2.9
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-field-manager.php

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

284 lines 8.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Form field manager class
5 *
6 * @since 1.1.0
7 */
8 class WeForms_Field_Manager {
9
10 /**
11 * The fields
12 *
13 * @var array
14 */
15 private $fields = array();
16
17
18 /**
19 * Going to store WeForms_Notification instance for tmp. Will refactor
20 *
21 * @var array
22 */
23 private $notification = null;
24
25 /**
26 * Get all the registered fields
27 *
28 * @return array
29 */
30 public function get_fields() {
31
32 if ( ! empty( $this->fields ) ) {
33 return $this->fields;
34 }
35
36 $this->register_field_types();
37
38 return $this->fields;
39 }
40
41 /**
42 * Register the field types
43 *
44 * @return void
45 */
46 private function register_field_types() {
47 require_once dirname( __FILE__ ) . '/fields/class-abstract-fields.php';
48 require_once dirname( __FILE__ ) . '/fields/class-field-text.php';
49 require_once dirname( __FILE__ ) . '/fields/class-field-name.php';
50 require_once dirname( __FILE__ ) . '/fields/class-field-email.php';
51 require_once dirname( __FILE__ ) . '/fields/class-field-textarea.php';
52 require_once dirname( __FILE__ ) . '/fields/class-field-checkbox.php';
53 require_once dirname( __FILE__ ) . '/fields/class-field-radio.php';
54 require_once dirname( __FILE__ ) . '/fields/class-field-dropdown.php';
55 require_once dirname( __FILE__ ) . '/fields/class-field-multidropdown.php';
56 require_once dirname( __FILE__ ) . '/fields/class-field-url.php';
57 require_once dirname( __FILE__ ) . '/fields/class-field-sectionbreak.php';
58 require_once dirname( __FILE__ ) . '/fields/class-field-html.php';
59 require_once dirname( __FILE__ ) . '/fields/class-field-hidden.php';
60 require_once dirname( __FILE__ ) . '/fields/class-field-image.php';
61 require_once dirname( __FILE__ ) . '/fields/class-field-recaptcha.php';
62 require_once dirname( __FILE__ ) . '/fields/class-field-date.php';
63
64 $fields = array(
65 'text_field' => new WeForms_Form_Field_Text(),
66 'name_field' => new WeForms_Form_Field_Name(),
67 'date_field' => new WeForms_Form_Field_Date_Free(),
68 'email_address' => new WeForms_Form_Field_Email(),
69 'textarea_field' => new WeForms_Form_Field_Textarea(),
70 'radio_field' => new WeForms_Form_Field_Radio(),
71 'checkbox_field' => new WeForms_Form_Field_Checkbox(),
72 'dropdown_field' => new WeForms_Form_Field_Dropdown(),
73 'multiple_select' => new WeForms_Form_Field_MultiDropdown(),
74 'website_url' => new WeForms_Form_Field_URL(),
75 'section_break' => new WeForms_Form_Field_SectionBreak(),
76 'custom_html' => new WeForms_Form_Field_HTML(),
77 'custom_hidden_field' => new WeForms_Form_Field_Hidden(),
78 'image_upload' => new WeForms_Form_Field_Image(),
79 'recaptcha' => new WeForms_Form_Field_reCaptcha(),
80 );
81
82 $this->fields = apply_filters( 'weforms_form_fields', $fields );
83 }
84
85 /**
86 * Get field groups
87 *
88 * @return array
89 */
90 public function get_field_groups() {
91
92 $groups = array(
93 array(
94 'title' => __( 'Custom Fields', 'weforms' ),
95 'id' => 'custom-fields',
96 'fields' => apply_filters( 'weforms_field_groups_custom',
97 array(
98 'name_field',
99 'text_field',
100 'textarea_field',
101 'dropdown_field',
102 'multiple_select',
103 'radio_field',
104 'checkbox_field',
105 'website_url',
106 'email_address',
107 'custom_hidden_field',
108 'image_upload'
109 )
110 )
111 ),
112
113 array(
114 'title' => __( 'Others', 'weforms' ),
115 'id' => 'others',
116 'fields' => apply_filters( 'weforms_field_groups_others',
117 array(
118 'section_break',
119 'custom_html',
120 'recaptcha'
121 )
122 )
123 )
124 );
125
126 return apply_filters( 'weforms_field_groups', $groups );
127 }
128
129 /**
130 * Get fields JS setting for the form builder
131 *
132 * @return array
133 */
134 public function get_js_settings() {
135 $fields = $this->get_fields();
136 $js_array = array();
137
138 if ( $fields ) {
139 foreach ( $fields as $type => $object ) {
140 $js_array[ $type ] = $object->get_js_settings();
141 }
142 }
143
144 return $js_array;
145 }
146
147 /**
148 * Render the form fields
149 *
150 * @param integer $form_id
151 * @param array $fields
152 * @param array $atts
153 *
154 * @return void
155 */
156 public function render_fields( $fields, $form_id, $atts = array() ) {
157 if ( ! $fields ) {
158 return;
159 }
160
161 $this->notification = new WeForms_Notification();
162 $this->notification->set_merge_tags();
163
164 $fields = apply_filters( 'weforms_render_fields', $fields, $form_id );
165
166 foreach ( $fields as $field ) {
167 if ( ! $field_object = $this->field_exists( $field['template'] ) ) {
168
169 if ( defined( 'WP_DEBUG' && WP_DEBUG ) ) {
170 echo '<h4 style="color: red;"><em>' . $field['template'] . '</em> field not found.</h4>';
171 }
172
173 continue;
174 }
175
176 $field = $this->dynamic_fields( $field, $form_id, $atts );
177 $field = $this->replace_tags( $field, $form_id, $atts );
178 $field_object->render( $field, $form_id );
179 $field_object->conditional_logic( $field, $form_id );
180 }
181 }
182
183 /**
184 * Filter dynamic fields
185 *
186 * @param array $form_field
187 * @param integer $form_id
188 *
189 * @return void
190 */
191 function dynamic_fields( $form_field, $form_id, $atts = array() ) {
192
193 if ( ! isset( $form_field['dynamic'] ) || empty( $form_field['dynamic']['status'] ) || empty( $form_field['dynamic']['param_name'] ) ) {
194 return $form_field;
195 }
196
197 $param_name = $form_field['dynamic']['param_name'];
198
199 if ( isset( $form_field['options'] ) ) {
200 $form_field['options'] = apply_filters( 'weforms_field_options_' . $param_name , $form_field['options'], $form_id );
201
202 if ( isset( $_GET[ $param_name ] ) && is_array( $_GET[ $param_name ] ) ) {
203 $form_field['default'] = array_merge( $form_field['options'], $_GET[ $param_name ] );
204 }
205 }
206
207 foreach ( array( 'default', 'selected' ) as $key => $default_key ) {
208
209 if ( isset( $form_field[ $default_key ] ) ) {
210 $form_field[ $default_key ] = apply_filters( 'weforms_field_default_value_' . $param_name , $form_field[ $default_key ], $form_id );
211
212 if ( isset( $atts[ $param_name ] ) ) {
213 $form_field[ $default_key ] = $atts[ $param_name ];
214 }
215
216 if ( isset( $_GET[ $param_name ] ) ) {
217 if ( is_array( $form_field[ $default_key ] ) == is_array( $_GET[ $param_name ] ) ) {
218 $form_field[ $default_key ] = $_GET[ $param_name ];
219 }
220
221 if ( ! is_array( $form_field[ $default_key ] ) == ! is_array( $_GET[ $param_name ] ) ) {
222 $form_field[ $default_key ] = $_GET[ $param_name ];
223 }
224 }
225 }
226 }
227
228 return $form_field;
229 }
230
231 /**
232 * Replace merge tags
233 *
234 * @param array $form_field
235 * @param integer $form_id
236 *
237 * @return void
238 */
239 function replace_tags( $form_field, $form_id, $atts = array() ) {
240
241 $fields = array(
242 'default',
243 'placeholder',
244 'first_name' => array( 'placeholder', 'default' ),
245 'middle_name' => array( 'placeholder', 'default' ),
246 'last_name' => array( 'placeholder', 'default' ),
247 );
248
249 foreach ( $fields as $key => $field ) {
250
251 if ( is_array( $field ) ) {
252
253 foreach ( $field as $k => $sub_field ) {
254 if ( ! empty( $form_field[ $key ] ) && ! empty( $form_field[ $key ][ $sub_field ] ) ) {
255 $form_field[ $key ][ $sub_field ] = $this->notification->replace_tags( $form_field[ $key ][ $sub_field ] );
256 }
257 }
258 } else {
259
260 if ( ! empty( $form_field[ $field ] ) && is_string( $form_field[ $field ] ) ) {
261 $form_field[ $field ] = $this->notification->replace_tags( $form_field[ $field ] );
262 }
263 }
264 }
265
266 return $form_field;
267 }
268
269 /**
270 * Check if a field exists
271 *
272 * @param string $field_type
273 *
274 * @return boolean
275 */
276 public function field_exists( $field_type ) {
277 if ( array_key_exists( $field_type, $this->get_fields() ) ) {
278 return $this->fields[ $field_type ];
279 }
280
281 return false;
282 }
283 }
284