2009-05-10 10:50:39 +03:00
|
|
|
|
<?php
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/*-------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* LiveStreet Engine Social Networking
|
|
|
|
|
* Copyright © 2008 Mzhelskiy Maxim
|
|
|
|
|
*
|
|
|
|
|
*--------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreet.ru
|
|
|
|
|
* Contact e-mail: rus.engine@gmail.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
2009-07-26 16:43:16 +03:00
|
|
|
|
require_once("Action.class.php");
|
2009-12-28 13:43:56 +02:00
|
|
|
|
require_once("ActionPlugin.class.php");
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Класс роутинга(контроллера)
|
|
|
|
|
* Инициализирует ядро, определяет какой экшен запустить согласно URL'у и запускает его.
|
|
|
|
|
*/
|
|
|
|
|
class Router extends Object {
|
|
|
|
|
|
|
|
|
|
protected $aConfigRoute=array();
|
|
|
|
|
static protected $sAction=null;
|
|
|
|
|
static protected $sActionEvent=null;
|
|
|
|
|
static protected $sActionClass=null;
|
2009-02-23 01:15:08 +02:00
|
|
|
|
static protected $sPathWebCurrent = null;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
static protected $aParams=array();
|
|
|
|
|
protected $oAction=null;
|
2008-09-26 18:28:47 +03:00
|
|
|
|
protected $oEngine=null;
|
|
|
|
|
static protected $bShowStats=true;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
|
|
|
|
static protected $oInstance=null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Делает возможным только один экземпляр этого класса
|
|
|
|
|
*
|
|
|
|
|
* @return Router
|
|
|
|
|
*/
|
|
|
|
|
static public function getInstance() {
|
|
|
|
|
if (isset(self::$oInstance) and (self::$oInstance instanceof self)) {
|
|
|
|
|
return self::$oInstance;
|
|
|
|
|
} else {
|
|
|
|
|
self::$oInstance= new self();
|
|
|
|
|
return self::$oInstance;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-07-26 16:43:16 +03:00
|
|
|
|
|
|
|
|
|
protected function __construct() {
|
|
|
|
|
$this->LoadConfig();
|
|
|
|
|
}
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-07-26 16:43:16 +03:00
|
|
|
|
* Запускает весь процесс :)
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function Exec() {
|
|
|
|
|
$this->ParseUrl();
|
2010-04-03 19:44:12 +03:00
|
|
|
|
$this->DefineActionClass(); // Для возможности ДО инициализации модулей определить какой action/event запрошен
|
|
|
|
|
$this->oEngine=Engine::getInstance();
|
|
|
|
|
$this->oEngine->Init();
|
2009-10-17 03:27:22 +03:00
|
|
|
|
$this->ExecAction();
|
2011-04-26 14:38:48 +03:00
|
|
|
|
$this->Shutdown(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Завершение работы роутинга
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function Shutdown($bExit=true) {
|
2009-07-26 16:43:16 +03:00
|
|
|
|
$this->AssignVars();
|
2009-12-16 19:22:29 +02:00
|
|
|
|
$this->oEngine->Shutdown();
|
|
|
|
|
$this->Viewer_Display($this->oAction->GetTemplate());
|
2011-04-26 14:38:48 +03:00
|
|
|
|
if ($bExit) {
|
|
|
|
|
exit();
|
|
|
|
|
}
|
2009-07-26 16:43:16 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Парсим URL
|
2008-09-21 09:36:57 +03:00
|
|
|
|
* Пример: http://site.ru/action/event/param1/param2/ на выходе получим:
|
|
|
|
|
* self::$sAction='action';
|
|
|
|
|
* self::$sActionEvent='event';
|
|
|
|
|
* self::$aParams=array('param1','param2');
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-07-26 16:43:16 +03:00
|
|
|
|
protected function ParseUrl() {
|
2009-10-04 21:54:17 +03:00
|
|
|
|
$sReq = $this->GetRequestUri();
|
2010-04-25 14:28:46 +03:00
|
|
|
|
$aRequestUrl=$this->GetRequestArray($sReq);
|
2010-10-13 15:14:27 +03:00
|
|
|
|
$aRequestUrl=$this->RewriteRequest($aRequestUrl);
|
2010-04-25 14:28:46 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
self::$sAction=array_shift($aRequestUrl);
|
|
|
|
|
self::$sActionEvent=array_shift($aRequestUrl);
|
|
|
|
|
self::$aParams=$aRequestUrl;
|
|
|
|
|
}
|
2009-10-04 21:54:17 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Функция выполняет первичную обработку $_SERVER['REQUEST_URI']
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
protected function GetRequestUri() {
|
2010-03-14 16:35:09 +02:00
|
|
|
|
$sReq=preg_replace("/\/+/",'/',$_SERVER['REQUEST_URI']);
|
2009-10-04 21:54:17 +03:00
|
|
|
|
$sReq=preg_replace("/^\/(.*)\/?$/U",'\\1',$sReq);
|
2010-07-06 15:09:18 +03:00
|
|
|
|
$sReq=preg_replace("/^(.*)\?.*$/U",'\\1',$sReq);
|
2009-10-04 21:54:17 +03:00
|
|
|
|
|
2010-04-25 14:28:46 +03:00
|
|
|
|
/**
|
|
|
|
|
* Формируем $sPathWebCurrent ДО применения реврайтов
|
|
|
|
|
*/
|
|
|
|
|
self::$sPathWebCurrent=Config::Get('path.root.web')."/".join('/',$this->GetRequestArray($sReq));
|
2009-10-04 21:54:17 +03:00
|
|
|
|
return $sReq;
|
2010-04-25 14:28:46 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает массив реквеста
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sReq
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function GetRequestArray($sReq) {
|
|
|
|
|
$aRequestUrl = ($sReq=='') ? array() : explode('/',$sReq);
|
|
|
|
|
for ($i=0;$i<Config::Get('path.offset_request_url');$i++) {
|
|
|
|
|
array_shift($aRequestUrl);
|
|
|
|
|
}
|
|
|
|
|
if (isset($aRequestUrl[0]) and @substr($aRequestUrl[0],0,1)=='?') {
|
|
|
|
|
$aRequestUrl=array();
|
|
|
|
|
}
|
2010-07-06 15:19:17 +03:00
|
|
|
|
$aRequestUrl = array_map('urldecode',$aRequestUrl);
|
2010-04-25 14:28:46 +03:00
|
|
|
|
return $aRequestUrl;
|
2009-10-04 21:54:17 +03:00
|
|
|
|
}
|
2010-10-13 15:14:27 +03:00
|
|
|
|
|
|
|
|
|
protected function RewriteRequest($aRequestUrl) {
|
|
|
|
|
/**
|
|
|
|
|
* Правила Rewrite для REQUEST_URI
|
|
|
|
|
*/
|
|
|
|
|
$sReq=implode('/',$aRequestUrl);
|
|
|
|
|
if($aRewrite=Config::Get('router.uri')) {
|
|
|
|
|
$sReq = preg_replace(array_keys($aRewrite), array_values($aRewrite), $sReq);
|
|
|
|
|
}
|
|
|
|
|
return ($sReq=='') ? array() : explode('/',$sReq);
|
|
|
|
|
}
|
2009-04-10 15:34:20 +03:00
|
|
|
|
/**
|
|
|
|
|
* Выполняет загрузку конфигов роутинга
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function LoadConfig() {
|
|
|
|
|
//Конфиг роутинга, содержит соответствия URL и классов экшенов
|
2009-08-19 12:17:38 +03:00
|
|
|
|
$this->aConfigRoute = Config::Get('router');
|
2009-08-19 15:01:35 +03:00
|
|
|
|
// Переписываем конфиг согласно правилу rewrite
|
|
|
|
|
foreach ((array)$this->aConfigRoute['rewrite'] as $sPage=>$sRewrite) {
|
|
|
|
|
if(isset($this->aConfigRoute['page'][$sPage])) {
|
|
|
|
|
$this->aConfigRoute['page'][$sRewrite] = $this->aConfigRoute['page'][$sPage];
|
|
|
|
|
unset($this->aConfigRoute['page'][$sPage]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-04-10 15:34:20 +03:00
|
|
|
|
}
|
2009-07-26 16:43:16 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружает в шаблонизатор Smarty необходимые переменные
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-07-26 16:43:16 +03:00
|
|
|
|
protected function AssignVars() {
|
2009-08-19 21:27:36 +03:00
|
|
|
|
$this->Viewer_Assign('sAction',$this->Standart(self::$sAction));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_Assign('sEvent',self::$sActionEvent);
|
|
|
|
|
$this->Viewer_Assign('aParams',self::$aParams);
|
2009-02-23 01:15:08 +02:00
|
|
|
|
$this->Viewer_Assign('PATH_WEB_CURRENT',self::$sPathWebCurrent);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Запускает на выполнение экшен
|
|
|
|
|
* Может запускаться рекурсивно если в одном экшене стоит переадресация на другой
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function ExecAction() {
|
2008-10-11 17:51:38 +03:00
|
|
|
|
$this->DefineActionClass();
|
2009-12-22 23:48:46 +02:00
|
|
|
|
|
2008-10-11 17:51:38 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сначала запускаем инициализирующий экшен
|
|
|
|
|
*/
|
2009-08-19 15:01:35 +03:00
|
|
|
|
require_once(Config::Get('path.root.server').'/classes/actions/Init.class.php');
|
2008-10-11 17:51:38 +03:00
|
|
|
|
$oActionInit=new Init($this->oEngine);
|
2009-12-24 22:18:13 +02:00
|
|
|
|
$oActionInit->InitAction();
|
2008-10-11 17:51:38 +03:00
|
|
|
|
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$sActionClass=$this->DefineActionClass();
|
2010-01-10 16:26:44 +02:00
|
|
|
|
/**
|
|
|
|
|
* Определяем наличие делегата экшена
|
|
|
|
|
*/
|
2010-12-10 03:59:04 +02:00
|
|
|
|
if($aChain=$this->Plugin_GetDelegationChain('action',$sActionClass)) {
|
|
|
|
|
if(!empty($aChain)) {
|
|
|
|
|
$sActionClass=$aChain[0];
|
|
|
|
|
}
|
|
|
|
|
}
|
2010-03-11 23:56:53 +02:00
|
|
|
|
self::$sActionClass = $sActionClass;
|
2009-12-24 22:18:13 +02:00
|
|
|
|
/**
|
|
|
|
|
* Если класс экешна начинается с Plugin*_, значит необходимо загрузить объект из указанного плагина
|
|
|
|
|
*/
|
|
|
|
|
if(!preg_match('/^Plugin([\w]+)_Action([\w]+)$/i',$sActionClass,$aMatches)) {
|
|
|
|
|
require_once(Config::Get('path.root.server').'/classes/actions/'.$sActionClass.'.class.php');
|
|
|
|
|
} else {
|
2010-01-08 22:01:40 +02:00
|
|
|
|
require_once(Config::Get('path.root.server').'/plugins/'.strtolower($aMatches[1]).'/classes/actions/Action'.ucfirst($aMatches[2]).'.class.php');
|
2009-06-29 22:35:43 +03:00
|
|
|
|
}
|
2009-12-24 22:18:13 +02:00
|
|
|
|
|
2010-06-06 16:46:03 +03:00
|
|
|
|
$sClassName=$sActionClass;
|
2009-06-29 22:35:43 +03:00
|
|
|
|
$this->oAction=new $sClassName($this->oEngine,self::$sAction);
|
2010-02-06 11:04:36 +02:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализируем экшен
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run("action_init_".strtolower($sActionClass)."_before");
|
|
|
|
|
$sInitResult = $this->oAction->Init();
|
|
|
|
|
$this->Hook_Run("action_init_".strtolower($sActionClass)."_after");
|
|
|
|
|
|
|
|
|
|
if ($sInitResult==='next') {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->ExecAction();
|
|
|
|
|
} else {
|
2009-12-22 23:48:46 +02:00
|
|
|
|
/**
|
|
|
|
|
* Замеряем время работы action`а
|
|
|
|
|
*/
|
|
|
|
|
$oProfiler=ProfilerSimple::getInstance();
|
|
|
|
|
$iTimeId=$oProfiler->Start('ExecAction',self::$sAction);
|
|
|
|
|
|
2010-02-06 11:04:36 +02:00
|
|
|
|
$res=$this->oAction->ExecEvent();
|
|
|
|
|
|
|
|
|
|
$this->Hook_Run("action_shutdown_".strtolower($sActionClass)."_before");
|
2009-12-22 23:48:46 +02:00
|
|
|
|
$this->oAction->EventShutdown();
|
2010-02-06 11:04:36 +02:00
|
|
|
|
$this->Hook_Run("action_shutdown_".strtolower($sActionClass)."_after");
|
2009-12-22 23:48:46 +02:00
|
|
|
|
|
|
|
|
|
$oProfiler->Stop($iTimeId);
|
2010-02-06 11:04:36 +02:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if ($res==='next') {
|
|
|
|
|
$this->ExecAction();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Определяет какой класс соответствует текущему экшену
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
protected function DefineActionClass() {
|
|
|
|
|
if (isset($this->aConfigRoute['page'][self::$sAction])) {
|
|
|
|
|
|
|
|
|
|
} elseif (self::$sAction===null) {
|
2009-11-22 16:49:34 +02:00
|
|
|
|
self::$sAction=$this->aConfigRoute['config']['action_default'];
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2010-04-03 19:44:12 +03:00
|
|
|
|
//Если не находим нужного класса то отправляем на страницу ошибки
|
|
|
|
|
self::$sAction=$this->aConfigRoute['config']['action_not_found'];
|
|
|
|
|
self::$sActionEvent='404';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
self::$sActionClass=$this->aConfigRoute['page'][self::$sAction];
|
|
|
|
|
return self::$sActionClass;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Функция переадресации на другой экшен
|
|
|
|
|
* Если ею завершить евент в экшене то запуститься новый экшен
|
|
|
|
|
* Пример: return Router::Action('error');
|
|
|
|
|
*
|
|
|
|
|
* @param string $sAction
|
|
|
|
|
* @param string $sEvent
|
|
|
|
|
* @param array $aParams
|
|
|
|
|
* @return 'next'
|
|
|
|
|
*/
|
|
|
|
|
static public function Action($sAction,$sEvent=null,$aParams=null) {
|
|
|
|
|
self::$sAction=$sAction;
|
|
|
|
|
self::$sActionEvent=$sEvent;
|
|
|
|
|
if (is_array($aParams)) {
|
|
|
|
|
self::$aParams=$aParams;
|
|
|
|
|
}
|
|
|
|
|
return 'next';
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-23 01:15:08 +02:00
|
|
|
|
/**
|
|
|
|
|
* Получить текущий путь
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
static public function GetPathWebCurrent() {
|
|
|
|
|
return self::$sPathWebCurrent;
|
|
|
|
|
}
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получить текущий экшен
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
static public function GetAction() {
|
2010-06-04 23:26:20 +03:00
|
|
|
|
return self::getInstance()->Standart(self::$sAction);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить текущий евент
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
static public function GetActionEvent() {
|
|
|
|
|
return self::$sActionEvent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить класс текущего экшена
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
static public function GetActionClass() {
|
|
|
|
|
return self::$sActionClass;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Установить новый текущий евент
|
|
|
|
|
*
|
|
|
|
|
* @param string $sEvent
|
|
|
|
|
*/
|
|
|
|
|
static public function SetActionEvent($sEvent) {
|
|
|
|
|
self::$sActionEvent=$sEvent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить параметры(те которые передаются в URL)
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
static public function GetParams() {
|
|
|
|
|
return self::$aParams;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить параметр по номеру, если его нет то возвращается null
|
|
|
|
|
*
|
|
|
|
|
* @param int $iOffset
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2009-07-26 16:43:16 +03:00
|
|
|
|
static public function GetParam($iOffset,$def=null) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$iOffset=(int)$iOffset;
|
2009-07-26 16:43:16 +03:00
|
|
|
|
return isset(self::$aParams[$iOffset]) ? self::$aParams[$iOffset] : $def;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Установить значение параметра
|
|
|
|
|
*
|
|
|
|
|
* @param int $iOffset - по идеи может быть не только числом
|
|
|
|
|
* @param unknown_type $value
|
|
|
|
|
*/
|
|
|
|
|
static public function SetParam($iOffset,$value) {
|
|
|
|
|
self::$aParams[$iOffset]=$value;
|
|
|
|
|
}
|
|
|
|
|
|
2008-09-26 18:28:47 +03:00
|
|
|
|
/**
|
|
|
|
|
* Показывать или нет статистику выполение скрипта
|
|
|
|
|
* Иногда бывает отключить показ, например, при выводе RSS ленты
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $bState
|
|
|
|
|
*/
|
|
|
|
|
static public function SetIsShowStats($bState) {
|
|
|
|
|
self::$bShowStats=$bState;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить статус показывать или нет статистику
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
static public function GetIsShowStats() {
|
|
|
|
|
return self::$bShowStats;
|
|
|
|
|
}
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
|
|
|
|
|
*
|
|
|
|
|
* @param string $sName
|
|
|
|
|
* @param array $aArgs
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
public function __call($sName,$aArgs) {
|
|
|
|
|
return $this->oEngine->_CallModule($sName,$aArgs);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Блокируем копирование/клонирование объекта роутинга
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function __clone() {
|
|
|
|
|
|
|
|
|
|
}
|
2009-08-19 12:17:38 +03:00
|
|
|
|
|
|
|
|
|
/**
|
2009-08-19 15:01:35 +03:00
|
|
|
|
* Функция, возвращающая правильную адресацию по переданому названию страницы
|
2009-08-19 12:17:38 +03:00
|
|
|
|
*
|
|
|
|
|
* @param string $action
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2009-08-19 13:47:19 +03:00
|
|
|
|
static public function GetPath($action) {
|
2009-08-19 12:17:38 +03:00
|
|
|
|
// Если пользователь запросил action по умолчанию
|
2009-08-19 15:01:35 +03:00
|
|
|
|
$sPage = ($action == 'default')
|
|
|
|
|
? self::getInstance()->aConfigRoute['config']['action_default']
|
|
|
|
|
: $action;
|
|
|
|
|
|
|
|
|
|
// Смотрим, есть ли правило rewrite
|
|
|
|
|
$sPage = self::getInstance()->Rewrite($sPage);
|
2009-11-30 21:31:28 +02:00
|
|
|
|
return rtrim(Config::Get('path.root.web'),'/')."/$sPage/";
|
2009-08-19 15:01:35 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Try to find rewrite rule for given page.
|
|
|
|
|
* On success return rigth page, else return given param.
|
|
|
|
|
*
|
|
|
|
|
* @param string $sPage
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
protected function Rewrite($sPage) {
|
|
|
|
|
return (isset($this->aConfigRoute['rewrite'][$sPage]))
|
|
|
|
|
? $this->aConfigRoute['rewrite'][$sPage]
|
|
|
|
|
: $sPage;
|
2009-08-19 12:17:38 +03:00
|
|
|
|
}
|
2009-08-19 21:27:36 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Стандартизирует определение внутренних ресурсов.
|
|
|
|
|
*
|
|
|
|
|
* Пытается по переданому экшену найти rewrite rule и
|
|
|
|
|
* вернуть стандартное название ресусрса.
|
|
|
|
|
*
|
|
|
|
|
* @see $this->Rewrite()
|
|
|
|
|
* @param string $sPage
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
protected function Standart($sPage) {
|
|
|
|
|
$aRewrite=array_flip($this->aConfigRoute['rewrite']);
|
|
|
|
|
return (isset($aRewrite[$sPage]))
|
|
|
|
|
? $aRewrite[$sPage]
|
|
|
|
|
: $sPage;
|
|
|
|
|
}
|
2009-09-09 20:49:00 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Выполняет редирект, предварительно завершая работу Engine
|
|
|
|
|
*
|
|
|
|
|
* @param string $sLocation
|
|
|
|
|
*/
|
|
|
|
|
static public function Location($sLocation) {
|
|
|
|
|
self::getInstance()->oEngine->Shutdown();
|
|
|
|
|
func_header_location($sLocation);
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
?>
|