PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 2.0.3
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v2.0.3
3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / includes / admin / builder / class-evf-builder-fields.php
everest-forms / includes / admin / builder Last commit date
class-evf-builder-fields.php 2 years ago class-evf-builder-page.php 3 years ago class-evf-builder-settings.php 2 years ago
class-evf-builder-fields.php
374 lines
1 <?php
2 /**
3 * EverestForms Builder Fields
4 *
5 * @package EverestForms\Admin
6 * @since 1.2.0
7 */
8
9 defined( 'ABSPATH' ) || exit;
10
11 if ( class_exists( 'EVF_Builder_Fields', false ) ) {
12 return new EVF_Builder_Fields();
13 }
14
15 /**
16 * EVF_Builder_Fields class.
17 */
18 class EVF_Builder_Fields extends EVF_Builder_Page {
19
20 /**
21 * Contains information for multi-part forms.
22 *
23 * Forms that do not contain parts return false, otherwise returns an array
24 * that contains the number of total pages and page counter used when
25 * displaying part rows.
26 *
27 * @since 1.3.2
28 *
29 * @var array
30 */
31 public static $parts = array();
32
33 /**
34 * Constructor.
35 */
36 public function __construct() {
37 $this->id = 'fields';
38 $this->label = __( 'Fields', 'everest-forms' );
39 $this->sidebar = true;
40
41 parent::__construct();
42 }
43
44 /**
45 * Hook in tabs.
46 */
47 public function init_hooks() {
48 if ( is_object( $this->form ) ) {
49 add_action( 'everest_forms_builder_fields', array( $this, 'output_fields' ) );
50 add_action( 'everest_forms_builder_fields_options', array( $this, 'output_fields_options' ) );
51 add_action( 'everest_forms_builder_fields_preview', array( $this, 'output_fields_preview' ) );
52 }
53 }
54
55 /**
56 * Outputs the builder sidebar.
57 */
58 public function output_sidebar() {
59 ?>
60 <div class="everest-forms-fields-tab">
61 <a href="#" id="add-fields" class="fields active"><?php esc_html_e( 'Add Fields', 'everest-forms' ); ?></a>
62 <a href="#" id="field-options" class="options"><?php esc_html_e( 'Field Options', 'everest-forms' ); ?></a>
63 <?php do_action( 'everest_forms_builder_fields_tab', $this->form ); ?>
64 </div>
65 <div class="everest-forms-tab-content">
66 <div class="everest-forms-add-fields">
67 <div class="everest-forms-input-group everest-forms-search-input evf-mb-3">
68 <input id="everest-forms-search-fields" class="everest-forms-input-control everest-forms-search-fields" type="text" placeholder="<?php esc_attr_e( 'Search fields&hellip;', 'everest-forms' ); ?>" />
69 <div class="everest-forms-input-group__append">
70 <div class="everest-forms-input-group__text">
71 <svg xmlns="http://www.w3.org/2000/svg" height="20px" width="20px" viewBox="0 0 24 24" fill="#a1a4b9"><path d="M21.71,20.29,18,16.61A9,9,0,1,0,16.61,18l3.68,3.68a1,1,0,0,0,1.42,0A1,1,0,0,0,21.71,20.29ZM11,18a7,7,0,1,1,7-7A7,7,0,0,1,11,18Z"/></svg>
72 </div>
73 </div>
74 </div>
75 <div class="hidden everest-forms-fields-not-found">
76 <img src="<?php echo esc_attr( plugin_dir_url( EVF_PLUGIN_FILE ) . 'assets/images/fields-not-found.png' ); ?>" />
77 <h3 class="everest-forms-fields-not-found__title"><?php esc_html_e( 'Oops!', 'everest-forms' ); ?></h3>
78 <span><?php esc_html_e( 'There is not such field that you are searching for.', 'everest-forms' ); ?></span>
79 </div>
80 <?php do_action( 'everest_forms_builder_fields', $this->form ); ?>
81 </div>
82 <div class="everest-forms-field-options">
83 <?php do_action( 'everest_forms_builder_fields_options', $this->form ); ?>
84 </div>
85 <?php do_action( 'everest_forms_builder_fields_tab_content', $this->form ); ?>
86 </div>
87 <?php
88 }
89
90 /**
91 * Outputs the builder content.
92 */
93 public function output_content() {
94 ?>
95 <div class="everest-forms-preview-wrap">
96 <div class="everest-forms-preview">
97 <div class="everest-forms-title-desc">
98 <input id= "evf-edit-form-name" type="text" class="everest-forms-form-name everest-forms-name-input" value ="<?php echo isset( $this->form->post_title ) ? esc_html( $this->form->post_title ) : esc_html__( 'Form not found.', 'everest-forms' ); ?>" disabled autocomplete="off" required>
99 <span id="edit-form-name" class = "evf-icon dashicons dashicons-edit"></span>
100 </div>
101 <div class="everest-forms-field-wrap">
102 <?php do_action( 'everest_forms_builder_fields_preview', $this->form ); ?>
103 </div>
104 <?php evf_debug_data( $this->form_data ); ?>
105 </div>
106 </div>
107 <?php
108 }
109
110 /**
111 * Output fields group buttons.
112 */
113 public function output_fields() {
114 $form_fields = evf()->form_fields->form_fields();
115
116 if ( ! empty( $form_fields ) ) {
117 foreach ( $form_fields as $group => $form_field ) {
118 ?>
119 <div class="everest-forms-add-fields-group open">
120 <a href="#" class="everest-forms-add-fields-heading" data-group="<?php echo esc_attr( $group ); ?>"><?php echo esc_html( evf_get_fields_group( $group ) ); ?><i class="handlediv"></i></a>
121 <div class="evf-registered-buttons">
122 <?php
123 foreach ( $form_field as $field ) :
124 $field_plan = isset( $field->plan ) ? $field->plan : '';
125 $addon_slug = isset( $field->addon ) ? $field->addon : '';
126 ?>
127 <button type="button" id="everest-forms-add-fields-<?php echo esc_attr( $field->type ); ?>" class="evf-registered-item <?php echo sanitize_html_class( $field->class ); ?>" data-field-type="<?php echo esc_attr( $field->type ); ?>" data-field-plan="<?php echo esc_attr( $field_plan ); ?>" data-addon-slug="<?php echo esc_attr( $addon_slug ); ?>">
128 <?php if ( isset( $field->icon ) ) : ?>
129 <i class="<?php echo esc_attr( $field->icon ); ?>"></i>
130 <?php endif; ?>
131 <?php echo esc_html( $field->name ); ?>
132 </button>
133 <?php endforeach; ?>
134 </div>
135 </div>
136 <?php
137 }
138 }
139 }
140
141 /**
142 * Output fields setting options.
143 */
144 public function output_fields_options() {
145 $fields = isset( $this->form_data['form_fields'] ) ? $this->form_data['form_fields'] : array();
146
147 if ( ! empty( $fields ) ) {
148 foreach ( $fields as $field ) {
149 if ( in_array( $field['type'], evf()->form_fields->get_pro_form_field_types(), true ) ) {
150 continue;
151 }
152
153 $field_option_class = apply_filters(
154 'everest_forms_builder_field_option_class',
155 array(
156 'everest-forms-field-option',
157 'everest-forms-field-option-' . esc_attr( $field['type'] ),
158 ),
159 $field
160 );
161
162 ?>
163 <div class="<?php echo esc_attr( implode( ' ', $field_option_class ) ); ?>" id="everest-forms-field-option-<?php echo esc_attr( $field['id'] ); ?>" data-field-id="<?php echo esc_attr( $field['id'] ); ?>" >
164 <input type="hidden" name="form_fields[<?php echo esc_attr( $field['id'] ); ?>][id]" value="<?php echo esc_attr( $field['id'] ); ?>" class="everest-forms-field-option-hidden-id" />
165 <input type="hidden" name="form_fields[<?php echo esc_attr( $field['id'] ); ?>][type]" value="<?php echo esc_attr( $field['type'] ); ?>" class="everest-forms-field-option-hidden-type" />
166 <?php do_action( 'everest_forms_builder_fields_options_' . $field['type'], $field ); ?>
167 </div>
168 <?php
169 }
170 } else {
171 printf( '<p class="no-fields">%s</p>', esc_html__( 'You don\'t have any fields yet.', 'everest-forms' ) );
172 }
173 }
174
175 /**
176 * Outputs fields preview content.
177 */
178 public function output_fields_preview() {
179 $form_data = $this->form_data;
180 $form_id = absint( $form_data['id'] );
181 $fields = isset( $form_data['form_fields'] ) ? $form_data['form_fields'] : array();
182 $structure = isset( $form_data['structure'] ) ? $form_data['structure'] : array( 'row_1' => array() );
183 $row_ids = array_map(
184 function( $row_id ) {
185 return str_replace( 'row_', '', $row_id );
186 },
187 array_keys( $structure )
188 );
189
190 /**
191 * BW compatiable for multi-parts form.
192 *
193 * @todo Remove in Major EVF version 1.6.0
194 */
195 if ( defined( 'EVF_MULTI_PART_PLUGIN_FILE' ) ) {
196 include_once ABSPATH . 'wp-admin/includes/plugin.php';
197 $plugin_data = get_plugin_data( EVF_MULTI_PART_PLUGIN_FILE, false, false );
198
199 if ( version_compare( $plugin_data['Version'], '1.3.0', '<' ) ) {
200 $settings_defaults = array(
201 'indicator' => 'progress',
202 'indicator_color' => '#7e3bd0',
203 'nav_align' => 'center',
204 );
205
206 if ( isset( $form_data['settings']['enable_multi_part'] ) && evf_string_to_bool( $form_data['settings']['enable_multi_part'] ) ) {
207 $settings = isset( $form_data['settings']['multi_part'] ) ? $form_data['settings']['multi_part'] : array();
208
209 if ( ! empty( $form_data['multi_part'] ) ) {
210 self::$parts = array(
211 'total' => count( $form_data['multi_part'] ),
212 'current' => 1,
213 'parts' => array_values( $form_data['multi_part'] ),
214 'settings' => wp_parse_args( $settings, $settings_defaults ),
215 );
216 }
217 } else {
218 self::$parts = array(
219 'total' => '',
220 'current' => '',
221 'parts' => array(),
222 'settings' => $settings_defaults,
223 );
224 }
225 }
226 }
227
228 // Allow Multi-Part to be customized.
229 self::$parts[ $form_id ] = apply_filters( 'everest_forms_parts_data', self::$parts, $form_data, $form_id );
230
231 // Output the fields preview.
232 echo '<div class="evf-admin-field-container">';
233 echo '<div class="evf-admin-field-wrapper">';
234
235 /**
236 * Hook: everest_forms_display_builder_fields_before.
237 *
238 * @hooked EverestForms_MultiPart::display_builder_fields_before() Multi-Part markup open.
239 */
240 do_action( 'everest_forms_display_builder_fields_before', $form_data, $form_id );
241
242 foreach ( $structure as $row_id => $row_data ) {
243 $row = str_replace( 'row_', '', $row_id );
244 $row_grid = isset( $form_data['structure'][ 'row_' . $row ] ) ? $form_data['structure'][ 'row_' . $row ] : array();
245 $form_grid = apply_filters( 'everest_forms_default_form_grid', 4 );
246 $total_grid = $form_grid;
247 $active_grid = count( $row_grid ) > 0 ? count( $row_grid ) : 2;
248 $active_grid = $active_grid > $total_grid ? $total_grid : $active_grid;
249
250 /**
251 * Hook: everest_forms_display_row_before.
252 */
253 do_action( 'everest_forms_display_builder_row_before', $row_id, $form_data, $form_id );
254
255 $repeater_field = apply_filters( 'everest_forms_display_repeater_fields', false, $row_grid, $fields );
256
257 echo '<div class="evf-admin-row" data-row-id="' . absint( $row ) . '"' . ( ! empty( $repeater_field ) ? esc_attr( $repeater_field ) : '' ) . '>';
258 echo '<div class="evf-toggle-row">';
259 if ( empty( $repeater_field ) ) {
260 echo '<div class="evf-duplicate-row"><span class="dashicons dashicons-media-default" title="Duplicate Row"></span></div>';
261 echo '<div class="evf-delete-row"><span class="dashicons dashicons-trash" title="Delete Row"></span></div>';
262 echo '<div class="evf-show-grid"><span class="dashicons dashicons-edit" title="Edit"></span></div>';
263 if ( defined( 'EFP_VERSION' ) ) {
264 echo '<div class="evf-row-setting"><span class="dashicons dashicons-admin-settings" title="Row Setting"></span></div>';
265 }
266 }
267 echo '<div class="evf-toggle-row-content">';
268 echo '<span>' . esc_html__( 'Row Settings', 'everest-forms' ) . '</span>';
269 echo '<small>' . esc_html__( 'Select the type of row', 'everest-forms' ) . '</small>';
270 echo '<div class="clear"></div>';
271
272 for ( $grid_active = 1; $grid_active <= $total_grid; $grid_active ++ ) {
273 $class = 'evf-grid-selector';
274
275 if ( $grid_active === $active_grid ) {
276 $class .= ' active';
277 }
278
279 echo '<div class="' . esc_attr( $class ) . '" data-evf-grid="' . absint( $grid_active ) . '">';
280
281 $gaps = 15;
282 $width = ( 100 - $gaps ) / $grid_active;
283 $margin = ( $gaps / $grid_active ) / 2;
284
285 for ( $row_icon = 1; $row_icon <= $grid_active; $row_icon ++ ) {
286 echo '<span style="width:' . (float) $width . '%; margin-left:' . (float) $margin . '%; margin-right:' . (float) $margin . '%"></span>';
287 }
288
289 echo '</div>';
290 }
291
292 echo '</div>';
293 echo '</div>';
294 echo '<div class="clear evf-clear"></div>';
295
296 $grid_class = 'evf-admin-grid evf-grid-' . ( $active_grid );
297 for ( $grid_start = 1; $grid_start <= $active_grid; $grid_start ++ ) {
298 echo '<div class="' . esc_attr( $grid_class ) . ' " data-grid-id="' . absint( $grid_start ) . '">';
299 $grid_fields = isset( $row_grid[ 'grid_' . $grid_start ] ) && is_array( $row_grid[ 'grid_' . $grid_start ] ) ? $row_grid[ 'grid_' . $grid_start ] : array();
300 foreach ( $grid_fields as $field_id ) {
301 if ( isset( $fields[ $field_id ] ) && ! in_array( $fields[ $field_id ]['type'], evf()->form_fields->get_pro_form_field_types(), true ) ) {
302 $this->field_preview( $fields[ $field_id ] );
303 }
304 }
305 echo '</div>';
306 }
307 echo '<div class="clear evf-clear"></div>';
308 echo '</div >';
309
310 /**
311 * Hook: everest_forms_display_builder_row_after.
312 *
313 * @hooked EverestForms_MultiPart::display_builder_row_after() Multi-Part markup (close previous part, open next).
314 */
315 do_action( 'everest_forms_display_builder_row_after', $row_id, $form_data, $form_id );
316 }
317
318 /**
319 * Hook: everest_forms_display_builder_fields_after.
320 *
321 * @hooked EverestForms_MultiPart::display_builder_fields_after() Multi-Part markup open.
322 */
323 do_action( 'everest_forms_display_builder_fields_after', $form_data, $form_id );
324
325 echo '</div>';
326 echo '<div class="clear evf-clear"></div>';
327 if ( defined( 'EVF_REPEATER_FIELDS_VERSION' ) ) {
328 echo '<div class="evf-repeater-row-wrapper">'; // Repeater Row Wrapper starts.
329 }
330
331 echo '<div class="evf-add-row" data-total-rows="' . count( $structure ) . '" data-next-row-id="' . (int) max( $row_ids ) . '"><span class="everest-forms-btn everest-forms-btn-primary dashicons dashicons-plus-alt">' . esc_html__( 'Add Row', 'everest-forms' ) . '</span></div>';
332
333 if ( defined( 'EVF_REPEATER_FIELDS_VERSION' ) ) {
334 echo '<div class="evf-add-row repeater-row" data-total-rows="' . count( $structure ) . '" data-next-row-id="' . (int) max( $row_ids ) . '"><span class="everest-forms-btn everest-forms-btn-primary dashicons dashicons-plus-alt">' . esc_html__( 'Add Repeater Row', 'everest-forms' ) . '</span></div>';
335 echo '</div>'; // Repeater Row Wrapper ends.
336 }
337 echo '</div >';
338 }
339
340 /**
341 * Single Field preview.
342 *
343 * @param array $field Field data and settings.
344 */
345 public function field_preview( $field ) {
346 $css = ! empty( $field['size'] ) ? 'size-' . esc_attr( $field['size'] ) : '';
347 $css .= ! empty( $field['label_hide'] ) && '1' === $field['label_hide'] ? ' label_hide' : '';
348 $css .= ! empty( $field['sublabel_hide'] ) && '1' === $field['sublabel_hide'] ? ' sublabel_hide' : '';
349 $css .= ! empty( $field['required'] ) && '1' === $field['required'] ? ' required' : '';
350 $css .= ! empty( $field['input_columns'] ) && '2' === $field['input_columns'] ? ' everest-forms-list-2-columns' : '';
351 $css .= ! empty( $field['input_columns'] ) && '3' === $field['input_columns'] ? ' everest-forms-list-3-columns' : '';
352 $css .= ! empty( $field['input_columns'] ) && 'inline' === $field['input_columns'] ? ' everest-forms-list-inline' : '';
353 $css = apply_filters( 'everest_forms_field_preview_class', $css, $field );
354
355 printf( '<div class="everest-forms-field everest-forms-field-%1$s %2$s" id="everest-forms-field-%3$s" data-field-id="%3$s" data-field-type="%4$s">', esc_attr( $field['type'] ), esc_attr( $css ), esc_attr( $field['id'] ), esc_attr( $field['type'] ) );
356 printf( '<div class="evf-field-action">' );
357 if ( 'repeater-fields' !== $field['type'] ) {
358 printf( '<a href="#" class="everest-forms-field-duplicate" title="%s"><span class="dashicons dashicons-media-default"></span></a>', esc_html__( 'Duplicate Field', 'everest-forms' ) );
359 printf( '<a href="#" class="everest-forms-field-delete" title="%s"><span class="dashicons dashicons-trash"></span></a>', esc_html__( 'Delete Field', 'everest-forms' ) );
360 printf( '<a href="#" class="everest-forms-field-setting" title="%s"><span class="dashicons dashicons-admin-generic"></span></a>', esc_html__( 'Settings', 'everest-forms' ) );
361 } else {
362 printf( '<a href="#" class="evf-duplicate-row" title="%s"><span class="dashicons dashicons-media-default"></span></a>', esc_html__( 'Duplicate Repeater', 'everest-forms' ) );
363 printf( '<a href="#" class="evf-delete-row" title="%s"><span class="dashicons dashicons-trash"></span></a>', esc_html__( 'Delete Repeater', 'everest-forms' ) );
364 }
365 printf( '</div>' );
366
367 do_action( 'everest_forms_builder_fields_preview_' . $field['type'], $field );
368
369 echo '</div>';
370 }
371 }
372
373 return new EVF_Builder_Fields();
374