/** * newsletterUnsubscribe() * * Description * • check if requested url is valid * • display opt-out options if request method is get or post is invalid * • process unsubscribe action if the request method is post * • cleanup subscriber membership and subscriber as fallback * * @return Template */ private function newsletterUnsubscribe() { if (!isset($_REQUEST['unsubscribe'])) { return $this->constructTemplate('unsubscribe_unknown_error'); } // Process unsubscribe opt_out form if post $oSubscriber = SubscriberQuery::create()->filterByEmail($_REQUEST['unsubscribe'])->findOne(); if (Manager::isPost()) { $mOutput = $this->processOptOutSuscriptions($oSubscriber); if ($mOutput) { return $mOutput; } } // If subscriber does not exist or the required checksum is not correct, return error message if (!($oSubscriber && $oSubscriber->getUnsubscribeChecksum() === $_REQUEST['checksum'])) { return $this->constructTemplate('unsubscribe_unknown_error'); } SubscriberPeer::ignoreRights(true); // Count valid subscriptions [with display_name, not temp or import groups] $aSubscriberGroupMemberShips = $oSubscriber->getSubscriberGroupMemberships(); $aValidSubscriptions = array(); if (count($aSubscriberGroupMemberShips) > 1) { foreach ($aSubscriberGroupMemberShips as $oSubscriberGroupMembership) { if ($oSubscriberGroupMembership->getSubscriberGroup()->getDisplayName() == null) { continue; } $aValidSubscriptions[] = $oSubscriberGroupMembership; } } // Display view with opt_out options if there is more then one valid subscription if (count($aValidSubscriptions) > 1) { $oTemplate = $this->constructTemplate('unsubscribe_optout_form'); $oTemplate->replaceIdentifier('checksum', $_REQUEST['checksum']); $oTemplate->replaceIdentifier('email', $oSubscriber->getEmail()); $bIsPostAndAllUnchecked = Manager::isPost() && !isset($_POST['subscriber_group_id']); foreach ($aValidSubscriptions as $oSubscriberGroupMemberships) { $oCheckboxTemplate = $this->constructTemplate('unsubscribe_optout_checkbox'); $oCheckboxTemplate->replaceIdentifier('subscriber_group_id', $oSubscriberGroupMemberships->getSubscriberGroupId()); $oCheckboxTemplate->replaceIdentifier('subscriber_group_name', $oSubscriberGroupMemberships->getSubscriberGroup()->getDisplayName()); $oCheckboxTemplate->replaceIdentifier('checked', !$bIsPostAndAllUnchecked ? ' checked="checked"' : '', null, Template::NO_HTML_ESCAPE); $oTemplate->replaceIdentifierMultiple('subscriber_group_checkbox', $oCheckboxTemplate); } return $oTemplate; } // Delete subscriber because there is not a valid subscription (all temp subscriptions are removed too) $oSubscriber->delete(); // Display unsubscribe confirmation international return $this->constructTemplate('unsubscribe_confirm'); }