/** * Redirect to allowed store with Geoip * * @param Varien_Object $observer * * @return void */ public function redirectStore(Varien_Event_Observer $observer) { $enabled = Mage::getStoreConfigFlag('geoip/general/enabled'); $lockStore = Mage::getStoreConfigFlag('geoip/general/lock'); $exceptions = $this->_getExceptions(); $fallbackStore = $this->_getFallbackStore(); if (!$enabled) { return; } $this->checkNoRoute(); $geoIP = Mage::getSingleton('geoip/country'); $currentCountry = $geoIP->getCountry(); $response = Mage::app()->getResponse(); $session = Mage::getSingleton('core/session'); $result = new Varien_Object(array('should_proceed' => 1)); Mage::dispatchEvent('wh_geoip_redirect_store_before', array('result' => $result)); if (!$result->getShouldProceed()) { return; } if ($this->_validateException($exceptions)) { return; } if ($geoIP->isCountryAllowed($currentCountry)) { $session->setIsGeoipRedirected(true); return; } $result = new Varien_Object(array('locked_store' => $lockStore)); Mage::dispatchEvent('wh_geoip_redirect_store_check_locked_before', array('result' => $result)); // Only redirect once per session if lock is not enabled if (!$result->getLockedStore() && $session->getIsGeoipRedirected()) { return; } // If locked mode is on and country is not in allowed countries: Don't // redirect when we are on fallback store. if ($result->getLockedStore() && $session->getNotInAllowedList() && Mage::app()->getStore()->getId() == $fallbackStore->getId()) { return; } $store = $this->_getStoreForCountry($currentCountry); if (!$store) { $store = $fallbackStore; $session->setNotInAllowedList(true); } $event = new Varien_Object(array('store_url' => $store->getCurrentUrl(false))); Mage::dispatchEvent('wh_geoip_redirect_store_set_redirect_before', array('result' => $event)); $session->setIsGeoipRedirected(true); $response->setRedirect($event->getStoreUrl())->sendResponse(); exit; }
/** * checks to for a store's "punchout only" restricted access flag * * @param Varien_Event_Observer $observer */ public function checkForPunchoutOnlySite(Varien_Event_Observer $observer) { if (self::$_inSessionEvent == 1) { return; } self::$_inSessionEvent = 1; /** * @var $helper Vbw_Punchout_Helper_Config * @var $poSession Vbw_Punchout_Model_Session * @var $response Mage_Core_Controller_Response_Http */ // $session = $observer->getEvent()->getCustomerSession(); $request = Mage::app()->getRequest(); $helper = Mage::helper('vbw_punchout/config'); $poOnly = $helper->getConfig('site/punchout_only'); $poSession = Mage::getSingleton("vbw_punchout/session"); $action = Mage::app()->getFrontController()->getAction(); $response = $action->getResponse(); if ($poOnly == 1 && $poSession->getPunchoutId() == false && $action->getRequest()->getQuery('nopotest') != 1) { $result = new Varien_Object(); $result->setShouldProceed(true); Mage::dispatchEvent('punchoutonly_restriction', array('controller' => $action, 'result' => $result)); if ($result->getShouldProceed()) { //$module_name = strtolower($request->getControllerModule()); //if ($module_name == 'vbw_punchout') { // $result->setShouldProceed(false); //} self::$_inSessionEvent = 0; $url = $helper->getConfig('site/punchout_only_url'); $response->setRedirect(Mage::getUrl($url, array('_query' => "nopotest=1"))); $response->sendResponse(); } } self::$_inSessionEvent = 0; }
/** * 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; } } }
/** * 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)); Mage::dispatchEvent('websiterestriction_frontend', array('controller' => $controller, 'result' => $dispatchResult)); if (!$dispatchResult->getShouldProceed()) { return; } if (!(int) Mage::getStoreConfig('general/restriction/is_active')) { 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('general/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; } if (Enterprise_WebsiteRestriction_Model_Mode::HTTP_503 === (int) Mage::getStoreConfig('general/restriction/http_status')) { $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 (!Mage::helper('customer')->isLoggedIn()) { // see whether redirect is required and where $redirectUrl = false; $allowedActionNames = array_keys(Mage::getConfig()->getNode('frontend/enterprise/websiterestriction/full_action_names/generic')->asArray()); if (Mage::helper('customer')->isRegistrationAllowed()) { foreach (array_keys(Mage::getConfig()->getNode('frontend/enterprise/websiterestriction/full_action_names/register')->asArray()) as $fullActionName) { $allowedActionNames[] = $fullActionName; } } // to specified landing page if (Enterprise_WebsiteRestriction_Model_Mode::HTTP_302_LANDING === (int) Mage::getStoreConfig('general/restriction/http_redirect')) { $allowedActionNames[] = 'cms_page_view'; $pageIdentifier = Mage::getStoreConfig('general/restriction/cms_page'); if (!in_array($controller->getFullActionName(), $allowedActionNames) || $request->getParam('page_id') === $pageIdentifier) { $redirectUrl = Mage::getUrl('', array('_direct' => $pageIdentifier)); } } elseif (!in_array($controller->getFullActionName(), $allowedActionNames)) { $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('customer/startup/redirect_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; } } }