Server : Apache System : Linux ls31.server.ly 3.10.0-962.3.2.lve1.5.68.el7.x86_64 #1 SMP Wed Apr 6 11:12:23 UTC 2022 x86_64 User : medchoco ( 2906) PHP Version : 8.3.16 Disable Function : mail Directory : /home/medchoco/www/wp-content/plugins/mailchimp-for-wp/integrations/wpforms/ |
Upload File : |
<?php class MC4WP_WPForms_Field extends WPForms_Field { /** * Primary class constructor. * * @since 1.0.0 */ public function init() { $this->name = 'Mailchimp'; $this->type = 'mailchimp'; $this->icon = 'fa-envelope-o'; $this->order = 21; $this->defaults = array( array( 'label' => __( 'Sign-up to our newsletter?', 'mailchimp-for-wp' ), 'value' => '1', 'default' => '', ), ); } /** * Field options panel inside the builder. * * @since 1.0.0 * @param array $field */ public function field_options( $field ) { //--------------------------------------------------------------------// // Basic field options //--------------------------------------------------------------------// // Options open markup $this->field_option( 'basic-options', $field, array( 'markup' => 'open' ) ); // Mailchimp list $this->field_option_mailchimp_list( $field ); // Choices $this->field_option_choices( $field ); // Description $this->field_option( 'description', $field ); // Required toggle $this->field_option( 'required', $field ); // Options close markup $this->field_option( 'basic-options', $field, array( 'markup' => 'close' ) ); //--------------------------------------------------------------------// // Advanced field options //--------------------------------------------------------------------// // Options open markup $this->field_option( 'advanced-options', $field, array( 'markup' => 'open' ) ); // Custom CSS classes $this->field_option( 'css', $field ); // Options close markup $this->field_option( 'advanced-options', $field, array( 'markup' => 'close' ) ); } private function field_option_mailchimp_list( $field ) { $mailchimp = new MC4WP_MailChimp(); // Field option label $tooltip = __( 'Select the Mailchimp list to subscribe to.', 'mailchimp-for-wp' ); $option_label = $this->field_element( 'label', $field, array( 'slug' => 'mailchimp-list', 'value' => __( 'Mailchimp list', 'mailchimp-for-wp' ), 'tooltip' => $tooltip, ), false ); $option_select = sprintf( '<select name="fields[%s][mailchimp_list]" data-field-id="%d" data-field-type="%s">', $field['id'], $field['id'], $this->type ); $lists = $mailchimp->get_lists(); foreach ( $lists as $list ) { $option_select .= sprintf( '<option value="%s" %s>%s</option>', $list->id, selected( $list->id, $field['mailchimp_list'], false ), $list->name ); } $option_select .= '</select>'; // Field option row (markup) including label and input. $output = $this->field_element( 'row', $field, array( 'slug' => 'mailchimp-list', 'content' => $option_label . $option_select, ) ); } private function field_option_choices( $field ) { $tooltip = __( 'Set your sign-up label text and whether it should be pre-checked.', 'mailchimp-for-wp' ); $values = ! empty( $field['choices'] ) ? $field['choices'] : $this->defaults; $class = ! empty( $field['show_values'] ) && (int) $field['show_values'] === 1 ? 'show-values' : ''; $class .= ! empty( $dynamic ) ? ' wpforms-hidden' : ''; // Field option label $option_label = $this->field_element( 'label', $field, array( 'slug' => 'mailchimp-checkbox', 'value' => __( 'Sign-up checkbox', 'mailchimp-for-wp' ), 'tooltip' => $tooltip, ), false ); // Field option choices inputs $option_choices = sprintf( '<ul class="choices-list %s" data-field-id="%d" data-field-type="%s">', $class, $field['id'], $this->type ); foreach ( $values as $key => $value ) { $default = ! empty( $value['default'] ) ? $value['default'] : ''; $option_choices .= sprintf( '<li data-key="%d">', $key ); $option_choices .= sprintf( '<input type="checkbox" name="fields[%s][choices][%s][default]" class="default" value="1" %s>', $field['id'], $key, checked( '1', $default, false ) ); $option_choices .= sprintf( '<input type="text" name="fields[%s][choices][%s][label]" value="%s" class="label">', $field['id'], $key, esc_attr( $value['label'] ) ); $option_choices .= sprintf( '<input type="text" name="fields[%s][choices][%s][value]" value="%s" class="value">', $field['id'], $key, esc_attr( $value['value'] ) ); $option_choices .= '</li>'; } $option_choices .= '</ul>'; // Field option row (markup) including label and input. $output = $this->field_element( 'row', $field, array( 'slug' => 'choices', 'content' => $option_label . $option_choices, ) ); } /** * Field preview inside the builder. * * @since 1.0.0 * @param array $field */ public function field_preview( $field ) { $values = ! empty( $field['choices'] ) ? $field['choices'] : $this->defaults; // Field checkbox elements echo '<ul class="primary-input">'; // Notify if currently empty if ( empty( $values ) ) { $values = array( 'label' => __( '(empty)', 'wpforms' ) ); } // Individual checkbox options foreach ( $values as $key => $value ) { $default = isset( $value['default'] ) ? $value['default'] : ''; $selected = checked( '1', $default, false ); printf( '<li><input type="checkbox" %s disabled>%s</li>', $selected, $value['label'] ); } echo '</ul>'; // Dynamic population is enabled and contains more than 20 items if ( isset( $total ) && $total > 20 ) { echo '<div class="wpforms-alert-dynamic wpforms-alert wpforms-alert-warning">'; printf( __( 'Showing the first 20 choices.<br> All %d choices will be displayed when viewing the form.', 'wpforms' ), absint( $total ) ); echo '</div>'; } // Description $this->field_preview_option( 'description', $field ); } /** * Field display on the form front-end. * * @since 1.0.0 * @param array $field * @param array $form_data */ public function field_display( $field, $field_atts, $form_data ) { // Setup some defaults because WPForms broke their integration in v1.8.1.1 $field_atts = array_merge( array( 'input_class' => array(), 'input_id' => array(), ), $field_atts ); // Setup and sanitize the necessary data $field_required = ! empty( $field['required'] ) ? ' required' : ''; $field_class = implode( ' ', array_map( 'sanitize_html_class', (array) $field_atts['input_class'] ) ); $field_id = implode( ' ', array_map( 'sanitize_html_class', (array) $field_atts['input_id'] ) ); $form_id = $form_data['id']; $choices = (array) $field['choices']; // List printf( '<ul id="%s" class="%s">', $field_id, $field_class ); foreach ( $choices as $key => $choice ) { $selected = isset( $choice['default'] ) ? '1' : '0'; $depth = isset( $choice['depth'] ) ? absint( $choice['depth'] ) : 1; printf( '<li class="choice-%d depth-%d">', $key, $depth ); // Checkbox elements printf( '<input type="checkbox" id="wpforms-%d-field_%d_%d" name="wpforms[fields][%d]" value="%s" %s %s>', $form_id, $field['id'], $key, $field['id'], esc_attr( $choice['value'] ), checked( '1', $selected, false ), $field_required ); printf( '<label class="wpforms-field-label-inline" for="wpforms-%d-field_%d_%d">%s</label>', $form_id, $field['id'], $key, wp_kses_post( $choice['label'] ) ); echo '</li>'; } echo '</ul>'; } /** * Formats and sanitizes field. * * @since 1.0.2 * @param int $field_id * @param array $field_submit * @param array $form_data */ public function format( $field_id, $field_submit, $form_data ) { $field = $form_data['fields'][ $field_id ]; $choice = array_pop( $field['choices'] ); $name = sanitize_text_field( $choice['label'] ); $data = array( 'name' => $name, 'value' => empty( $field_submit ) ? __( 'No', 'mailchimp-for-wp' ) : __( 'Yes', 'mailchimp-for-wp' ), 'value_raw' => $field_submit, 'id' => absint( $field_id ), 'type' => $this->type, ); wpforms()->process->fields[ $field_id ] = $data; } }