function mailchimp_lists_field_widget_form in Mailchimp 7.4
Same name and namespace in other branches
- 7.5 modules/mailchimp_lists/includes/mailchimp_lists.field.inc \mailchimp_lists_field_widget_form()
- 7.3 modules/mailchimp_lists/includes/mailchimp_lists.field.inc \mailchimp_lists_field_widget_form()
Implements hook_field_widget_form().
File
- modules/
mailchimp_lists/ includes/ mailchimp_lists.field.inc, line 334 - Field hooks.
Code
function mailchimp_lists_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$default = isset($instance['default_value'][0]['subscribe']) ? $instance['default_value'][0]['subscribe'] : FALSE;
$email = NULL;
if (isset($element['#entity'])) {
$email = mailchimp_lists_load_email($instance, $element['#entity'], FALSE);
if ($email) {
$default = mailchimp_is_subscribed($field['settings']['mc_list_id'], $email, $field['settings']['double_opt_in']);
}
}
$element += array(
'#title' => check_plain($element['#title']),
'#type' => 'fieldset',
);
// Load the Mailchimp list from the field's list ID.
$mc_list = mailchimp_get_list($field['settings']['mc_list_id']);
$element['subscribe'] = array(
'#title' => t('Subscribe'),
'#type' => 'checkbox',
'#default_value' => $default || $instance['required'],
'#required' => $instance['required'],
'#disabled' => $instance['required'],
);
// Hide the Subscribe checkbox if:
// - The field is configured to show interest groups.
// - The field is configured to hide the Subscribe checkbox.
// - The list has at least one interest group.
// This allows users to skip the redundant step of checking the Subscribe
// checkbox when also checking interest group checkboxes.
if ($instance['settings']['show_interest_groups'] && $instance['settings']['hide_subscribe_checkbox'] && !empty($mc_list->intgroups)) {
$element['subscribe']['#access'] = FALSE;
$interest_group_element_type = 'container';
}
else {
$interest_group_element_type = 'fieldset';
}
if ($instance['settings']['show_interest_groups'] || $form_state['build_info']['form_id'] == 'field_ui_field_edit_form') {
$element['interest_groups'] = array(
'#type' => $interest_group_element_type,
'#title' => check_plain($instance['settings']['interest_groups_title']),
'#weight' => 100,
'#states' => array(
'invisible' => array(
':input[name="' . $field['field_name'] . '[' . $langcode . '][0][subscribe]"]' => array(
'checked' => FALSE,
),
),
),
);
if ($form_state['build_info']['form_id'] == 'field_ui_field_edit_form') {
$element['interest_groups']['#states']['invisible'] = array(
':input[name="instance[settings][show_interest_groups]"]' => array(
'checked' => FALSE,
),
);
}
$groups_default = isset($instance['default_value'][0]['interest_groups']) ? $instance['default_value'][0]['interest_groups'] : array();
if (!empty($mc_list->intgroups)) {
$element['interest_groups'] += mailchimp_interest_groups_form_elements($mc_list, $groups_default, $email);
}
}
// Make a distinction between whether the field is edited by the system or the user.
// This is important to prevent unwanted subscription overwrites.
// @see _mailchimp_lists_field_postsave()
if (isset($element['#entity'])) {
// The field is edited via the UI.
$element['is_default'] = array(
'#type' => 'value',
'#value' => FALSE,
);
}
else {
// The field is NOT edited via the UI.
$element['is_default'] = array(
'#type' => 'value',
'#value' => TRUE,
);
}
$element['#element_validate'] = array(
'mailchimp_lists_field_widget_form_validate',
);
return $element;
}