1: <?php
2: /**
3: * Magento
4: *
5: * NOTICE OF LICENSE
6: *
7: * This source file is subject to the Open Software License (OSL 3.0)
8: * that is bundled with this package in the file LICENSE.txt.
9: * It is also available through the world-wide-web at this URL:
10: * http://opensource.org/licenses/osl-3.0.php
11: * If you did not receive a copy of the license and are unable to
12: * obtain it through the world-wide-web, please send an email
13: * to license@magentocommerce.com so we can send you a copy immediately.
14: *
15: * DISCLAIMER
16: *
17: * Do not edit or add to this file if you wish to upgrade Magento to newer
18: * versions in the future. If you wish to customize Magento for your
19: * needs please refer to http://www.magentocommerce.com for more information.
20: *
21: * @category Mage
22: * @package Mage_Cms
23: * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24: * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25: */
26:
27:
28: /**
29: * Cms Controller Router
30: *
31: * @category Mage
32: * @package Mage_Cms
33: * @author Magento Core Team <core@magentocommerce.com>
34: */
35: class Mage_Cms_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract
36: {
37: /**
38: * Initialize Controller Router
39: *
40: * @param Varien_Event_Observer $observer
41: */
42: public function initControllerRouters($observer)
43: {
44: /* @var $front Mage_Core_Controller_Varien_Front */
45: $front = $observer->getEvent()->getFront();
46:
47: $front->addRouter('cms', $this);
48: }
49:
50: /**
51: * Validate and Match Cms Page and modify request
52: *
53: * @param Zend_Controller_Request_Http $request
54: * @return bool
55: */
56: public function match(Zend_Controller_Request_Http $request)
57: {
58: if (!Mage::isInstalled()) {
59: Mage::app()->getFrontController()->getResponse()
60: ->setRedirect(Mage::getUrl('install'))
61: ->sendResponse();
62: exit;
63: }
64:
65: $identifier = trim($request->getPathInfo(), '/');
66:
67: $condition = new Varien_Object(array(
68: 'identifier' => $identifier,
69: 'continue' => true
70: ));
71: Mage::dispatchEvent('cms_controller_router_match_before', array(
72: 'router' => $this,
73: 'condition' => $condition
74: ));
75: $identifier = $condition->getIdentifier();
76:
77: if ($condition->getRedirectUrl()) {
78: Mage::app()->getFrontController()->getResponse()
79: ->setRedirect($condition->getRedirectUrl())
80: ->sendResponse();
81: $request->setDispatched(true);
82: return true;
83: }
84:
85: if (!$condition->getContinue()) {
86: return false;
87: }
88:
89: $page = Mage::getModel('cms/page');
90: $pageId = $page->checkIdentifier($identifier, Mage::app()->getStore()->getId());
91: if (!$pageId) {
92: return false;
93: }
94:
95: $request->setModuleName('cms')
96: ->setControllerName('page')
97: ->setActionName('view')
98: ->setParam('page_id', $pageId);
99: $request->setAlias(
100: Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
101: $identifier
102: );
103:
104: return true;
105: }
106: }
107: