mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-17 07:10:48 +03:00
Делегирование объектов из XML описания файла
This commit is contained in:
parent
24ec906586
commit
e97b63af86
|
@ -48,7 +48,6 @@ abstract class Plugin extends Object {
|
|||
*
|
||||
*/
|
||||
public function Init() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -56,6 +55,30 @@ abstract class Plugin extends Object {
|
|||
* Вызывается Engine перед инициализацией плагина
|
||||
*/
|
||||
final function Delegate() {
|
||||
/**
|
||||
* Получаем название плагина
|
||||
*/
|
||||
preg_match('/^Plugin([\w]+)$/i',get_class($this),$aMatches);
|
||||
$sPluginName=strtolower($aMatches[1]);
|
||||
/**
|
||||
* Получаем список объектов, подлежащих делегации
|
||||
*/
|
||||
$aObjects=$this->Plugin_GetDelegateObjectList();
|
||||
|
||||
/**
|
||||
* Считываем данные из XML файла описания
|
||||
*/
|
||||
$sPluginXML = Config::Get('path.root.server').'/plugins/'.$sPluginName.'/'.LsPlugin::PLUGIN_README_FILE;
|
||||
if($oXml = @simplexml_load_file($sPluginXML)) {
|
||||
foreach($aObjects as $sObjectName) {
|
||||
if(is_array($data=$oXml->xpath("delegate/{$sObjectName}/item"))) {
|
||||
foreach($data as $aDelegate) {
|
||||
$this->Plugin_Delegate($sObjectName,$aDelegate->from,$aDelegate->to,get_class($this));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(is_array($this->aDelegates) and count($this->aDelegates)) {
|
||||
foreach ($this->aDelegates as $sObjectName=>$aParams) {
|
||||
if(is_array($aParams) and count($aParams)) {
|
||||
|
|
|
@ -75,7 +75,7 @@ class LsPlugin extends Module {
|
|||
$aList=array_map('basename',glob($this->sPluginsDir.'*',GLOB_ONLYDIR));
|
||||
$aActivePlugins=$this->GetActivePlugins();
|
||||
|
||||
foreach($aList as $sPlugin) {
|
||||
foreach($aList as $sPlugin) {
|
||||
$this->aPluginsList[$sPlugin] = array(
|
||||
'code' => $sPlugin,
|
||||
'is_active' => in_array($sPlugin,$aActivePlugins)
|
||||
|
@ -318,7 +318,7 @@ class LsPlugin extends Module {
|
|||
'sign'=>$sSign
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает делегат модуля, экшена, сущности.
|
||||
* Если делегат не определен, отдает переданный в качестве sender`a параметр
|
||||
|
@ -354,6 +354,15 @@ class LsPlugin extends Module {
|
|||
return isset($this->aDelegates[$sType][$sFrom]['delegate']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список объектов, доступных для делегирования
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetDelegateObjectList() {
|
||||
return array_keys($this->aDelegates);
|
||||
}
|
||||
|
||||
/**
|
||||
* При завершении работы модуля
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue