Esempio n. 1
0
 /**
  * Forward current request
  *
  * @param string $action
  * @param string $module
  * @param string $controller
  * @return void
  */
 protected function _forward($action = 'denied', $module = null, $controller = null)
 {
     if ($this->_request->getActionName() === $action && (null === $module || $this->_request->getModuleName() === $module) && (null === $controller || $this->_request->getControllerName() === $controller)) {
         return;
     }
     $this->_request->initForward();
     if ($module) {
         $this->_request->setModuleName($module);
     }
     if ($controller) {
         $this->_request->setControllerName($controller);
     }
     $this->_request->setActionName($action)->setDispatched(false);
 }
Esempio n. 2
0
 /**
  * Forward current request
  *
  * @param string $action
  * @param string $module
  * @param string $controller
  */
 protected function _forward($action = 'denied', $module = null, $controller = null)
 {
     $actionName = strtolower($this->_request->getActionName());
     // avoid cycling
     if ($actionName === $action && (null === $module || $this->_request->getModuleName() === $module) && (null === $controller || $this->_request->getControllerName() === $controller)) {
         return;
     }
     $this->_request->initForward();
     if ($module) {
         $this->_request->setModuleName($module);
     }
     if ($controller) {
         $this->_request->setControllerName($controller);
     }
     $this->_request->setActionName($action)->setDispatched(false);
     $this->_isForwarded = true;
 }
Esempio n. 3
0
 /**
  * Modify request and set to no-route action
  * If store is admin and specified different admin front name,
  * change store to default (Possible when enabled Store Code in URL)
  *
  * @param Mage_Core_Controller_Request_Http $request
  * @return boolean
  */
 public function match(Mage_Core_Controller_Request_Http $request)
 {
     $noRoute = explode('/', Mage::app()->getStore()->getConfig('web/default/no_route'));
     $moduleName = isset($noRoute[0]) ? $noRoute[0] : 'core';
     $controllerName = isset($noRoute[1]) ? $noRoute[1] : 'index';
     $actionName = isset($noRoute[2]) ? $noRoute[2] : 'index';
     if (Mage::app()->getStore()->isAdmin()) {
         $adminFrontName = (string) Mage::getConfig()->getNode('admin/routers/adminhtml/args/frontName');
         if ($adminFrontName != $moduleName) {
             $moduleName = 'core';
             $controllerName = 'index';
             $actionName = 'noRoute';
             Mage::app()->setCurrentStore(Mage::app()->getDefaultStoreView());
         }
     }
     $request->setModuleName($moduleName)->setControllerName($controllerName)->setActionName($actionName);
     return $this->_controllerFactory->createController('Mage_Core_Controller_Varien_Action_Forward', array('request' => $request));
 }
Esempio n. 4
0
 /**
  * Calls the diehard/load controller without spawning a new request
  *
  * @param array $params
  * @return string
  */
 public function getDynamicBlockReplacement($params)
 {
     // Append dynamic block content to end of page to be replaced by javascript, but not Ajax
     if ($params['blocks'] || !empty($params['all_blocks'])) {
         // Init store if it has not been yet (page served from cache)
         if (!$this->helper()->isAppInited()) {
             $this->helper()->initApp();
         } else {
             // Reset layout
             Mage::unregister('_singleton/core/layout');
             Mage::getSingleton('core/layout');
             // TODO Mage::app()->getLayout() is not reset using the method above!
             // TODO Consider resetting Magento entirely using Mage::reset();
         }
         // Create a sub-request to get JSON response
         $uri = $this->getBaseUrl() . '/_diehard/load/ajax';
         $request = new Mage_Core_Controller_Request_Http($uri);
         $request->setRouteName('diehard');
         $request->setModuleName('_diehard');
         $request->setControllerName('load');
         $request->setActionName('ajax');
         $request->setControllerModule('Cm_Diehard');
         $request->setParam('full_action_name', $params['full_action_name']);
         if (!empty($params['all_blocks'])) {
             $request->setParam('all_blocks', 1);
         } else {
             $request->setParam('blocks', $params['blocks']);
         }
         $request->setParam('params', $params['params']);
         $request->setDispatched(true);
         // Override parameters in request singleton (for Mage_Core_Block_Abstract#getRequest())
         Mage::app()->getRequest()->clearParams();
         Mage::app()->getRequest()->setParams($request->getParams());
         Mage::app()->getRequest()->setParams($request->getParam('params'));
         // Render sub-request into sub-response object
         $response = new Mage_Core_Controller_Response_Http();
         require_once Mage::getModuleDir('controllers', 'Cm_Diehard') . '/LoadController.php';
         $controller = new Cm_Diehard_LoadController($request, $response);
         $controller->dispatch('json');
         $replacement = '';
         if ($this->helper()->isDebug()) {
             $replacement .= '<!-- Dynamic blocks rendered: ' . (empty($params['all_blocks']) ? implode(',', $params['blocks']) : 'ALL') . ' -->' . "\n";
         }
         $replacement .= "<script type=\"text/javascript\">/* <![CDATA[ */Diehard.replaceBlocks({$response->getBody()});/* ]]> */</script>";
         return $replacement;
     } else {
         if ($this->helper()->isDebug()) {
             return '<!-- No dynamic blocks -->';
         } else {
             return '';
         }
     }
 }
Esempio n. 5
0
 /**
  * Validate and Match Cms Page and modify request
  *
  * @param Mage_Core_Controller_Request_Http $request
  * @return bool
  *
  * @SuppressWarnings(PHPMD.ExitExpression)
  */
 public function match(Mage_Core_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     $this->_eventManager->dispatch('cms_controller_router_match_before', array('router' => $this, 'condition' => $condition));
     $identifier = $condition->getIdentifier();
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return $this->_controllerFactory->createController('Mage_Core_Controller_Varien_Action_Redirect', array('request' => $request));
     }
     if (!$condition->getContinue()) {
         return null;
     }
     $page = Mage::getModel('Mage_Cms_Model_Page');
     $pageId = $page->checkIdentifier($identifier, Mage::app()->getStore()->getId());
     if (!$pageId) {
         return null;
     }
     $request->setModuleName('cms')->setControllerName('page')->setActionName('view')->setParam('page_id', $pageId);
     $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $identifier);
     return $this->_controllerFactory->createController('Mage_Core_Controller_Varien_Action_Forward', array('request' => $request));
 }