You are here

function mailchimp_lists_field_widget_form in Mailchimp 7.4

Same name and namespace in other branches
  1. 7.5 modules/mailchimp_lists/includes/mailchimp_lists.field.inc \mailchimp_lists_field_widget_form()
  2. 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;
}