2

On Magento 1.9, in /app/code/core/Mage/Newsletter/controllers/SubscriberController.php there's newAction() function that returns success or error messages.

The success message for example uses Mage::getSingleton('core/session'); which is an admin message and on the front end it doesn't get any styling.

I would think it should be using Mage::getSingleton('customer/session'); so that customers see the regular success or error messages.

Why was this assigned to core/session?

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 <a href="%s">register</a>.', 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();
}

1 Answer 1

3

core/session messages will be displayed on pages rendered by any controller, while customer/session messages are only displayed on pages associated to the Mage_Customer module.

2
  • Thanks @Vinai! I had this wrong but it turns out that my issue was with turpentine overwriting these messages, on to the next hunt...
    – Haim
    Commented Mar 15, 2018 at 20:01
  • Same issue here, had to disable my Turpentine extension (was not used for this project anyway) to get the core/session messages to display properly.
    – Louis B.
    Commented Mar 26, 2019 at 14:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.