You are here

public function SubscriberMassSubscribeForm::submitForm in Simplenews 8

Same name and namespace in other branches
  1. 8.2 src/Form/SubscriberMassSubscribeForm.php \Drupal\simplenews\Form\SubscriberMassSubscribeForm::submitForm()
  2. 3.x src/Form/SubscriberMassSubscribeForm.php \Drupal\simplenews\Form\SubscriberMassSubscribeForm::submitForm()

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/SubscriberMassSubscribeForm.php, line 120

Class

SubscriberMassSubscribeForm
Do a mass subscription for a list of email addresses.

Namespace

Drupal\simplenews\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  $added = array();
  $invalid = array();
  $unsubscribed = array();
  $checked_newsletters = array_keys(array_filter($form_state
    ->getValue('newsletters')));
  $langcode = $form_state
    ->getValue('language');
  $emails = preg_split("/[\\s,]+/", $form_state
    ->getValue('emails'));
  foreach ($emails as $email) {
    $email = trim($email);
    if ($email == '') {
      continue;
    }
    if (valid_email_address($email)) {
      $subscriber = simplenews_subscriber_load_by_mail($email);

      /** @var \Drupal\simplenews\Subscription\SubscriptionManagerInterface $subscription_manager */
      $subscription_manager = \Drupal::service('simplenews.subscription_manager');
      foreach (simplenews_newsletter_load_multiple($checked_newsletters) as $newsletter) {

        // If there is a valid subscriber, check if there is a subscription for
        // the current newsletter and if this subscription has the status
        // unsubscribed.
        $is_unsubscribed = $subscriber ? $subscriber
          ->isUnsubscribed($newsletter
          ->id()) : FALSE;
        if (!$is_unsubscribed || $form_state
          ->getValue('resubscribe') == TRUE) {
          $subscription_manager
            ->subscribe($email, $newsletter
            ->id(), FALSE, 'mass subscribe', $langcode);
          $added[] = $email;
        }
        else {
          $unsubscribed[$newsletter
            ->label()][] = $email;
        }
      }
    }
    else {
      $invalid[] = $email;
    }
  }
  if ($added) {
    $added = implode(", ", $added);
    $this
      ->messenger()
      ->addMessage(t('The following addresses were added or updated: %added.', array(
      '%added' => $added,
    )));
    $list_names = array();
    foreach (simplenews_newsletter_load_multiple($checked_newsletters) as $newsletter) {
      $list_names[] = $newsletter
        ->label();
    }
    $this
      ->messenger()
      ->addMessage(t('The addresses were subscribed to the following newsletters: %newsletters.', array(
      '%newsletters' => implode(', ', $list_names),
    )));
  }
  else {
    $this
      ->messenger()
      ->addMessage(t('No addresses were added.'));
  }
  if ($invalid) {
    $invalid = implode(", ", $invalid);
    $this
      ->messenger()
      ->addError(t('The following addresses were invalid: %invalid.', array(
      '%invalid' => $invalid,
    )));
  }
  foreach ($unsubscribed as $name => $subscribers) {
    $subscribers = implode(", ", $subscribers);
    $this
      ->messenger()
      ->addWarning(t('The following addresses were skipped because they have previously unsubscribed from %name: %unsubscribed.', array(
      '%name' => $name,
      '%unsubscribed' => $subscribers,
    )));
  }
  if (!empty($unsubscribed)) {
    $this
      ->messenger()
      ->addWarning(t("If you would like to resubscribe them, use the 'Force resubscription' option."));
  }

  // Return to the parent page.
  $form_state
    ->setRedirect('view.simplenews_subscribers.page_1');
}