mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-26 03:30:48 +03:00
Plugin: возможность делегирования (подмены) модуля\экшена\сущности из плагина.
This commit is contained in:
parent
02060212c3
commit
b0e8a7696a
|
@ -314,7 +314,7 @@ class Engine extends Object {
|
|||
* @param array $aArgs
|
||||
* @return unknown
|
||||
*/
|
||||
public function _CallModule($sName,$aArgs) {
|
||||
public function _CallModule($sName,$aArgs) {
|
||||
$sArgs='';
|
||||
$aStrArgs=array();
|
||||
foreach ($aArgs as $sKey => $arg) {
|
||||
|
@ -352,7 +352,11 @@ class Engine extends Object {
|
|||
$sModuleName=$aName[0].'_'.$aName[1];
|
||||
$sMethod=$aName[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* Подхватыем делегат модуля (в случае наличия такового)
|
||||
*/
|
||||
if($sModuleName!='Plugin') $sModuleName=$this->Plugin_GetDelegate('module',$sModuleName);
|
||||
|
||||
if (isset($this->aModules[$sModuleName])) {
|
||||
$oModule=$this->aModules[$sModuleName];
|
||||
} else {
|
||||
|
@ -393,6 +397,10 @@ class Engine extends Object {
|
|||
* @return mixed
|
||||
*/
|
||||
public static function GetEntity($sName,$aParams=array()) {
|
||||
/**
|
||||
* Определяем наличие делегата сущности
|
||||
*/
|
||||
$sName=self::getInstance()->Plugin_GetDelegate('entity',$sName);
|
||||
/**
|
||||
* Сущности, имеющие такое же название как модуль,
|
||||
* можно вызывать сокращенно. Например, вместо User_User -> User
|
||||
|
@ -414,7 +422,7 @@ class Engine extends Object {
|
|||
list($sPlugin,$sModule,$sEntity)=explode('_',$sName);
|
||||
$sPlugin = substr($sPlugin,6);
|
||||
} else {
|
||||
throw new Exception("Unknown entity '{$sName}' given.");
|
||||
throw new Exception("Unknown entity '{$sName}' given.");
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -155,6 +155,10 @@ class Router extends Object {
|
|||
$oActionInit->InitAction();
|
||||
|
||||
$sActionClass=$this->DefineActionClass();
|
||||
/**
|
||||
* Определяем наличие делегата экшена
|
||||
*/
|
||||
$sActionClass=$this->Plugin_GetDelegate('action',$sActionClass);
|
||||
|
||||
/**
|
||||
* Если класс экешна начинается с Plugin*_, значит необходимо загрузить объект из указанного плагина
|
||||
|
|
|
@ -47,6 +47,17 @@ class LsPlugin extends Module {
|
|||
*/
|
||||
protected $aPluginsList=array();
|
||||
|
||||
/**
|
||||
* Список engine-rewrite`ов (модули, экшены, сущности)
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aDelegate=array(
|
||||
'module' => array(),
|
||||
'action' => array(),
|
||||
'entity' => array()
|
||||
);
|
||||
|
||||
/**
|
||||
* Инициализация модуля
|
||||
*
|
||||
|
@ -188,6 +199,42 @@ class LsPlugin extends Module {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Перенаправление вызовов на модули, экшены, сущности
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sFrom
|
||||
* @param string $sTo
|
||||
*/
|
||||
public function Delegate($sType,$sFrom,$sTo) {
|
||||
if(!in_array($sType,array('module','action','entity')) or !$sFrom or !$sTo) return null;
|
||||
$this->aDelegate[$sType][trim($sFrom)]=trim($sTo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает делегат модуля, экшена, сущности.
|
||||
* Если делегат не определен, отдает переданный в качестве sender`a параметр
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sFrom
|
||||
* @return string
|
||||
*/
|
||||
public function GetDelegate($sType,$sFrom) {
|
||||
return $this->isDelegated($sType,$sFrom)?$this->aDelegate[$sType][$sFrom]:$sFrom;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает true, если установлено правило делегирования
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sFrom
|
||||
* @return bool
|
||||
*/
|
||||
public function isDelegated($sType,$sFrom) {
|
||||
if(!in_array($sType,array('module','action','entity')) or !$sFrom) return false;
|
||||
return isset($this->aDelegate[$sType][$sFrom]);
|
||||
}
|
||||
|
||||
/**
|
||||
* При завершении работы модуля
|
||||
*
|
||||
|
|
|
@ -24,5 +24,11 @@ class PluginProfiler extends Plugin {
|
|||
$this->ExportSQL(dirname(__FILE__).'/sql.sql');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация плагина Profiler
|
||||
*/
|
||||
public function Init() {
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Reference in a new issue