PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 3.4.8
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v3.4.8
3.6.0 3.5.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 4 months ago class-evf-builder-integrations.php 4 months ago class-evf-builder-page.php 4 months ago class-evf-builder-payments.php 4 months ago class-evf-builder-settings.php 5 months ago
class-evf-builder-fields.php
464 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 $containers = apply_filters(
115 'everest_forms_builder_layout_containers',
116 array(
117 array(
118 'type' => 'layout_one_col',
119 'label' => __( 'One Column', 'everest-forms' ),
120 'columns' => 1,
121 'icon' => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.645 3.795a.28.28 0 0 0-.066-.181.21.21 0 0 0-.16-.076H6.581a.21.21 0 0 0-.16.076.28.28 0 0 0-.066.18v16.411c0 .068.024.133.066.181a.21.21 0 0 0 .16.076h10.838a.21.21 0 0 0 .16-.076.28.28 0 0 0 .066-.18zM19 20.205c0 .476-.167.933-.463 1.27a1.5 1.5 0 0 1-1.118.525H6.581c-.42 0-.821-.19-1.118-.526A1.93 1.93 0 0 1 5 20.205V3.795c0-.476.167-.933.463-1.27A1.5 1.5 0 0 1 6.581 2h10.838c.42 0 .822.19 1.118.526S19 3.319 19 3.795z"/></svg>',
122 ),
123 array(
124 'type' => 'layout_two_col',
125 'label' => __( 'Two Column', 'everest-forms' ),
126 'columns' => 2,
127 'icon' => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.25 4a.25.25 0 0 0-.25-.25h-7.25v16.5H20a.25.25 0 0 0 .25-.25zM3.75 20a.25.25 0 0 0 .25.25h7.25V3.75H4a.25.25 0 0 0-.25.25zm18 0A1.75 1.75 0 0 1 20 21.75H4A1.75 1.75 0 0 1 2.25 20V4A1.75 1.75 0 0 1 4 2.25h16A1.75 1.75 0 0 1 21.75 4z"/></svg>',
128 ),
129 array(
130 'type' => 'layout_three_col',
131 'label' => __( 'Three Column', 'everest-forms' ),
132 'columns' => 3,
133 'icon' => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.25 4a.25.25 0 0 0-.25-.25h-4.25v16.5H20a.25.25 0 0 0 .25-.25zM9.75 20.25h4.5V3.75h-4.5zm-6-.25a.25.25 0 0 0 .25.25h4.25V3.75H4a.25.25 0 0 0-.25.25zm18 0A1.75 1.75 0 0 1 20 21.75H4A1.75 1.75 0 0 1 2.25 20V4A1.75 1.75 0 0 1 4 2.25h16A1.75 1.75 0 0 1 21.75 4z"/></svg>',
134 ),
135 array(
136 'type' => 'layout_four_col',
137 'label' => __( 'Four Column', 'everest-forms' ),
138 'columns' => 4,
139 'icon' => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.75 21V3a.75.75 0 0 1 1.5 0v18a.75.75 0 0 1-1.5 0m4.5 0V3a.75.75 0 0 1 1.5 0v18a.75.75 0 0 1-1.5 0m4.5 0V3a.75.75 0 0 1 1.5 0v18a.75.75 0 0 1-1.5 0"/><path d="M20.2 20.5V22H3.8v-1.5zm.3-.3V3.8a.3.3 0 0 0-.3-.3H3.8a.3.3 0 0 0-.3.3v16.4a.3.3 0 0 0 .3.3V22a1.8 1.8 0 0 1-1.79-1.616L2 20.2V3.8A1.8 1.8 0 0 1 3.8 2h16.4l.184.01A1.8 1.8 0 0 1 22 3.8v16.4l-.01.184a1.8 1.8 0 0 1-1.606 1.606L20.2 22v-1.5a.3.3 0 0 0 .3-.3"/></svg>',
140 ),
141 )
142 );
143
144 $form_fields = evf()->form_fields->form_fields();
145
146 if ( ! empty( $form_fields ) ) {
147 foreach ( $form_fields as $group => $form_field ) {
148 ?>
149 <div class="everest-forms-add-fields-group open">
150 <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>
151 <div class="evf-registered-buttons">
152 <?php
153 foreach ( $form_field as $field ) :
154 $field_plan = isset( $field->plan ) ? $field->plan : '';
155 $addon_slug = isset( $field->addon ) ? $field->addon : '';
156 $field_links = isset( $field->links ) ? json_encode( $field->links ) : '';
157 ?>
158 <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 ); ?>" data-links="<?php echo esc_attr( $field_links ); ?>">
159 <?php if ( isset( $field->icon ) ) : ?>
160 <i class="<?php echo esc_attr( $field->icon ); ?>"></i>
161 <?php endif; ?>
162 <?php echo esc_html( $field->name ); ?>
163 </button>
164 <?php endforeach; ?>
165 </div>
166 </div>
167 <?php
168
169 if ( 'advanced' === $group ) {
170 ?>
171 <div class="everest-forms-add-fields-group open evf-layout-group">
172 <a href="#" class="everest-forms-add-fields-heading" data-group="layout"><?php esc_html_e( 'Layout', 'everest-forms' ); ?><i class="handlediv"></i></a>
173 <div class="evf-registered-buttons">
174 <?php foreach ( $containers as $container ) : ?>
175 <button type="button"
176 class="evf-layout-container-btn"
177 data-columns="<?php echo absint( $container['columns'] ); ?>"
178 data-field-type="<?php echo esc_attr( $container['type'] ); ?>">
179 <?php echo $container['icon']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
180 <?php echo esc_html( $container['label'] ); ?>
181 </button>
182 <?php endforeach; ?>
183 </div>
184 </div>
185 <?php
186 }
187 }
188 }
189 }
190
191 /**
192 * Output fields setting options.
193 */
194 public function output_fields_options() {
195 $fields = isset( $this->form_data['form_fields'] ) ? $this->form_data['form_fields'] : array();
196 $recaptcha_type = get_option( 'everest_forms_recaptcha_type', 'v2' );
197 if ( isset( $this->form_data['settings']['recaptcha_support'] ) && '1' === $this->form_data['settings']['recaptcha_support'] ) {
198 if ( 'v2' === $recaptcha_type || 'v3' === $recaptcha_type ) {
199 $recaptcha_type = 'recaptcha';
200 }
201 $fields['IWX5HFxv2j-18'] = array(
202 'id' => 'IWX5HFxv2j-18',
203 'type' => $recaptcha_type,
204 'label' => '',
205 'meta-key' => $recaptcha_type . '_7543',
206 );
207 }
208
209 if ( ! empty( $fields ) ) {
210 foreach ( $fields as $field ) {
211 if ( in_array( $field['type'], evf()->form_fields->get_pro_form_field_types(), true ) ) {
212 continue;
213 }
214
215 $field_option_class = apply_filters(
216 'everest_forms_builder_field_option_class',
217 array(
218 'everest-forms-field-option',
219 'everest-forms-field-option-' . esc_attr( $field['type'] ),
220 ),
221 $field
222 );
223
224 ?>
225 <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'] ); ?>" >
226 <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" />
227 <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" />
228 <?php do_action( 'everest_forms_builder_fields_options_' . $field['type'], $field ); ?>
229 </div>
230 <?php
231 }
232 } else {
233 printf( '<p class="no-fields">%s</p>', esc_html__( 'You don\'t have any fields yet.', 'everest-forms' ) );
234 }
235 }
236
237 /**
238 * Outputs fields preview content.
239 */
240 public function output_fields_preview() {
241 $form_data = $this->form_data;
242 $form_id = absint( $form_data['id'] );
243 $fields = isset( $form_data['form_fields'] ) ? $form_data['form_fields'] : array();
244 $structure = isset( $form_data['structure'] ) ? $form_data['structure'] : array( 'row_1' => array() );
245 $row_ids = array_map(
246 function ( $row_id ) {
247 return str_replace( 'row_', '', $row_id );
248 },
249 array_keys( $structure )
250 );
251
252 /**
253 * BW compatiable for multi-parts form.
254 *
255 * @todo Remove in Major EVF version 1.6.0
256 */
257 if ( defined( 'EVF_MULTI_PART_PLUGIN_FILE' ) ) {
258 include_once ABSPATH . 'wp-admin/includes/plugin.php';
259 $plugin_data = get_plugin_data( EVF_MULTI_PART_PLUGIN_FILE, false, false );
260
261 if ( version_compare( $plugin_data['Version'], '1.3.0', '<' ) ) {
262 $settings_defaults = array(
263 'indicator' => 'progress',
264 'indicator_color' => '#7e3bd0',
265 'nav_align' => 'center',
266 );
267
268 if ( isset( $form_data['settings']['enable_multi_part'] ) && evf_string_to_bool( $form_data['settings']['enable_multi_part'] ) ) {
269 $settings = isset( $form_data['settings']['multi_part'] ) ? $form_data['settings']['multi_part'] : array();
270
271 if ( ! empty( $form_data['multi_part'] ) ) {
272 self::$parts = array(
273 'total' => count( $form_data['multi_part'] ),
274 'current' => 1,
275 'parts' => array_values( $form_data['multi_part'] ),
276 'settings' => wp_parse_args( $settings, $settings_defaults ),
277 );
278 }
279 } else {
280 self::$parts = array(
281 'total' => '',
282 'current' => '',
283 'parts' => array(),
284 'settings' => $settings_defaults,
285 );
286 }
287 }
288 }
289
290 // Allow Multi-Part to be customized.
291 self::$parts[ $form_id ] = apply_filters( 'everest_forms_parts_data', self::$parts, $form_data, $form_id );
292
293 // Output the fields preview.
294 echo '<div class="evf-admin-field-container">';
295 echo '<div class="evf-admin-field-wrapper">';
296
297 /**
298 * Hook: everest_forms_display_builder_fields_before.
299 *
300 * @hooked EverestForms_MultiPart::display_builder_fields_before() Multi-Part markup open.
301 */
302 do_action( 'everest_forms_display_builder_fields_before', $form_data, $form_id );
303 if ( isset( $this->form_data['settings']['recaptcha_support'] ) && '1' === $this->form_data['settings']['recaptcha_support'] ) {
304 $num_rows = count( $structure );
305
306 // Create a new row with the next available row number.
307 $new_row_key = 'row_' . ( $num_rows + 1 );
308 $new_row = array(
309 $new_row_key => array(
310 'grid_1' => array(
311 'IWX5HFxv2j-18',
312 ),
313 ),
314 );
315 $structure = array_merge( $structure, $new_row );
316 }
317
318 foreach ( $structure as $row_id => $row_data ) {
319 $row = str_replace( 'row_', '', $row_id );
320 $row_grid = isset( $form_data['structure'][ 'row_' . $row ] ) ? $form_data['structure'][ 'row_' . $row ] : array();
321 $form_grid = apply_filters( 'everest_forms_default_form_grid', 4 );
322 $total_grid = $form_grid;
323 $active_grid = ( count( $row_grid ) > 0 ) ? count( $row_grid ) : ( isset( $this->form_data['settings']['recaptcha_support'] ) && '1' === $this->form_data['settings']['recaptcha_support'] ? 1 : 2 );
324 $active_grid = $active_grid > $total_grid ? $total_grid : $active_grid;
325
326 /**
327 * Hook: everest_forms_display_row_before.
328 */
329 do_action( 'everest_forms_display_builder_row_before', $row_id, $form_data, $form_id );
330
331 $repeater_field = apply_filters( 'everest_forms_display_repeater_fields', false, $row_grid, $fields );
332
333 echo '<div class="evf-admin-row" data-row-id="' . absint( $row ) . '"' . ( ! empty( $repeater_field ) ? esc_attr( $repeater_field ) : '' ) . '>';
334 echo '<div class="evf-toggle-row">';
335 if ( empty( $repeater_field ) ) {
336 echo '<div class="evf-duplicate-row"><span class="dashicons dashicons-media-default" title="Duplicate Row"></span></div>';
337 echo '<div class="evf-delete-row"><span class="dashicons dashicons-trash" title="Delete Row"></span></div>';
338 echo '<div class="evf-show-grid"><span class="dashicons dashicons-edit" title="Edit"></span></div>';
339 if ( defined( 'EFP_VERSION' ) ) {
340 echo '<div class="evf-row-setting"><span class="dashicons dashicons-admin-settings" title="Row Setting"></span></div>';
341 }
342 }
343 echo '<div class="evf-toggle-row-content">';
344 echo '<span>' . esc_html__( 'Row Settings', 'everest-forms' ) . '</span>';
345 echo '<small>' . esc_html__( 'Select the type of row', 'everest-forms' ) . '</small>';
346 echo '<div class="clear"></div>';
347
348 for ( $grid_active = 1; $grid_active <= $total_grid; $grid_active++ ) {
349 $class = 'evf-grid-selector';
350
351 if ( $grid_active === $active_grid ) {
352 $class .= ' active';
353 }
354
355 echo '<div class="' . esc_attr( $class ) . '" data-evf-grid="' . absint( $grid_active ) . '">';
356
357 $gaps = 15;
358 $width = ( 100 - $gaps ) / $grid_active;
359 $margin = ( $gaps / $grid_active ) / 2;
360
361 for ( $row_icon = 1; $row_icon <= $grid_active; $row_icon++ ) {
362 echo '<span style="width:' . (float) $width . '%; margin-left:' . (float) $margin . '%; margin-right:' . (float) $margin . '%"></span>';
363 }
364
365 echo '</div>';
366 }
367
368 echo '</div>';
369 echo '</div>';
370 echo '<div class="clear evf-clear"></div>';
371 echo '<div class="evf-grid-lists">';
372 $grid_class = 'evf-admin-grid evf-grid-' . ( $active_grid );
373 for ( $grid_start = 1; $grid_start <= $active_grid; $grid_start++ ) {
374 echo '<div class="' . esc_attr( $grid_class ) . ' " data-grid-id="' . absint( $grid_start ) . '">';
375 $grid_fields = isset( $row_grid[ 'grid_' . $grid_start ] ) && is_array( $row_grid[ 'grid_' . $grid_start ] ) ? $row_grid[ 'grid_' . $grid_start ] : ( isset( $this->form_data['settings']['recaptcha_support'] ) && '1' === $this->form_data['settings']['recaptcha_support'] ? array(
376 'IWX5HFxv2j-18',
377 ) : array() );
378 $recaptcha_type = get_option( 'everest_forms_recaptcha_type', 'v2' );
379 if ( isset( $this->form_data['settings']['recaptcha_support'] ) && '1' === $this->form_data['settings']['recaptcha_support'] ) {
380 if ( 'v2' === $recaptcha_type || 'v3' === $recaptcha_type ) {
381 $recaptcha_type = 'recaptcha';
382 }
383 $fields['IWX5HFxv2j-18'] = array(
384 'id' => 'IWX5HFxv2j-18',
385 'type' => $recaptcha_type,
386 'label' => '',
387 'meta-key' => $recaptcha_type . '_7543',
388 );
389 }
390 foreach ( $grid_fields as $field_id ) {
391 if ( isset( $fields[ $field_id ] ) && ! in_array( $fields[ $field_id ]['type'], evf()->form_fields->get_pro_form_field_types(), true ) ) {
392 $this->field_preview( $fields[ $field_id ] );
393 }
394 }
395 echo '</div>';
396 }
397 echo '</div >';
398 echo '<div class="clear evf-clear"></div>';
399 echo '</div >';
400
401 /**
402 * Hook: everest_forms_display_builder_row_after.
403 *
404 * @hooked EverestForms_MultiPart::display_builder_row_after() Multi-Part markup (close previous part, open next).
405 */
406 do_action( 'everest_forms_display_builder_row_after', $row_id, $form_data, $form_id );
407 }
408
409 /**
410 * Hook: everest_forms_display_builder_fields_after.
411 *
412 * @hooked EverestForms_MultiPart::display_builder_fields_after() Multi-Part markup open.
413 */
414 do_action( 'everest_forms_display_builder_fields_after', $form_data, $form_id );
415
416 echo '</div>';
417 echo '<div class="clear evf-clear"></div>';
418 if ( defined( 'EVF_REPEATER_FIELDS_VERSION' ) ) {
419 echo '<div class="evf-repeater-row-wrapper">'; // Repeater Row Wrapper starts.
420 }
421
422 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>';
423
424 if ( defined( 'EVF_REPEATER_FIELDS_VERSION' ) ) {
425 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>';
426 echo '</div>'; // Repeater Row Wrapper ends.
427 }
428 echo '</div >';
429 }
430
431 /**
432 * Single Field preview.
433 *
434 * @param array $field Field data and settings.
435 */
436 public function field_preview( $field ) {
437 $css = ! empty( $field['size'] ) ? 'size-' . esc_attr( $field['size'] ) : '';
438 $css .= ! empty( $field['label_hide'] ) && '1' === $field['label_hide'] ? ' label_hide' : '';
439 $css .= ! empty( $field['sublabel_hide'] ) && '1' === $field['sublabel_hide'] ? ' sublabel_hide' : '';
440 $css .= ! empty( $field['required'] ) && '1' === $field['required'] ? ' required' : '';
441 $css .= ! empty( $field['input_columns'] ) && '2' === $field['input_columns'] ? ' everest-forms-list-2-columns' : '';
442 $css .= ! empty( $field['input_columns'] ) && '3' === $field['input_columns'] ? ' everest-forms-list-3-columns' : '';
443 $css .= ! empty( $field['input_columns'] ) && 'inline' === $field['input_columns'] ? ' everest-forms-list-inline' : '';
444 $css = apply_filters( 'everest_forms_field_preview_class', $css, $field );
445 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'] ) );
446 printf( '<div class="evf-field-action">' );
447 if ( 'repeater-fields' !== $field['type'] ) {
448 printf( '<a href="#" class="everest-forms-field-duplicate" title="%s"><span class="dashicons dashicons-media-default"></span></a>', esc_html__( 'Duplicate Field', 'everest-forms' ) );
449 printf( '<a href="#" class="everest-forms-field-delete" title="%s"><span class="dashicons dashicons-trash"></span></a>', esc_html__( 'Delete Field', 'everest-forms' ) );
450 printf( '<a href="#" class="everest-forms-field-setting" title="%s"><span class="dashicons dashicons-admin-generic"></span></a>', esc_html__( 'Settings', 'everest-forms' ) );
451 } else {
452 printf( '<a href="#" class="evf-duplicate-row" title="%s"><span class="dashicons dashicons-media-default"></span></a>', esc_html__( 'Duplicate Repeater', 'everest-forms' ) );
453 printf( '<a href="#" class="evf-delete-row" title="%s"><span class="dashicons dashicons-trash"></span></a>', esc_html__( 'Delete Repeater', 'everest-forms' ) );
454 }
455 printf( '</div>' );
456
457 do_action( 'everest_forms_builder_fields_preview_' . $field['type'], $field );
458
459 echo '</div>';
460 }
461 }
462
463 return new EVF_Builder_Fields();
464