You are here

public function CampaignMonitorUserSubscriptionForm::buildForm in Campaign Monitor 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

modules/campaignmonitor_user/src/Form/CampaignMonitorUserSubscriptionForm.php, line 48

Class

CampaignMonitorUserSubscriptionForm
Subscribe to a campaignmonitor list.

Namespace

Drupal\campaignmonitor_user\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, $user = NULL) {

  // Get the e-mail address from the user object.
  // This is not working - url is always user 1.
  $account = User::load($user);
  $current_user = \Drupal::currentUser();
  $account = User::load($current_user
    ->id());
  $email = $account
    ->get('mail')
    ->getValue()[0]['value'];
  $config = \Drupal::config('campaignmonitor_user.settings');
  $form = [];
  $form['email'] = [
    '#type' => 'hidden',
    '#value' => $email,
  ];
  $form['name'] = [
    '#type' => 'hidden',
    '#value' => $account
      ->get('name')
      ->getValue()[0]['value'],
  ];
  $lists = campaignmonitor_get_lists();

  // Build options for the form selector.
  $options = [];
  $option_descriptions = [];
  $default = [];
  foreach ($lists as $list_id => $list) {

    // Check if the list is selected to be shown.
    $list_options = campaignmonitor_get_list_settings($list_id);
    if (campaignmonitor_is_list_enabled($list_id)) {
      $options[$list_id] = $list['name'];
      $defaults = campaignmonitor_get_list_settings($list_id);
      $option_descriptions[$list_id] = $defaults['display']['description'];

      // Check if the user is subscribed to the current list.
      $default[$list_id] = 0;
      if (campaignmonitor_is_subscribed($list_id, $email)) {
        $default[$list_id] = $list_id;
      }
    }
  }
  if (!empty($options)) {
    $form['subscription_text'] = [
      '#type' => 'container',
      '#attributes' => [
        'class' => [
          'subscription-text',
        ],
      ],
    ];
    $form['subscription_text']['text'] = [
      '#markup' => $config
        ->get('subscription_text'),
    ];
    $form['lists'] = [
      '#type' => 'checkboxes',
      '#title' => $config
        ->get('list_heading'),
      // '#description' => !empty($config['instructions']) ? t($config['instructions']) : t('Select the news lists
      //        that you want to subscribe to.'),.
      '#options' => $options,
      '#default_value' => $default,
      '#option_descriptions' => $option_descriptions,
      '#after_build' => [
        '\\Drupal\\campaignmonitor_user\\Form\\CampaignMonitorUserSubscriptionForm::_option_descriptions',
      ],
    ];
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => t('Update subscriptions'),
      '#attached' => [
        'library' => [
          'campaignmonitor_user/campaignmonitor_user.subscriptions',
        ],
      ],
    ];
  }
  else {
    drupal_set_message('There are no available lists to subscribe to at the moment.', 'warning');
  }
  return $form;
}