*/ class Mage_Newsletter_SubscriberController extends Mage_Core_Controller_Front_Action { /** * New subscription action */ public function newAction() { if ($this->getRequest()->isPost() && $this->getRequest()->getPost('email')) { $session = Mage::getSingleton('core/session'); $customerSession = Mage::getSingleton('customer/session'); $email = (string) $this->getRequest()->getPost('email'); try { if (!Zend_Validate::is($email, 'EmailAddress')) { Mage::throwException($this->__('Please enter a valid email address.')); } if (Mage::getStoreConfig(Mage_Newsletter_Model_Subscriber::XML_PATH_ALLOW_GUEST_SUBSCRIBE_FLAG) != 1 && !$customerSession->isLoggedIn()) { Mage::throwException($this->__('Sorry, but administrator denied subscription for guests. Please register.', Mage::helper('customer')->getRegisterUrl())); } $ownerId = Mage::getModel('customer/customer') ->setWebsiteId(Mage::app()->getStore()->getWebsiteId()) ->loadByEmail($email) ->getId(); if ($ownerId !== null && $ownerId != $customerSession->getId()) { Mage::throwException($this->__('This email address is already assigned to another user.')); } $status = Mage::getModel('newsletter/subscriber')->subscribe($email); if ($status == Mage_Newsletter_Model_Subscriber::STATUS_NOT_ACTIVE) { $session->addSuccess($this->__('Confirmation request has been sent.')); } else { $session->addSuccess($this->__('Thank you for your subscription.')); } } catch (Mage_Core_Exception $e) { $session->addException($e, $this->__('There was a problem with the subscription: %s', $e->getMessage())); } catch (Exception $e) { $session->addException($e, $this->__('There was a problem with the subscription.')); } } $this->_redirectReferer(); } /** * Subscription confirm action */ public function confirmAction() { $id = (int) $this->getRequest()->getParam('id'); $code = (string) $this->getRequest()->getParam('code'); if ($id && $code) { $subscriber = Mage::getModel('newsletter/subscriber')->load($id); $session = Mage::getSingleton('core/session'); if($subscriber->getId() && $subscriber->getCode()) { if($subscriber->confirm($code)) { $session->addSuccess($this->__('Your subscription has been confirmed.')); } else { $session->addError($this->__('Invalid subscription confirmation code.')); } } else { $session->addError($this->__('Invalid subscription ID.')); } } $this->_redirectUrl(Mage::getBaseUrl()); } /** * Unsubscribe newsletter */ public function unsubscribeAction() { $id = (int) $this->getRequest()->getParam('id'); $code = (string) $this->getRequest()->getParam('code'); if ($id && $code) { $session = Mage::getSingleton('core/session'); try { Mage::getModel('newsletter/subscriber')->load($id) ->setCheckCode($code) ->unsubscribe(); $session->addSuccess($this->__('You have been unsubscribed.')); } catch (Mage_Core_Exception $e) { $session->addException($e, $e->getMessage()); } catch (Exception $e) { $session->addException($e, $this->__('There was a problem with the un-subscription.')); } } $this->_redirectReferer(); } }