From 4718b20ff1fe01d184fea32d336278f396af5eca Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Sun, 25 Apr 2010 12:07:11 +0000 Subject: [PATCH] fix delegate --- engine/classes/Plugin.class.php | 41 ++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/engine/classes/Plugin.class.php b/engine/classes/Plugin.class.php index 436c0515..6ff00b1d 100644 --- a/engine/classes/Plugin.class.php +++ b/engine/classes/Plugin.class.php @@ -76,21 +76,8 @@ abstract class Plugin extends Object { /** * Если не указан параметр FROM, копируем значение всего ITEM */ - if(!$aDelegate->from) $aDelegate->from=$aDelegate; - /** - * Если не указан делегат TO, считаем, что делегатом является - * одноименный объект текущего плагина - */ - if ($sObjectName=='template') { - if(!$aDelegate->to) { - $aDelegate->to = $this->GetTemplatePath(get_class($this)).$aDelegate->from; - } else { - $aDelegate->to=preg_replace("/^_/",$this->GetTemplatePath(get_class($this)),$aDelegate->to); - } - } else { - if(!$aDelegate->to) $aDelegate->to = get_class($this).'_'.$aDelegate->from; - } - $this->Plugin_Delegate($sObjectName,$aDelegate->from,$aDelegate->to,get_class($this)); + if(!$aDelegate->from) $aDelegate->from=$aDelegate; + $this->DelegateWrapper($sObjectName,$aDelegate->from,$aDelegate->to); } } } @@ -100,13 +87,35 @@ abstract class Plugin extends Object { foreach ($this->aDelegates as $sObjectName=>$aParams) { if(is_array($aParams) and count($aParams)) { foreach ($aParams as $sFrom=>$sTo) { - $this->Plugin_Delegate($sObjectName,$sFrom,$sTo,get_class($this)); + if (is_int($sFrom)) { + $sFrom=$sTo; + $sTo=null; + } + $this->DelegateWrapper($sObjectName,$sFrom,$sTo); } } } } } + + public function DelegateWrapper($sObjectName,$sFrom,$sTo=null) { + /** + * Если не указан делегат TO, считаем, что делегатом является + * одноименный объект текущего плагина + */ + if ($sObjectName=='template') { + if(!$sTo) { + $sTo = $this->GetTemplatePath(get_class($this)).$sFrom; + } else { + $sTo=preg_replace("/^_/",$this->GetTemplatePath(get_class($this)),$sTo); + } + } else { + if(!$sTo) $sTo = get_class($this).'_'.$sFrom; + } + $this->Plugin_Delegate($sObjectName,$sFrom,$sTo,get_class($this)); + } + /** * Возвращает массив делегатов *