/**
  * {@inheritdoc}
  */
 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state)
 {
     /* @var $instance \Drupal\mailchimp_lists\Plugin\Field\FieldType\MailchimpListsSubscription */
     $instance = $items[0];
     $subscribe_default = $instance->getSubscribe();
     $email = NULL;
     if (!empty($instance->getEntity())) {
         $email = mailchimp_lists_load_email($instance, $instance->getEntity(), FALSE);
         if ($email) {
             $subscribe_default = mailchimp_is_subscribed($instance->getFieldDefinition()->getSetting('mc_list_id'), $email);
         }
     }
     $element += array('#title' => SafeMarkup::checkPlain($element['#title']), '#type' => 'fieldset');
     $element['subscribe'] = array('#title' => t('Subscribe'), '#type' => 'checkbox', '#default_value' => $subscribe_default ? TRUE : $this->fieldDefinition->isRequired(), '#required' => $this->fieldDefinition->isRequired(), '#disabled' => $this->fieldDefinition->isRequired());
     $form_id = $form_state->getFormObject()->getFormId();
     if ($this->fieldDefinition->getSetting('show_interest_groups') || $form_id == 'field_ui_field_edit_form') {
         $mc_list = mailchimp_get_list($instance->getFieldDefinition()->getSetting('mc_list_id'));
         $element['interest_groups'] = array('#type' => 'fieldset', '#title' => SafeMarkup::checkPlain($instance->getFieldDefinition()->getSetting('interest_groups_title')), '#weight' => 100, '#states' => array('invisible' => array(':input[name="' . $instance->getFieldDefinition()->getName() . '[0][value][subscribe]"]' => array('checked' => FALSE))));
         if ($form_id == 'field_ui_field_edit_form') {
             $element['interest_groups']['#states']['invisible'] = array(':input[name="field[settings][show_interest_groups]"]' => array('checked' => FALSE));
         }
         $groups_default = $instance->getInterestGroups();
         if ($groups_default == NULL) {
             $groups_default = array();
         }
         if ($mc_list['stats']['group_count']) {
             $element['interest_groups'] += mailchimp_interest_groups_form_elements($mc_list, $groups_default, $email);
         }
     }
     return array('value' => $element);
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $form = array();
     $form['#attributes'] = array('class' => array('mailchimp-signup-subscribe-form'));
     $form['description'] = array('#markup' => $this->signup->settings['description']);
     $form['mailchimp_lists'] = array('#tree' => TRUE);
     $lists = mailchimp_get_lists($this->signup->mc_lists);
     $lists_count = !empty($lists) ? count($lists) : 0;
     if (empty($lists)) {
         drupal_set_message('The subscription service is currently unavailable. Please try again later.', 'warning');
     }
     $list = array();
     if ($lists_count > 1) {
         foreach ($lists as $list) {
             // Wrap in a div:
             $wrapper_key = 'mailchimp_' . $list['web_id'];
             $form['mailchimp_lists'][$wrapper_key] = array('#prefix' => '<div id="mailchimp-newsletter-' . $list['web_id'] . '" class="mailchimp-newsletter-wrapper">', '#suffix' => '</div>');
             $form['mailchimp_lists'][$wrapper_key]['subscribe'] = array('#type' => 'checkbox', '#title' => $list['name'], '#return_value' => $list['id'], '#default_value' => 0);
             if ($this->signup->settings['include_interest_groups'] && isset($list['intgroups'])) {
                 $form['mailchimp_lists'][$wrapper_key]['interest_groups'] = array('#type' => 'fieldset', '#title' => t('Interest Groups for %label', array('%label' => $list['name'])), '#states' => array('invisible' => array(':input[name="mailchimp_lists[' . $wrapper_key . '][subscribe]"]' => array('checked' => FALSE))));
                 $form['mailchimp_lists'][$wrapper_key]['interest_groups'] += mailchimp_interest_groups_form_elements($list);
             }
         }
     } else {
         $list = reset($lists);
         if ($this->signup->settings['include_interest_groups'] && isset($list['intgroups'])) {
             $form['mailchimp_lists']['#weight'] = 9;
             $form['mailchimp_lists']['interest_groups'] = mailchimp_interest_groups_form_elements($list);
         }
     }
     $form['mergevars'] = array('#prefix' => '<div id="mailchimp-newsletter-' . $list['web_id'] . '-mergefields" class="mailchimp-newsletter-mergefields">', '#suffix' => '</div>', '#tree' => TRUE);
     foreach ($this->signup->settings['mergefields'] as $tag => $mergevar) {
         if (!empty($mergevar)) {
             $form['mergevars'][$tag] = mailchimp_insert_drupal_form_tag($mergevar);
             if (empty($lists)) {
                 $form['mergevars'][$tag]['#disabled'] = TRUE;
             }
         }
     }
     $form['submit'] = array('#type' => 'submit', '#weight' => 10, '#value' => $this->signup->settings['submit_button'], '#disabled' => empty($lists));
     return $form;
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $form = array();
     $field_settings = $this->fieldInstance->getFieldDefinition()->getSettings();
     $field_formatter_settings = $this->fieldFormatter->getSettings();
     $mc_list = mailchimp_get_list($field_settings['mc_list_id']);
     $email = mailchimp_lists_load_email($this->fieldInstance, $this->fieldInstance->getEntity());
     if (!$email) {
         return array();
     }
     $field_name = $this->fieldInstance->getFieldDefinition()->getName();
     // Determine if a user is subscribed to the list.
     $is_subscribed = mailchimp_is_subscribed($mc_list['id'], $email);
     $wrapper_key = 'mailchimp_' . $field_name;
     $form['wrapper_key'] = array('#type' => 'hidden', '#default_value' => $wrapper_key);
     $form[$wrapper_key] = array('#type' => 'container', '#tree' => TRUE, '#description' => $this->fieldInstance->getFieldDefinition()->getDescription(), '#attributes' => array('class' => array('mailchimp-newsletter-wrapper', 'mailchimp-newsletter-' . $field_name)));
     // Add the title and description to lists for anonymous users or if requested:
     $form[$wrapper_key]['subscribe'] = array('#type' => 'checkbox', '#title' => 'Subscribe', '#disabled' => $this->fieldInstance->getFieldDefinition()->isRequired(), '#required' => $this->fieldInstance->getFieldDefinition()->isRequired(), '#default_value' => $this->fieldInstance->getFieldDefinition()->isRequired() || $is_subscribed);
     // Present interest groups:
     if ($field_settings['show_interest_groups'] && $field_formatter_settings['show_interest_groups']) {
         // Perform test in case error comes back from MCAPI when getting groups:
         if (is_array($mc_list['intgroups'])) {
             $form[$wrapper_key]['interest_groups'] = array('#type' => 'fieldset', '#title' => isset($settings['interest_groups_label']) ? $settings['interest_groups_label'] : t('Interest Groups'), '#weight' => 100, '#states' => array('invisible' => array(':input[name="' . $wrapper_key . '[subscribe]"]' => array('checked' => FALSE))));
             $groups_default = $this->fieldInstance->getInterestGroups();
             if ($groups_default == NULL) {
                 $groups_default = array();
             }
             $form[$wrapper_key]['interest_groups'] += mailchimp_interest_groups_form_elements($mc_list, $groups_default, $email);
         }
     }
     $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
     return $form;
 }