You are here

protected function MailchimpListsSelectWidget::setupInterestGroups in Mailchimp 2.x

Parameters

array $element:

FormStateInterface $form_state:

$instance:

$email:

$hide_subscribe_checkbox:

$at_least_one_interest_group:

$mailchimp_list_id:

Return value

array

1 call to MailchimpListsSelectWidget::setupInterestGroups()
MailchimpListsSelectWidget::formElement in modules/mailchimp_lists/src/Plugin/Field/FieldWidget/MailchimpListsSelectWidget.php
Returns the form for a single field widget.

File

modules/mailchimp_lists/src/Plugin/Field/FieldWidget/MailchimpListsSelectWidget.php, line 134

Class

MailchimpListsSelectWidget
Plugin implementation of the 'mailchimp_lists_select' widget.

Namespace

Drupal\mailchimp_lists\Plugin\Field\FieldWidget

Code

protected function setupInterestGroups(array $element, FormStateInterface $form_state, $instance, $email, $hide_subscribe_checkbox, $at_least_one_interest_group, $mailchimp_list_id) {
  $interest_groups_label = $instance
    ->getFieldDefinition()
    ->getSetting('interest_groups_label');
  $instance_name = $instance
    ->getFieldDefinition()
    ->getName();
  $instance_list_id = $instance
    ->getFieldDefinition()
    ->getSetting('mc_list_id');
  $mc_instance_list = mailchimp_get_list($instance_list_id);

  // TRUE if interest groups are enabled for this list.
  $show_interest_groups = $this->fieldDefinition
    ->getSetting('show_interest_groups');

  // TRUE if widget is being used to set default values via admin form.
  $is_default_value_widget = $this
    ->isDefaultValueWidget($form_state);

  // TRUE if interest groups are enabled but hidden from the user.
  $interest_groups_hidden = $this->fieldDefinition
    ->getSetting('interest_groups_hidden');
  $interest_group_element_type = 'fieldset';
  if (!$is_default_value_widget && $show_interest_groups && $hide_subscribe_checkbox && $at_least_one_interest_group && !$this
    ->memberIsUnsubscribed($mailchimp_list_id, $email)) {
    $interest_group_element_type = 'container';
  }
  if ($show_interest_groups || $is_default_value_widget) {
    if ($interest_groups_hidden && !$is_default_value_widget) {
      $element['interest_groups'] = [];
    }
    else {
      $element['interest_groups'] = [
        '#type' => $interest_group_element_type,
        '#title' => Html::escape($interest_groups_label),
        '#weight' => 100,
      ];
      $element['interest_groups']['#states'] = [
        'invisible' => [
          ':input[name="' . $instance_name . '[0][value][subscribe]"]' => [
            'checked' => FALSE,
          ],
        ],
      ];
    }
    if ($is_default_value_widget) {
      $element['interest_groups']['#states']['invisible'] = [
        ':input[name="settings[show_interest_groups]"]' => [
          'checked' => FALSE,
        ],
      ];
    }
    $groups_default = $this
      ->getInterestGroupsDefaults($instance);
    if (!empty($mc_instance_list->intgroups)) {
      $mode = $is_default_value_widget ? 'admin' : ($interest_groups_hidden ? 'hidden' : 'default');
      $element['interest_groups'] += mailchimp_interest_groups_form_elements($mc_instance_list, $groups_default, $email, $mode);
    }
  }
  return $element;
}