You are here

public function MailingListImportForm::submitForm in Mailing List 8

Form submission handler.

Parameters

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

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

Overrides FormInterface::submitForm

File

src/Form/MailingListImportForm.php, line 150

Class

MailingListImportForm
Mailing list import.

Namespace

Drupal\mailing_list\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  $storage = $this->entityTypeManager
    ->getStorage('mailing_list_subscription');

  /** @var \Drupal\mailing_list\SubscriptionInterface[] $existent_subscriptions */
  $existent_subscriptions = [];
  if ($no_duplicate = $form_state
    ->getValue('no_duplicate', TRUE)) {
    $query = $storage
      ->getQuery()
      ->condition('mailing_list', $this->mailingList
      ->id());

    /** @var \Drupal\mailing_list\SubscriptionInterface $subscription */
    foreach ($storage
      ->loadMultiple($query
      ->execute()) as $subscription) {
      $existent_subscriptions[$subscription
        ->getEmail()] = $subscription;
    }
  }
  $activate = $form_state
    ->getValue('activate', TRUE);
  $activate_existent = !$activate ?: $form_state
    ->getValue('activate_existent', FALSE);
  $uid = $form_state
    ->getValue('anonymous', TRUE) ? User::getAnonymousUser()
    ->id() : $this
    ->currentUser()
    ->id();
  $count = 0;
  foreach (preg_split("/\\r\\n|\\r|\\n/", $form_state
    ->getValue('emails')) as $email) {
    if (isset($existent_subscriptions[$email])) {
      $subscription = $existent_subscriptions[$email];
      if ($activate && $activate_existent && !$subscription
        ->isActive()) {
        $subscription
          ->setStatus(SubscriptionInterface::ACTIVE)
          ->save();
        $count++;
      }
    }
    else {
      $subscription = Subscription::create([
        'title' => $email,
        'mailing_list' => $this->mailingList
          ->id(),
        'email' => $email,
        'status' => $activate ? SubscriptionInterface::ACTIVE : SubscriptionInterface::INACTIVE,
        'uid' => $uid,
      ]);
      $existent_subscriptions[$email] = $subscription;
      $subscription
        ->save();
      $count++;
    }
  }
  drupal_set_message(!$count ? $this
    ->t('No subscriptions added.') : $this
    ->formatPlural($count, '1 subscription added to %label mailing list.', '@count new subscriptions added to %label mailing list.', [
    '@count' => $count,
    '%label' => $this->mailingList
      ->label(),
  ]));
  $form_state
    ->setRedirect('entity.mailing_list.collection');
}