mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 18:48:51 +02:00
Changed the <Hooks> grammar to allow module extensibility
This commit is contained in:
@@ -1231,24 +1231,18 @@
|
||||
</state>
|
||||
</states>
|
||||
</lifecycle>
|
||||
<hooks>
|
||||
<hook id="BeforeInsert">
|
||||
<listeners>
|
||||
<listener id="OnBeforeInsertEvent">
|
||||
<callback>OnBeforeInsertEvent</callback>
|
||||
<priority>0</priority>
|
||||
</listener>
|
||||
</listeners>
|
||||
</hook>
|
||||
<hook id="BeforeUpdate">
|
||||
<listeners>
|
||||
<listener id="OnBeforeUpdateEvent">
|
||||
<callback>OnBeforeUpdateEvent</callback>
|
||||
<priority>0</priority>
|
||||
</listener>
|
||||
</listeners>
|
||||
</hook>
|
||||
</hooks>
|
||||
<hook_listeners>
|
||||
<listener id="OnBeforeInsertEvent">
|
||||
<event>BeforeInsert</event>
|
||||
<callback>OnBeforeInsertEvent</callback>
|
||||
<priority>0</priority>
|
||||
</listener>
|
||||
<listener id="OnBeforeUpdateEvent">
|
||||
<event>BeforeUpdate</event>
|
||||
<callback>OnBeforeUpdateEvent</callback>
|
||||
<priority>0</priority>
|
||||
</listener>
|
||||
</hook_listeners>
|
||||
<methods>
|
||||
<method id="GetTicketRefFormat">
|
||||
<static>true</static>
|
||||
|
||||
@@ -1252,6 +1252,7 @@ EOF
|
||||
foreach($oIndexes->getElementsByTagName('index') as $oIndex)
|
||||
{
|
||||
$sIndexId = $oIndex->getAttribute('id');
|
||||
/** @var DesignElement $oAttributes */
|
||||
$oAttributes = $oIndex->GetUniqueElement('attributes');
|
||||
foreach ($oAttributes->getElementsByTagName('attribute') as $oAttribute) {
|
||||
$aIndexes[$sIndexId][] = $oAttribute->getAttribute('id');
|
||||
@@ -1262,50 +1263,35 @@ EOF
|
||||
|
||||
$sEvents = '';
|
||||
$sMethods = '';
|
||||
$oHooks = $oClass->GetOptionalElement('hooks');
|
||||
if ($oHooks)
|
||||
{
|
||||
foreach($oHooks->getElementsByTagName('hook') as $oHook)
|
||||
{
|
||||
/** @var \DOMElement $oHook */
|
||||
$sEventName = $oHook->getAttribute('id');
|
||||
$oListeners = $oHook->GetOptionalElement('listeners');
|
||||
if ($oListeners)
|
||||
{
|
||||
foreach ($oListeners->getElementsByTagName('listener') as $oListener)
|
||||
{
|
||||
/** @var \DOMElement $oListener */
|
||||
$sListenerId = $oListener->getAttribute('id');
|
||||
$oCallback = $oListener->GetUniqueElement('callback', false);
|
||||
if (is_object($oCallback))
|
||||
{
|
||||
$sCallback = $oCallback->GetText();
|
||||
}
|
||||
else
|
||||
{
|
||||
$oExecute = $oListener->GetUniqueElement('execute', true);
|
||||
$sExecute = trim($oExecute->GetText());
|
||||
$sCallback = "EventHook_{$sEventName}_{$sListenerId}";
|
||||
$sCallbackFct = preg_replace('@^function\s*\(@', "public function {$sCallback}(", $sExecute);
|
||||
if ($sExecute == $sCallbackFct)
|
||||
{
|
||||
throw new DOMFormatException("Malformed tag <execute> in class: {$sClass} hook: {$sEventName} listener: {$sListenerId}");
|
||||
}
|
||||
$sMethods .= "\n {$sCallbackFct}\n\n";
|
||||
}
|
||||
if (strpos($sCallback, '::') === false)
|
||||
{
|
||||
$sEventListener = '[$this, \''.$sCallback.'\']';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sEventListener = "'{$sCallback}'";
|
||||
}
|
||||
|
||||
$sListenerPriority = (float)($oListener->GetChildText('priority', '0'));
|
||||
$sEvents .= "\n Combodo\iTop\Service\EventService::Register(\"$sEventName\", $sEventListener, \$this->m_sEventUniqId, \"$sListenerId\", null, $sListenerPriority);";
|
||||
$oHooks = $oClass->GetOptionalElement('hook_listeners');
|
||||
if ($oHooks) {
|
||||
foreach ($oHooks->getElementsByTagName('listener') as $oListener) {
|
||||
/** @var DesignElement $oListener */
|
||||
$oEventNode = $oListener->GetUniqueElement('event');
|
||||
/** @var DesignElement $oEventNode $oEventNode */
|
||||
$sEventName = $oEventNode->GetText();
|
||||
$sListenerId = $oListener->getAttribute('id');
|
||||
$oCallback = $oListener->GetUniqueElement('callback', false);
|
||||
if (is_object($oCallback)) {
|
||||
$sCallback = $oCallback->GetText();
|
||||
} else {
|
||||
$oExecute = $oListener->GetUniqueElement('execute', true);
|
||||
$sExecute = trim($oExecute->GetText());
|
||||
$sCallback = "EventHook_{$sEventName}_$sListenerId";
|
||||
$sCallbackFct = preg_replace('@^function\s*\(@', "public function $sCallback(", $sExecute);
|
||||
if ($sExecute == $sCallbackFct) {
|
||||
throw new DOMFormatException("Malformed tag <execute> in class: $sClass hook: $sEventName listener: $sListenerId");
|
||||
}
|
||||
$sMethods .= "\n $sCallbackFct\n\n";
|
||||
}
|
||||
if (strpos($sCallback, '::') === false) {
|
||||
$sEventListener = '[$this, \''.$sCallback.'\']';
|
||||
} else {
|
||||
$sEventListener = "'$sCallback'";
|
||||
}
|
||||
|
||||
$sListenerPriority = (float)($oListener->GetChildText('priority', '0'));
|
||||
$sEvents .= "\n Combodo\iTop\Service\EventService::Register(\"$sEventName\", $sEventListener, \$this->m_sEventUniqId, \"$sListenerId\", null, $sListenerPriority);";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1315,7 +1301,7 @@ EOF
|
||||
protected function RegisterEvents()
|
||||
{
|
||||
parent::RegisterEvents();
|
||||
{$sEvents}
|
||||
$sEvents
|
||||
}
|
||||
|
||||
EOF;
|
||||
|
||||
Reference in New Issue
Block a user