public function ConfirmationController::confirmCombined in Simplenews 8.2
Same name and namespace in other branches
- 8 src/Controller/ConfirmationController.php \Drupal\simplenews\Controller\ConfirmationController::confirmCombined()
- 3.x src/Controller/ConfirmationController.php \Drupal\simplenews\Controller\ConfirmationController::confirmCombined()
Menu callback: confirm a combined confirmation request.
This function is called by clicking the confirm link in the confirmation email. It handles both subscription addition and subscription removal.
Parameters
int $snid: The subscriber id.
int $timestamp: The timestamp of the request.
bool $hash: The confirmation hash.
bool $immediate: Perform the action immediately if TRUE.
See also
simplenews_confirm_add_form()
simplenews_confirm_removal_form()
1 string reference to 'ConfirmationController::confirmCombined'
File
- src/
Controller/ ConfirmationController.php, line 34
Class
- ConfirmationController
- Returns responses for confirmation routes.
Namespace
Drupal\simplenews\ControllerCode
public function confirmCombined($snid, $timestamp, $hash, $immediate = FALSE) {
$config = \Drupal::config('simplenews.settings');
// Prevent search engines from indexing this page.
$html_head = [
[
'#tag' => 'meta',
'#attributes' => [
'name' => 'robots',
'content' => 'noindex',
],
],
'simplenews-noindex',
];
$subscriber = Subscriber::load($snid);
// Redirect and display message if no changes are available.
if ($subscriber && !$subscriber
->getChanges()) {
$this
->messenger()
->addMessage($this
->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 the hash is valid but timestamp is too old, display form to request
// a new hash.
if ($timestamp < REQUEST_TIME - $config
->get('hash_expiration')) {
$context = [
'simplenews_subscriber' => $subscriber,
];
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\RequestHashForm', 'subscribe_combined', $context);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
// When not called with immediate parameter the user will be directed to
// the (un)subscribe confirmation page.
if (!$immediate) {
$build = \Drupal::formBuilder()
->getForm('\\Drupal\\simplenews\\Form\\ConfirmMultiForm', $subscriber);
$build['#attached']['html_head'][] = $html_head;
return $build;
}
else {
/** @var \Drupal\simplenews\Subscription\SubscriptionManagerInterface $subscription_manager */
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
// Redirect and display message if no changes are available.
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');
}
}
// Clear changes.
$subscriber
->setChanges([]);
$subscriber
->save();
$this
->messenger()
->addMessage($this
->t('Subscription changes confirmed for %user.', [
'%user' => $subscriber
->getMail(),
]));
return $this
->redirect('<front>');
}
}
throw new NotFoundHttpException();
}