Remove AFTER_DISPLAY_PAGE Event

This commit is contained in:
Eric Espie
2022-06-02 17:19:43 +02:00
parent 23c95ebbf3
commit 4c31081de2
3 changed files with 87 additions and 93 deletions

View File

@@ -517,23 +517,6 @@
</event_datum>
</event_data>
</event>
<event id="EVENT_SERVICE_AFTER_DISPLAY_PAGE" _delta="define">
<description>The current page is completely displayed</description>
<sources>
<source id="CLIPage">CLIPage</source>
<source id="WebPage">WebPage</source>
</sources>
<event_data>
<event_datum id="object">
<description>The page displayed</description>
<type>Page</type>
</event_datum>
<event_datum id="debug_info">
<description>Debug string</description>
<type>string</type>
</event_datum>
</event_data>
</event>
<event id="EVENT_SERVICE_LOGIN" _delta="define">
<description>Inform the listeners about the connection states</description>
<event_data>

View File

@@ -6,6 +6,8 @@
namespace Combodo\iTop\Service;
use IssueLog;
use LogChannels;
use SetupUtils;
use utils;
@@ -39,4 +41,69 @@ class EventHelper
return $aClasses;
}
public static function Trace($sMessage)
{
IssueLog::Trace($sMessage, LogChannels::EVENT_SERVICE);
}
public static function Debug($sMessage, $sEvent, $sources)
{
$oConfig = utils::GetConfig();
$aLogEvents = $oConfig->Get('event_service.debug.filter_events');
$aLogSources = $oConfig->Get('event_service.debug.filter_sources');
if (is_array($aLogEvents)) {
if (!in_array($sEvent, $aLogEvents)) {
return;
}
}
if (is_array($aLogSources)) {
if (!self::MatchEventSource($aLogSources, $sources)) {
return;
}
}
IssueLog::Debug($sMessage, LogChannels::EVENT_SERVICE);
}
public static function Error($sMessage)
{
IssueLog::Error($sMessage, LogChannels::EVENT_SERVICE);
}
public static function MatchEventSource($srcRegistered, $srcEvent): bool
{
if (empty($srcRegistered)) {
// no filtering
return true;
}
if (empty($srcEvent)) {
// no match (the registered source is not empty)
return false;
}
if (is_string($srcRegistered)) {
$aSrcRegistered = [$srcRegistered];
} elseif (is_array($srcRegistered)) {
$aSrcRegistered = $srcRegistered;
} else {
$aSrcRegistered = [];
}
if (is_string($srcEvent)) {
$aSrcEvent = [$srcEvent];
} elseif (is_array($srcEvent)) {
$aSrcEvent = $srcEvent;
} else {
$aSrcEvent = [];
}
foreach ($aSrcEvent as $sSrcEvent) {
if (in_array($sSrcEvent, $aSrcRegistered)) {
// sources matches
return true;
}
}
// no match
return false;
}
}

View File

@@ -8,10 +8,9 @@ namespace Combodo\iTop\Service;
use Closure;
use ContextTag;
use CoreException;
use Exception;
use ExecutionKPI;
use IssueLog;
use LogChannels;
use ReflectionClass;
class EventService
@@ -68,7 +67,7 @@ class EventService
$iTotalRegistrations += count($aEvent);
}
$sLogEventName = "$sEvent:".self::GetSourcesAsString($sEventSource);
IssueLog::Trace("Registering event '$sLogEventName' for '$sName' with id '$sId' (total $iTotalRegistrations)", LogChannels::EVENT_SERVICE);
EventHelper::Trace("Registering event '$sLogEventName' for '$sName' with id '$sId' (total $iTotalRegistrations)");
return $sId;
}
@@ -88,13 +87,17 @@ class EventService
public static function FireEvent(EventData $oEventData)
{
$sEvent = $oEventData->GetEvent();
if (!array_key_exists($sEvent, self::$aEventDescription)) {
$sError = "Fire event error: Event $sEvent is not registered";
EventHelper::Error($sError);
throw new CoreException($sError);
}
$eventSource = $oEventData->GetEventSource();
$oKPI = new ExecutionKPI();
$sSource = isset($aEventData['debug_info']) ? " {$aEventData['debug_info']}" : '';
$sLogEventName = "$sEvent - ".self::GetSourcesAsString($eventSource);
IssueLog::Trace("Fire event '$sLogEventName'$sSource", LogChannels::EVENT_SERVICE);
$sLogEventName = "$sEvent - ".self::GetSourcesAsString($eventSource).' '.json_encode($oEventData->GetEventData());
EventHelper::Trace("Fire event '$sLogEventName'");
if (!isset(self::$aEventListeners[$sEvent])) {
IssueLog::Trace("No registration found for event '$sEvent'", LogChannels::EVENT_SERVICE);
EventHelper::Debug("No listener found for '$sLogEventName'", $sEvent, $eventSource);
$oKPI->ComputeStats('FireEvent', $sEvent);
return;
@@ -105,16 +108,17 @@ class EventService
continue;
}
$sName = $aEventCallback['name'];
IssueLog::Debug("Fire event '$sLogEventName'$sSource calling '$sName'", LogChannels::EVENT_SERVICE);
EventHelper::Debug("Fire event '$sLogEventName' calling '$sName'", $sEvent, $eventSource);
try {
$oEventData->SetCallbackData($aEventCallback['data']);
call_user_func($aEventCallback['callback'], $oEventData);
}
catch (Exception $e) {
IssueLog::Error("Event '$sLogEventName' for '$sName' id {$aEventCallback['id']} failed with error: ".$e->getMessage());
EventHelper::Error("Event '$sLogEventName' for '$sName' id {$aEventCallback['id']} failed with error: ".$e->getMessage());
throw $e;
}
}
EventHelper::Debug("End of event '$sLogEventName'", $sEvent, $eventSource);
$oKPI->ComputeStats('FireEvent', $sEvent);
}
@@ -123,7 +127,7 @@ class EventService
$aListeners = [];
if (isset(self::$aEventListeners[$sEvent])) {
foreach (self::$aEventListeners[$sEvent] as $aEventCallback) {
if (self::MatchEventSource($aEventCallback['source'], $eventSource)) {
if (EventHelper::MatchEventSource($aEventCallback['source'], $eventSource)) {
$aListeners[] = $aEventCallback;
}
}
@@ -132,43 +136,6 @@ class EventService
return $aListeners;
}
private static function MatchEventSource($srcRegistered, $srcEvent): bool
{
if (empty($srcRegistered)) {
// no filtering
return true;
}
if (empty($srcEvent)) {
// no match (the registered source is not empty)
return false;
}
if (is_string($srcRegistered)) {
$aSrcRegistered = [$srcRegistered];
} elseif (is_array($srcRegistered)) {
$aSrcRegistered = $srcRegistered;
} else {
$aSrcRegistered = [];
}
if (is_string($srcEvent)) {
$aSrcEvent = [$srcEvent];
} elseif (is_array($srcEvent)) {
$aSrcEvent = $srcEvent;
} else {
$aSrcEvent = [];
}
foreach ($aSrcEvent as $sSrcEvent) {
if (in_array($sSrcEvent, $aSrcRegistered)) {
// sources matches
return true;
}
}
// no match
return false;
}
private static function MatchContext($registeredContext): bool
{
if (empty($registeredContext)) {
@@ -216,7 +183,7 @@ class EventService
if ($aEventCallback['id'] == $sId) {
$sName = self::$aEventListeners[$sEvent][$idx]['name'];
unset (self::$aEventListeners[$sEvent][$idx]);
IssueLog::Trace("Unregistered callback '$sName' id $sId' on event '$sEvent'", LogChannels::EVENT_SERVICE);
EventHelper::Trace("Unregistered callback '$sName' id $sId' on event '$sEvent'");
return false;
}
@@ -225,7 +192,7 @@ class EventService
});
if (!$bRemoved) {
IssueLog::Trace("No registration found for callback '$sId'", LogChannels::EVENT_SERVICE);
EventHelper::Trace("No registration found for callback '$sId'");
}
}
@@ -237,13 +204,13 @@ class EventService
public static function UnRegisterEventListeners(string $sEvent)
{
if (!isset(self::$aEventListeners[$sEvent])) {
IssueLog::Trace("No registration found for event '$sEvent'", LogChannels::EVENT_SERVICE);
EventHelper::Trace("No registration found for event '$sEvent'");
return;
}
unset(self::$aEventListeners[$sEvent]);
IssueLog::Trace("Unregistered all the callbacks on event '$sEvent'", LogChannels::EVENT_SERVICE);
EventHelper::Trace("Unregistered all the callbacks on event '$sEvent'");
}
/**
@@ -252,7 +219,7 @@ class EventService
public static function UnRegisterAll()
{
self::$aEventListeners = array();
IssueLog::Trace("Unregistered all events", LogChannels::EVENT_SERVICE);
EventHelper::Trace("Unregistered all events");
}
/**
@@ -280,7 +247,7 @@ class EventService
{
if (isset(self::$aEventDescription[$sEvent])) {
$sPrevious = self::$aEventDescription[$sEvent]['module'];
IssueLog::Error("The Event $sEvent defined by $sModule has already been defined in $sPrevious, check your delta", LogChannels::EVENT_SERVICE);
EventHelper::Error("The Event $sEvent defined by $sModule has already been defined in $sPrevious, check your delta");
}
self::$aEventDescription[$sEvent] = [
@@ -324,27 +291,4 @@ class EventService
{
return json_encode(self::$aEventDescription, JSON_PRETTY_PRINT);
}
/**
* @param string $sListenerId The id given by the RegisterListener() method
* @param bool $bPermanentProtection Be very careful when setting false, infinite loops can occur
*
* @return void
*/
public static function EnableReentranceProtection($sListenerId, $bPermanentProtection = true)
{
self::$aReentranceProtection[$sListenerId] = $bPermanentProtection;
}
/**
* @param string $sListenerId The id given by the RegisterListener() method
*
* @return void
*/
public static function DisableReentranceProtection($sListenerId)
{
if (isset(self::$aReentranceProtection[$sListenerId])) {
unset(self::$aReentranceProtection[$sListenerId]);
}
}
}