/**
  * 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');
 }