File ManagerCurrent Directory: wp-content/plugins/wpforms/src/Pro/Forms/Fields/RepeaterLinux appserver-0d5e4f1e-php-cc8da225320a42ba9b7d66cba40b1f03 6.6.123+ #1 SMP PREEMPT_DYNAMIC Wed Mar 11 09:04:28 UTC 2026 x86_64Edit File: Field.php <?php /** * Suppress inspection on private properties `frontend_obj` and `builder_obj`. * They are used via getter `get_object()`. * * @noinspection PhpPropertyOnlyWrittenInspection */ namespace WPForms\Pro\Forms\Fields\Repeater; use WPForms\Pro\Forms\Fields\Traits\Layout\Field as LayoutFieldTrait; use WPForms_Field; /** * Repeater field. * * @since 1.8.9 */ class Field extends WPForms_Field { use LayoutFieldTrait; /** * Instance of the Builder class for Layout Field. * * @since 1.8.9 * * @var Builder */ protected $builder_obj; /** * Display selector values. * * @since 1.8.9 * * @var array */ const DISPLAY_VALUES = [ 'rows', 'blocks', ]; /** * Layout presets. * * @since 1.8.9 * * @var array */ const PRESETS = [ '100', '50-50', '67-33', '33-67', '33-33-33', '50-25-25', '25-25-50', '25-50-25', '25-25-25-25', ]; /** * Field types that not allowed to drag into the column. * * @since 1.8.9 * * @var array */ const NOT_ALLOWED_FIELDS = [ 'layout', 'repeater', 'pagebreak', 'divider', 'entry-preview', 'captcha', 'file-upload', 'likert_scale', 'net_promoter_score', 'credit-card', 'payment-checkbox', 'payment-multiple', 'payment-select', 'payment-single', 'payment-total', 'payment-coupon', 'paypal-commerce', 'stripe-credit-card', 'square', 'authorize_net', 'internal-information', ]; /** * Handle name for `wp_register_styles`. * * @since 1.8.9 * * @var string */ public $style_handle = 'wpforms-repeater'; /** * Maximum allowed rows. * * @since 1.8.9 * * @var int */ const ROWS_LIMIT_MAX = 200; /** * Maximum allowed rows by default. * * @since 1.8.9 * * @var int */ const DEFAULT_ROWS_LIMIT_MAX = 10; /** * Columns settings by default. * * @since 1.8.9 * * @var array */ const DEFAULT_COLUMNS = [ 0 => [ 'width_custom' => '', 'width_preset' => '100', 'fields' => [], ], ]; /** * Primary class constructor. * * @since 1.8.9 */ public function init() { // Define field type information. $this->name = esc_html__( 'Repeater', 'wpforms' ); $this->keywords = esc_html__( 'repeater, row, column', 'wpforms' ); $this->type = 'repeater'; $this->icon = 'fa-list fa-flip-horizontal'; $this->order = 150; $this->group = 'fancy'; // Default settings. $this->defaults = [ 'label' => $this->name, 'name' => $this->name, 'description' => '', 'label_hide' => '0', 'size' => 'medium', 'preset' => '100', 'display' => 'rows', 'button_type' => 'buttons_with_icons', 'button_add_label' => esc_html__( 'Add', 'wpforms' ), 'button_remove_label' => esc_html__( 'Remove', 'wpforms' ), 'rows_limit_min' => '1', 'rows_limit_max' => self::DEFAULT_ROWS_LIMIT_MAX, 'columns' => self::DEFAULT_COLUMNS, ]; $this->init_objects(); $this->hooks(); } /** * Format and sanitize field. * * @since 1.8.9 * * @param int $field_id Field ID. * @param mixed $field_submit Field value that was submitted. * @param array $form_data Form data and settings. */ public function format( $field_id, $field_submit, $form_data ) { if ( is_array( $field_submit ) ) { $field_submit = array_filter( $field_submit ); $field_submit = implode( "\r\n", $field_submit ); } $name = ! empty( $form_data['fields'][ $field_id ]['label'] ) ? sanitize_text_field( $form_data['fields'][ $field_id ]['label'] ) : ''; // Sanitize but keep line breaks. $value = wpforms_sanitize_textarea_field( $field_submit ); wpforms()->obj( 'process' )->fields[ $field_id ] = [ 'name' => $name, 'value' => $value, 'id' => wpforms_validate_field_id( $field_id ), 'display' => ! empty( $form_data['fields'][ $field_id ]['display'] ) ? $form_data['fields'][ $field_id ]['display'] : 'rows', 'columns' => ! empty( $form_data['fields'][ $field_id ]['columns'] ) ? $form_data['fields'][ $field_id ]['columns'] : [], 'preset' => ! empty( $form_data['fields'][ $field_id ]['preset'] ) ? $form_data['fields'][ $field_id ]['preset'] : '100', 'label' => ! empty( $form_data['fields'][ $field_id ]['label'] ) ? $form_data['fields'][ $field_id ]['label'] : '', 'type' => $this->type, ]; } /** * Remove unsupported child fields from the field columns' data. * * @since 1.8.9 * * @param array $field Field settings. * @param array $form_data Form data. * * @return array Filtered field settings. */ public function remove_unsupported_child_fields( array $field, array $form_data ): array { if ( empty( $field['columns'] ) || empty( $form_data['fields'] ) ) { return $field; } foreach ( $field['columns'] as $c => $column ) { $column_fields = $column['fields'] ?? []; foreach ( $column_fields as $f => $field_id ) { if ( ! isset( $form_data['fields'][ $field_id ]['type'] ) || in_array( $form_data['fields'][ $field_id ]['type'], self::NOT_ALLOWED_FIELDS, true ) ) { unset( $column_fields[ $f ] ); } } $field['columns'][ $c ]['fields'] = $column_fields; } return $field; } } Upload File Directory Listing NameTypeSizeActions.. (Parent Directory)DirBuilder.phpFile16.47 KB Rename | Delete | EditField.phpFile5.18 KB Rename | Delete | EditFrontend.phpFile19.53 KB Rename | Delete | EditHelpers.phpFile9.20 KB Rename | Delete | EditNotifications.phpFile7.41 KB Rename | Delete | EditProcess.phpFile17.43 KB Rename | Delete | Edit