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('';
// 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('
', $class, $field['id'], $this->type);
foreach ($values as $key => $value) {
$default = ! empty($value['default']) ? $value['default'] : '';
$option_choices .= sprintf('- ', $key);
$option_choices .= sprintf('', $field['id'], $key, checked('1', $default, false));
$option_choices .= sprintf('', $field['id'], $key, esc_attr($value['label']));
$option_choices .= sprintf('', $field['id'], $key, esc_attr($value['value']));
$option_choices .= '
';
}
$option_choices .= '
';
// 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 '';
// Dynamic population is enabled and contains more than 20 items
if (isset($total) && $total > 20) {
echo '';
printf(__('Showing the first 20 choices.
All %d choices will be displayed when viewing the form.', 'wpforms'), absint($total));
echo '
';
}
// 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('', $field_id, $field_class);
foreach ($choices as $key => $choice) {
$selected = isset($choice['default']) ? '1' : '0';
$depth = isset($choice['depth']) ? absint($choice['depth']) : 1;
printf('- ', $key, $depth);
// Checkbox elements
printf(
'',
$form_id,
$field['id'],
$key,
$field['id'],
esc_attr($choice['value']),
checked('1', $selected, false),
$field_required
);
printf('', $form_id, $field['id'], $key, wp_kses_post($choice['label']));
echo '
';
}
echo '
';
}
/**
* 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;
}
}