PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 1.6.3
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v1.6.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 6 years ago class-evf-builder-page.php 6 years ago class-evf-builder-settings.php 6 years ago
class-evf-builder-fields.php
329 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 <?php do_action( 'everest_forms_builder_fields', $this->form ); ?>
68 </div>
69 <div class="everest-forms-field-options">
70 <?php do_action( 'everest_forms_builder_fields_options', $this->form ); ?>
71 </div>
72 <?php do_action( 'everest_forms_builder_fields_tab_content', $this->form ); ?>
73 </div>
74 <?php
75 }
76
77 /**
78 * Outputs the builder content.
79 */
80 public function output_content() {
81 ?>
82 <div class="everest-forms-preview-wrap">
83 <div class="everest-forms-preview">
84 <div class="everest-forms-title-desc">
85 <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>
86 <span id="edit-form-name" class = "evf-icon dashicons dashicons-edit"></span>
87 </div>
88 <div class="everest-forms-field-wrap">
89 <?php do_action( 'everest_forms_builder_fields_preview', $this->form ); ?>
90 </div>
91 <?php evf_debug_data( $this->form_data ); ?>
92 </div>
93 </div>
94 <?php
95 }
96
97 /**
98 * Output fields group buttons.
99 */
100 public function output_fields() {
101 $form_fields = evf()->form_fields->form_fields();
102
103 if ( ! empty( $form_fields ) ) {
104 foreach ( $form_fields as $group => $form_field ) {
105 ?>
106 <div class="everest-forms-add-fields-group open">
107 <a href="#" class="everest-forms-add-fields-heading" data-group="<?php echo esc_attr( $group ); ?>"><?php echo evf_get_fields_group( $group ); // phpcs:ignore WordPress.Security.EscapeOutput ?><i class="handlediv"></i></a>
108 <div class="evf-registered-buttons">
109 <?php foreach ( $form_field as $field ) : ?>
110 <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 ); ?>">
111 <?php if ( isset( $field->icon ) ) : ?>
112 <i class="<?php echo esc_attr( $field->icon ); ?>"></i>
113 <?php endif; ?>
114 <?php echo esc_html( $field->name ); ?>
115 </button>
116 <?php endforeach; ?>
117 </div>
118 </div>
119 <?php
120 }
121 }
122 }
123
124 /**
125 * Output fields setting options.
126 */
127 public function output_fields_options() {
128 $fields = isset( $this->form_data['form_fields'] ) ? $this->form_data['form_fields'] : array();
129
130 if ( ! empty( $fields ) ) {
131 foreach ( $fields as $field ) {
132 if ( in_array( $field['type'], evf()->form_fields->get_pro_form_field_types(), true ) ) {
133 continue;
134 }
135
136 $field_option_class = apply_filters(
137 'everest_forms_builder_field_option_class',
138 array(
139 'everest-forms-field-option',
140 'everest-forms-field-option-' . esc_attr( $field['type'] ),
141 ),
142 $field
143 );
144
145 ?>
146 <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'] ); ?>" >
147 <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" />
148 <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" />
149 <?php do_action( 'everest_forms_builder_fields_options_' . $field['type'], $field ); ?>
150 </div>
151 <?php
152 }
153 } else {
154 printf( '<p class="no-fields">%s</p>', esc_html__( 'You don\'t have any fields yet.', 'everest-forms' ) );
155 }
156 }
157
158 /**
159 * Outputs fields preview content.
160 */
161 public function output_fields_preview() {
162 $form_data = $this->form_data;
163 $form_id = absint( $form_data['id'] );
164 $fields = isset( $form_data['form_fields'] ) ? $form_data['form_fields'] : array();
165 $structure = isset( $form_data['structure'] ) ? $form_data['structure'] : array( 'row_1' => array() );
166
167 /**
168 * BW compatiable for multi-parts form.
169 *
170 * @todo Remove in Major EVF version 1.6.0
171 */
172 if ( defined( 'EVF_MULTI_PART_PLUGIN_FILE' ) ) {
173 include_once ABSPATH . 'wp-admin/includes/plugin.php';
174 $plugin_data = get_plugin_data( EVF_MULTI_PART_PLUGIN_FILE, false, false );
175
176 if ( version_compare( $plugin_data['Version'], '1.3.0', '<' ) ) {
177 $settings_defaults = array(
178 'indicator' => 'progress',
179 'indicator_color' => '#7e3bd0',
180 'nav_align' => 'center',
181 );
182
183 if ( isset( $form_data['settings']['enable_multi_part'] ) && evf_string_to_bool( $form_data['settings']['enable_multi_part'] ) ) {
184 $settings = isset( $form_data['settings']['multi_part'] ) ? $form_data['settings']['multi_part'] : array();
185
186 if ( ! empty( $form_data['multi_part'] ) ) {
187 self::$parts = array(
188 'total' => count( $form_data['multi_part'] ),
189 'current' => 1,
190 'parts' => array_values( $form_data['multi_part'] ),
191 'settings' => wp_parse_args( $settings, $settings_defaults ),
192 );
193 }
194 } else {
195 self::$parts = array(
196 'total' => '',
197 'current' => '',
198 'parts' => array(),
199 'settings' => $settings_defaults,
200 );
201 }
202 }
203 }
204
205 // Allow Multi-Part to be customized.
206 self::$parts[ $form_id ] = apply_filters( 'everest_forms_parts_data', self::$parts, $form_data, $form_id );
207
208 // Output the fields preview.
209 echo '<div class="evf-admin-field-container">';
210 echo '<div class="evf-admin-field-wrapper">';
211
212 /**
213 * Hook: everest_forms_display_builder_fields_before.
214 *
215 * @hooked EverestForms_MultiPart::display_builder_fields_before() Multi-Part markup open.
216 */
217 do_action( 'everest_forms_display_builder_fields_before', $form_data, $form_id );
218
219 foreach ( $structure as $row_id => $row_data ) {
220 $row = str_replace( 'row_', '', $row_id );
221 $row_grid = isset( $form_data['structure'][ 'row_' . $row ] ) ? $form_data['structure'][ 'row_' . $row ] : array();
222 $form_grid = apply_filters( 'everest_forms_default_form_grid', 2 );
223 $total_grid = $form_grid;
224 $active_grid = count( $row_grid ) > 0 ? count( $row_grid ) : $form_grid;
225 $active_grid = $active_grid > $total_grid ? $total_grid : $active_grid;
226
227 /**
228 * Hook: everest_forms_display_row_before.
229 */
230 do_action( 'everest_forms_display_builder_row_before', $row_id, $form_data, $form_id );
231
232 echo '<div class="evf-admin-row" data-row-id="' . absint( $row ) . '">';
233 echo '<div class="evf-toggle-row">';
234 echo '<div class="evf-delete-row"><span class="dashicons dashicons-trash" title="Delete"></span></div>';
235 echo '<div class="evf-show-grid"><span class="dashicons dashicons-edit" title="Edit"></span></div>';
236 echo '<div class="evf-toggle-row-content">';
237 echo '<span>' . esc_html__( 'Row Settings', 'everest-forms' ) . '</span>';
238 echo '<small>' . esc_html__( 'Select the type of row', 'everest-forms' ) . '</small>';
239 echo '<div class="clear"></div>';
240
241 for ( $grid_active = 1; $grid_active <= $total_grid; $grid_active ++ ) {
242 $class = 'evf-grid-selector';
243
244 if ( $grid_active === $active_grid ) {
245 $class .= ' active';
246 }
247
248 echo '<div class="' . esc_attr( $class ) . '" data-evf-grid="' . absint( $grid_active ) . '">';
249
250 $gaps = 15;
251 $width = ( 100 - $gaps ) / $grid_active;
252 $margin = ( $gaps / $grid_active ) / 2;
253
254 for ( $row_icon = 1; $row_icon <= $grid_active; $row_icon ++ ) {
255 echo '<span style="width:' . (float) $width . '%; margin-left:' . (float) $margin . '%; margin-right:' . (float) $margin . '%"></span>';
256 }
257
258 echo '</div>';
259 }
260
261 echo '</div>';
262 echo '</div>';
263 echo '<div class="clear evf-clear"></div>';
264
265 $grid_class = 'evf-admin-grid evf-grid-' . ( $active_grid );
266 for ( $grid_start = 1; $grid_start <= $active_grid; $grid_start ++ ) {
267 echo '<div class="' . esc_attr( $grid_class ) . ' " data-grid-id="' . absint( $grid_start ) . '">';
268 $grid_fields = isset( $row_grid[ 'grid_' . $grid_start ] ) && is_array( $row_grid[ 'grid_' . $grid_start ] ) ? $row_grid[ 'grid_' . $grid_start ] : array();
269 foreach ( $grid_fields as $field_id ) {
270 if ( isset( $fields[ $field_id ] ) && ! in_array( $fields[ $field_id ]['type'], evf()->form_fields->get_pro_form_field_types(), true ) ) {
271 $this->field_preview( $fields[ $field_id ] );
272 }
273 }
274 echo '</div>';
275 }
276 echo '<div class="clear evf-clear"></div>';
277 echo '</div >';
278
279 /**
280 * Hook: everest_forms_display_builder_row_after.
281 *
282 * @hooked EverestForms_MultiPart::display_builder_row_after() Multi-Part markup (close previous part, open next).
283 */
284 do_action( 'everest_forms_display_builder_row_after', $row_id, $form_data, $form_id );
285 }
286
287 /**
288 * Hook: everest_forms_display_builder_fields_after.
289 *
290 * @hooked EverestForms_MultiPart::display_builder_fields_after() Multi-Part markup open.
291 */
292 do_action( 'everest_forms_display_builder_fields_after', $form_data, $form_id );
293
294 echo '</div>';
295 echo '<div class="clear evf-clear"></div>';
296 echo '<div class="evf-add-row" data-total-rows="' . count( $structure ) . '"><span class="everest-forms-btn everest-forms-btn-primary dashicons dashicons-plus-alt">' . esc_html__( 'Add Row', 'everest-forms' ) . '</span></div>';
297 echo '</div >';
298 }
299
300 /**
301 * Single Field preview.
302 *
303 * @param array $field Field data.
304 */
305 public function field_preview( $field ) {
306 $css = ! empty( $field['size'] ) ? 'size-' . esc_attr( $field['size'] ) : '';
307 $css .= ! empty( $field['label_hide'] ) && '1' === $field['label_hide'] ? ' label_hide' : '';
308 $css .= ! empty( $field['sublabel_hide'] ) && '1' === $field['sublabel_hide'] ? ' sublabel_hide' : '';
309 $css .= ! empty( $field['required'] ) && '1' === $field['required'] ? ' required' : '';
310 $css .= ! empty( $field['input_columns'] ) && '2' === $field['input_columns'] ? ' everest-forms-list-2-columns' : '';
311 $css .= ! empty( $field['input_columns'] ) && '3' === $field['input_columns'] ? ' everest-forms-list-3-columns' : '';
312 $css .= ! empty( $field['input_columns'] ) && 'inline' === $field['input_columns'] ? ' everest-forms-list-inline' : '';
313 $css = apply_filters( 'everest_forms_field_preview_class', $css, $field );
314
315 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'] ) );
316 printf( '<div class="evf-field-action">' );
317 printf( '<a href="#" class="everest-forms-field-duplicate" title="%s"><span class="dashicons dashicons-media-default"></span></a>', esc_html__( 'Duplicate Field', 'everest-forms' ) );
318 printf( '<a href="#" class="everest-forms-field-delete" title="%s"><span class="dashicons dashicons-trash"></span></a>', esc_html__( 'Delete Field', 'everest-forms' ) );
319 printf( '<a href="#" class="everest-forms-field-setting" title="%s"><span class="dashicons dashicons-admin-generic"></span></a>', esc_html__( 'Settings', 'everest-forms' ) );
320 printf( '</div>' );
321
322 do_action( 'everest_forms_builder_fields_preview_' . $field['type'], $field );
323
324 echo '</div>';
325 }
326 }
327
328 return new EVF_Builder_Fields();
329