/** * Implement website stub or private sales restriction * * @param Varien_Event_Observer $observer */ public function restrictWebsite($observer) { /* @var $controller Mage_Core_Controller_Front_Action */ $controller = $observer->getEvent()->getControllerAction(); if (!Mage::app()->getStore()->isAdmin()) { $dispatchResult = new Varien_Object(array('should_proceed' => true, 'customer_logged_in' => false)); Mage::dispatchEvent('websiterestriction_frontend', array('controller' => $controller, 'result' => $dispatchResult)); if (!$dispatchResult->getShouldProceed()) { return; } if (!Mage::helper('enterprise_websiterestriction')->getIsRestrictionEnabled()) { return; } /* @var $request Mage_Core_Controller_Request_Http */ $request = $controller->getRequest(); /* @var $response Mage_Core_Controller_Response_Http */ $response = $controller->getResponse(); switch ((int) Mage::getStoreConfig(Enterprise_WebsiteRestriction_Helper_Data::XML_PATH_RESTRICTION_MODE)) { // show only landing page with 503 or 200 code case Enterprise_WebsiteRestriction_Model_Mode::ALLOW_NONE: if ($controller->getFullActionName() !== 'restriction_index_stub') { $request->setModuleName('restriction')->setControllerName('index')->setActionName('stub')->setDispatched(false); return; } $httpStatus = (int) Mage::getStoreConfig(Enterprise_WebsiteRestriction_Helper_Data::XML_PATH_RESTRICTION_HTTP_STATUS); if (Enterprise_WebsiteRestriction_Model_Mode::HTTP_503 === $httpStatus) { $response->setHeader('HTTP/1.1', '503 Service Unavailable'); } break; case Enterprise_WebsiteRestriction_Model_Mode::ALLOW_REGISTER: // break intentionally omitted // redirect to landing page/login // break intentionally omitted // redirect to landing page/login case Enterprise_WebsiteRestriction_Model_Mode::ALLOW_LOGIN: if (!$dispatchResult->getCustomerLoggedIn() && !Mage::helper('customer')->isLoggedIn()) { // see whether redirect is required and where $redirectUrl = false; $allowedActionNames = array_keys(Mage::getConfig()->getNode(Enterprise_WebsiteRestriction_Helper_Data::XML_NODE_RESTRICTION_ALLOWED_GENERIC)->asArray()); if (Mage::helper('customer')->isRegistrationAllowed()) { foreach (array_keys(Mage::getConfig()->getNode(Enterprise_WebsiteRestriction_Helper_Data::XML_NODE_RESTRICTION_ALLOWED_REGISTER)->asArray()) as $fullActionName) { $allowedActionNames[] = $fullActionName; } } // to specified landing page $restrictionRedirectCode = (int) Mage::getStoreConfig(Enterprise_WebsiteRestriction_Helper_Data::XML_PATH_RESTRICTION_HTTP_REDIRECT); if (Enterprise_WebsiteRestriction_Model_Mode::HTTP_302_LANDING === $restrictionRedirectCode) { $cmsPageViewAction = 'cms_page_view'; $allowedActionNames[] = $cmsPageViewAction; $pageIdentifier = Mage::getStoreConfig(Enterprise_WebsiteRestriction_Helper_Data::XML_PATH_RESTRICTION_LANDING_PAGE); // Restrict access to CMS pages too if (!in_array($controller->getFullActionName(), $allowedActionNames) || $controller->getFullActionName() === $cmsPageViewAction && $request->getAlias('rewrite_request_path') !== $pageIdentifier) { $redirectUrl = Mage::getUrl('', array('_direct' => $pageIdentifier)); } } elseif (!in_array($controller->getFullActionName(), $allowedActionNames)) { // to login form $redirectUrl = Mage::getUrl('customer/account/login'); } if ($redirectUrl) { $response->setRedirect($redirectUrl); $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true); } if (Mage::getStoreConfigFlag(Mage_Customer_Helper_Data::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD)) { $afterLoginUrl = Mage::helper('customer')->getDashboardUrl(); } else { $afterLoginUrl = Mage::getUrl(); } Mage::getSingleton('core/session')->setWebsiteRestrictionAfterLoginUrl($afterLoginUrl); } elseif (Mage::getSingleton('core/session')->hasWebsiteRestrictionAfterLoginUrl()) { $response->setRedirect(Mage::getSingleton('core/session')->getWebsiteRestrictionAfterLoginUrl(true)); $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true); } break; } } }