/** * {@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; }