View source
<?php
namespace Drupal\simplenews\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Url;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class ConfirmationController extends ControllerBase {
public function confirmCombined($snid, $timestamp, $hash, $immediate = FALSE) {
$config = \Drupal::config('simplenews.settings');
$html_head = array(
array(
'#tag' => 'meta',
'#attributes' => array(
'name' => 'robots',
'content' => 'noindex',
),
),
'simplenews-noindex',
);
$subscriber = simplenews_subscriber_load($snid);
if ($subscriber && !$subscriber
->getChanges()) {
$this
->messenger()
->addMessage(t('All changes to your subscriptions where already applied. No changes made.'));
return $this
->redirect('<front>');
}
if ($subscriber && $hash == simplenews_generate_hash($subscriber
->getMail(), 'combined' . serialize($subscriber
->getChanges()), $timestamp)) {
if ($timestamp < REQUEST_TIME - $config
->get('hash_expiration')) {
$context = array(
'simplenews_subscriber' => $subscriber,
);
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\RequestHashForm', 'subscribe_combined', $context);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
if (!$immediate) {
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\ConfirmMultiForm', $subscriber);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
else {
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
foreach ($subscriber
->getChanges() as $newsletter_id => $action) {
if ($action == 'subscribe') {
$subscription_manager
->subscribe($subscriber
->getMail(), $newsletter_id, FALSE, 'website');
}
elseif ($action == 'unsubscribe') {
$subscription_manager
->unsubscribe($subscriber
->getMail(), $newsletter_id, FALSE, 'website');
}
}
$subscriber
->setChanges(array());
$subscriber
->save();
$this
->messenger()
->addMessage(t('Subscription changes confirmed for %user.', array(
'%user' => $subscriber
->getMail(),
)));
return $this
->redirect('<front>');
}
}
throw new NotFoundHttpException();
}
function confirmSubscription($action, $snid, $newsletter_id, $timestamp, $hash, $immediate = FALSE) {
$config = \Drupal::config('simplenews.settings');
$html_head = array(
array(
'#tag' => 'meta',
'#attributes' => array(
'name' => 'robots',
'content' => 'noindex',
),
),
'simplenews-noindex',
);
$subscriber = simplenews_subscriber_load($snid);
if ($subscriber && $hash == simplenews_generate_hash($subscriber
->getMail(), $action, $timestamp)) {
$newsletter = simplenews_newsletter_load($newsletter_id);
if ($timestamp < REQUEST_TIME - $config
->get('hash_expiration')) {
$context = array(
'simplenews_subscriber' => $subscriber,
'newsletter' => $newsletter,
);
$token = $action == 'add' ? 'subscribe' : 'unsubscribe';
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\RequestHashForm', $token, $context);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
if (!$immediate) {
if ($action == 'remove') {
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\ConfirmRemovalForm', $subscriber
->getMail(), $newsletter);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
elseif ($action == 'add') {
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\ConfirmAddForm', $subscriber
->getMail(), $newsletter);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
}
else {
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
if ($action == 'remove') {
$subscription_manager
->unsubscribe($subscriber
->getMail(), $newsletter_id, FALSE, 'website');
if ($path = $config
->get('subscription.confirm_unsubscribe_page')) {
return $this
->redirect(Url::fromUri("internal:{$path}")
->getRouteName());
}
$this
->messenger()
->addMessage(t('%user was unsubscribed from the %newsletter mailing list.', array(
'%user' => $subscriber
->getMail(),
'%newsletter' => $newsletter->name,
)));
return $this
->redirect('<front>');
}
elseif ($action == 'add') {
$subscription_manager
->subscribe($subscriber
->getMail(), $newsletter_id, FALSE, 'website');
if ($path = $config
->get('subscription.confirm_subscribe_page')) {
return $this
->redirect(Url::fromUri("internal:{$path}")
->getRouteName());
}
$this
->messenger()
->addMessage(t('%user was added to the %newsletter mailing list.', array(
'%user' => $subscriber
->getMail(),
'%newsletter' => $newsletter->name,
)));
return $this
->redirect('<front>');
}
}
}
throw new NotFoundHttpException();
}
}