From 8ddaf1b731395aecf362dce749a292e18b40fdc2 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Tue, 15 Mar 2022 15:41:55 +0100 Subject: [PATCH] EventService: call FireEvent with only one parameter (PSR14) --- application/loginwebpage.class.inc.php | 11 +-- core/dbobject.class.php | 4 +- core/ormdocument.class.inc.php | 3 +- sources/Application/Service/EventData.php | 17 ++-- sources/Application/Service/EventService.php | 11 ++- sources/Application/WebPage/CLIPage.php | 3 +- sources/Application/WebPage/WebPage.php | 3 +- test/service/EventTest.php | 86 ++++++++++---------- 8 files changed, 77 insertions(+), 61 deletions(-) diff --git a/application/loginwebpage.class.inc.php b/application/loginwebpage.class.inc.php index 170d7c3da..14d24529f 100644 --- a/application/loginwebpage.class.inc.php +++ b/application/loginwebpage.class.inc.php @@ -24,10 +24,11 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ -use Combodo\iTop\Service\EventService; -use Combodo\iTop\Service\EventName; use Combodo\iTop\Application\Branding; use Combodo\iTop\Application\Helper\Session; +use Combodo\iTop\Service\EventData; +use Combodo\iTop\Service\EventName; +use Combodo\iTop\Service\EventService; /** * Web page used for displaying the login form @@ -488,14 +489,14 @@ class LoginWebPage extends NiceWebPage { if ($bFireEvent) { - EventService::FireEvent(EventName::LOGIN, null, array('code' => $iErrorCode, 'state' => $sLoginState)); + EventService::FireEvent(new EventData(EventName::LOGIN, null, ['code' => $iErrorCode, 'state' => $sLoginState])); } Session::WriteClose(); return $iErrorCode; // Asked to exit FSM, generally login OK } if ($iResponse == self::LOGIN_FSM_ERROR) { - EventService::FireEvent(EventName::LOGIN, null, array('code' => $iErrorCode, 'state' => $sLoginState)); + EventService::FireEvent(new EventData(EventName::LOGIN, null, ['code' => $iErrorCode, 'state' => $sLoginState])); $sLoginState = self::LOGIN_STATE_SET_ERROR; // Next state will be error // An error was detected, skip the other plugins turn break; @@ -509,7 +510,7 @@ class LoginWebPage extends NiceWebPage } catch (Exception $e) { - EventService::FireEvent(EventName::LOGIN, null, array('state' => $_SESSION['login_state'])); + EventService::FireEvent(new EventData(EventName::LOGIN, null, ['state' => $_SESSION['login_state']])); IssueLog::Error($e->getTraceAsString()); static::ResetSession(); die($e->getMessage()); diff --git a/core/dbobject.class.php b/core/dbobject.class.php index 466ce2d5b..6ec746bbc 100644 --- a/core/dbobject.class.php +++ b/core/dbobject.class.php @@ -5,6 +5,7 @@ */ use Combodo\iTop\Core\MetaModel\FriendlyNameType; +use Combodo\iTop\Service\EventData; use Combodo\iTop\Service\EventName; use Combodo\iTop\Service\EventService; @@ -5806,6 +5807,7 @@ abstract class DBObject implements iDisplay * @param array $aEventData * * @throws \CoreException + * @throws \Exception */ public function FireEvent($sEvent, $aEventData = array()) { @@ -5815,7 +5817,7 @@ abstract class DBObject implements iDisplay foreach (MetaModel::EnumParentClasses(get_class($this), ENUM_PARENT_CLASSES_ALL, false) as $sClass) { $aEventSources[] = $sClass; } - EventService::FireEvent($sEvent, $aEventSources, $aEventData); + EventService::FireEvent(new EventData($sEvent, $aEventSources, $aEventData)); } } diff --git a/core/ormdocument.class.inc.php b/core/ormdocument.class.inc.php index a835c9767..b02ad1f64 100644 --- a/core/ormdocument.class.inc.php +++ b/core/ormdocument.class.inc.php @@ -25,6 +25,7 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ +use Combodo\iTop\Service\EventData; use Combodo\iTop\Service\EventName; use Combodo\iTop\Service\EventService; @@ -220,7 +221,7 @@ class ormDocument 'object' => $oObj, 'document' => $oDocument, ); - EventService::FireEvent(EventName::DOWNLOAD_DOCUMENT, $sClass, $aEventData); + EventService::FireEvent(new EventData(EventName::DOWNLOAD_DOCUMENT, $sClass, $aEventData)); $oPage->TrashUnexpectedOutput(); $oPage->SetContentType($oDocument->GetMimeType()); $oPage->SetContentDisposition($sContentDisposition,$oDocument->GetFileName()); diff --git a/sources/Application/Service/EventData.php b/sources/Application/Service/EventData.php index 5e9592181..def75d008 100644 --- a/sources/Application/Service/EventData.php +++ b/sources/Application/Service/EventData.php @@ -24,16 +24,15 @@ class EventData * EventServiceData constructor. * * @param string $sEvent - * @param mixed $mEventSource + * @param string|array|null $mEventSource * @param array $aEventData - * @param array $aCallbackData */ - public function __construct(string $sEvent, $mEventSource, array $aEventData, array $aCallbackData) + public function __construct(string $sEvent, $mEventSource = null, array $aEventData = []) { $this->sEvent = $sEvent; $this->aEventData = $aEventData; $this->mEventSource = $mEventSource; - $this->aCallbackData = $aCallbackData; + $this->aCallbackData = []; } /** @@ -74,7 +73,15 @@ class EventData } /** - * @return array + * @param array|null $aCallbackData + */ + public function SetCallbackData(?array $aCallbackData) + { + $this->aCallbackData = $aCallbackData; + } + + /** + * @return array|null */ public function GetCallbackData(): array { diff --git a/sources/Application/Service/EventService.php b/sources/Application/Service/EventService.php index ba02644dc..b92298d51 100644 --- a/sources/Application/Service/EventService.php +++ b/sources/Application/Service/EventService.php @@ -25,7 +25,7 @@ class EventService * @param string $sEvent corresponding event * @param callable $callback The callback to call * @param array|string|null $sEventSource event filtering depending on the source of the event - * @param array $aCallbackData optional data given by the registrar to the callback + * @param array|null $aCallbackData optional data given by the registrar to the callback * @param array|string|null $context context filter * @param float $fPriority optional priority for callback order * @@ -33,7 +33,7 @@ class EventService * * @throws \Exception */ - public static function Register(string $sEvent, callable $callback, $sEventSource = null, array $aCallbackData = [], $context = null, float $fPriority = 0.0): string + public static function Register(string $sEvent, callable $callback, $sEventSource = null, ?array $aCallbackData = [], $context = null, float $fPriority = 0.0): string { is_callable($callback, false, $sName); @@ -78,8 +78,10 @@ class EventService * * @throws \Exception from the callback */ - public static function FireEvent(string $sEvent, $eventSource = null, array $aEventData = array()) + public static function FireEvent(EventData $oEventData) { + $sEvent = $oEventData->GetEvent(); + $eventSource = $oEventData->GetEventSource(); $oKPI = new ExecutionKPI(); $sSource = isset($aEventData['debug_info']) ? " {$aEventData['debug_info']}" : ''; $sEventName = "$sEvent:".self::GetSourcesAsString($eventSource); @@ -102,7 +104,8 @@ class EventService IssueLog::Debug("Fire event '$sEventName'$sSource calling '{$sName}'", LOG_EVENT_SERVICE_CHANNEL); try { if (is_callable($aEventCallback['callback'])) { - call_user_func($aEventCallback['callback'], new EventData($sEvent, $eventSource, $aEventData, $aEventCallback['data'])); + $oEventData->SetCallbackData($aEventCallback['data']); + call_user_func($aEventCallback['callback'], $oEventData); } else { IssueLog::Debug("Callback '{$sName}' not a callable anymore, unregister", LOG_EVENT_SERVICE_CHANNEL); self::UnRegisterCallback($aEventCallback['id']); diff --git a/sources/Application/WebPage/CLIPage.php b/sources/Application/WebPage/CLIPage.php index f148eb2c6..b997293b6 100644 --- a/sources/Application/WebPage/CLIPage.php +++ b/sources/Application/WebPage/CLIPage.php @@ -15,6 +15,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with iTop. If not, see +use Combodo\iTop\Service\EventData; use Combodo\iTop\Service\EventName; use Combodo\iTop\Service\EventService; @@ -52,7 +53,7 @@ class CLIPage implements Page { $aData['debug_info'] = 'from: '.get_class($this).":[$this->s_title]"; $aData['object'] = $this; - EventService::FireEvent(EventName::AFTER_DISPLAY_PAGE, get_class($this), $aData); + EventService::FireEvent(new EventData(EventName::AFTER_DISPLAY_PAGE, get_class($this), $aData)); } public function add($sText) diff --git a/sources/Application/WebPage/WebPage.php b/sources/Application/WebPage/WebPage.php index bcec61bb2..d1ba573e5 100644 --- a/sources/Application/WebPage/WebPage.php +++ b/sources/Application/WebPage/WebPage.php @@ -17,6 +17,7 @@ use Combodo\iTop\Application\UI\Base\Layout\iUIContentBlock; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock; use Combodo\iTop\Renderer\BlockRenderer; use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer; +use Combodo\iTop\Service\EventData; use Combodo\iTop\Service\EventName; use Combodo\iTop\Service\EventService; @@ -1354,7 +1355,7 @@ JS; { $aData['debug_info'] = 'from: '.get_class($this).":[$this->s_title]"; $aData['object'] = $this; - EventService::FireEvent(EventName::AFTER_DISPLAY_PAGE, get_class($this), $aData); + EventService::FireEvent(new EventData(EventName::AFTER_DISPLAY_PAGE, get_class($this), $aData)); } /** diff --git a/test/service/EventTest.php b/test/service/EventTest.php index 8ddea74cf..f27bb24ac 100644 --- a/test/service/EventTest.php +++ b/test/service/EventTest.php @@ -2,8 +2,8 @@ namespace Combodo\iTop\Test\UnitTest\Service; -use Combodo\iTop\Service\EventService; use Combodo\iTop\Service\EventData; +use Combodo\iTop\Service\EventService; use Combodo\iTop\Test\UnitTest\ItopTestCase; use ContextTag; use TypeError; @@ -57,7 +57,7 @@ class EventTest extends ItopTestCase { $sId = EventService::Register('event', function () { $this->debug("Closure: event received !!!"); self::IncrementCallCount(); }); $this->debug("Registered $sId"); - EventService::FireEvent('event'); + EventService::FireEvent(new EventData('event')); $this->assertEquals(1, self::$iEventCalls); } @@ -72,9 +72,9 @@ class EventTest extends ItopTestCase { $sId = EventService::Register('event', $callback); $this->debug("Registered $sId"); - EventService::FireEvent('event'); + EventService::FireEvent(new EventData('event')); $this->assertEquals(1, self::$iEventCalls); - EventService::FireEvent('event'); + EventService::FireEvent(new EventData('event')); $this->assertEquals(2, self::$iEventCalls); } @@ -94,7 +94,7 @@ class EventTest extends ItopTestCase EventService::Register('event_a', array($oReceiver, 'BrokenCallback')); $this->expectException(TypeError::class); - EventService::FireEvent('event_a'); + EventService::FireEvent(new EventData('event_a')); } public function testRemovedCallback() @@ -105,7 +105,7 @@ class EventTest extends ItopTestCase $oReceiver = null; gc_collect_cycles(); - EventService::FireEvent('event_a'); + EventService::FireEvent(new EventData('event_a')); $this->assertEquals(1, self::$iEventCalls); } @@ -122,9 +122,9 @@ class EventTest extends ItopTestCase EventService::Register('event_b', array('Combodo\iTop\Test\UnitTest\Service\TestEventReceiver', 'OnStaticEvent1')); EventService::Register('event_b', 'Combodo\iTop\Test\UnitTest\Service\TestEventReceiver::OnStaticEvent2'); - EventService::FireEvent('event_a'); + EventService::FireEvent(new EventData('event_a')); $this->assertEquals(4, self::$iEventCalls); - EventService::FireEvent('event_b'); + EventService::FireEvent(new EventData('event_b')); $this->assertEquals(8, self::$iEventCalls); } @@ -140,66 +140,66 @@ class EventTest extends ItopTestCase $sId = EventService::Register('event1', array($oReceiver, 'OnEvent1')); $this->debug("Registered $sId"); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(4, self::$iEventCalls); } public function testData() { $oReceiver = new TestEventReceiver(); - EventService::Register('event1', array($oReceiver, 'OnEventWithData'), ''); - EventService::Register('event1', array($oReceiver, 'OnEventWithData'), ''); - EventService::FireEvent('event1', '', array('text' => 'Event Data 1')); + EventService::Register('event1', [$oReceiver, 'OnEventWithData'], ''); + EventService::Register('event1', [$oReceiver, 'OnEventWithData'], ''); + EventService::FireEvent(new EventData('event1', '', ['text' => 'Event Data 1'])); $this->assertEquals(2, self::$iEventCalls); } public function testPriority() { $oReceiver = new TestEventReceiver(); - EventService::Register('event1', array($oReceiver, 'OnEvent1'), '', null, null, 0); - EventService::Register('event1', array($oReceiver, 'OnEvent2'), '', null, null, 1); + EventService::Register('event1', [$oReceiver, 'OnEvent1'], '', null, null, 0); + EventService::Register('event1', [$oReceiver, 'OnEvent2'], '', null, null, 1); - EventService::Register('event2', array($oReceiver, 'OnEvent1'), '', null, null, 1); - EventService::Register('event2', array($oReceiver, 'OnEvent2'), '', null, null, 0); + EventService::Register('event2', [$oReceiver, 'OnEvent1'], '', null, null, 1); + EventService::Register('event2', [$oReceiver, 'OnEvent2'], '', null, null, 0); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(2, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(4, self::$iEventCalls); } public function testContext() { $oReceiver = new TestEventReceiver(); - EventService::Register('event1', array($oReceiver, 'OnEvent1'), '', null, null, 0); - EventService::Register('event1', array($oReceiver, 'OnEvent2'), '', null, 'test_context', 1); - EventService::FireEvent('event1'); + EventService::Register('event1', [$oReceiver, 'OnEvent1'], '', null, null, 0); + EventService::Register('event1', [$oReceiver, 'OnEvent2'], '', null, 'test_context', 1); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(1, self::$iEventCalls); ContextTag::AddContext('test_context'); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(3, self::$iEventCalls); } public function testEventSource() { $oReceiver = new TestEventReceiver(); - EventService::Register('event1', array($oReceiver, 'OnEvent1'), 'A', null, null, 0); - EventService::Register('event1', array($oReceiver, 'OnEvent2'), 'A', null, null, 1); + EventService::Register('event1', [$oReceiver, 'OnEvent1'], 'A', null, null, 0); + EventService::Register('event1', [$oReceiver, 'OnEvent2'], 'A', null, null, 1); EventService::Register('event1', 'Combodo\iTop\Test\UnitTest\Service\TestEventReceiver::OnStaticEvent1', null, null, null, 2); - EventService::Register('event2', array($oReceiver, 'OnEvent1'), 'A', null, null, 1); + EventService::Register('event2', [$oReceiver, 'OnEvent1'], 'A', null, null, 1); EventService::Register('event2', 'Combodo\iTop\Test\UnitTest\Service\TestEventReceiver::OnStaticEvent1', null, null, null, 2); - EventService::Register('event2', array($oReceiver, 'OnEvent2'), 'B', null, null, 0); + EventService::Register('event2', [$oReceiver, 'OnEvent2'], 'B', null, null, 0); - EventService::FireEvent('event1', 'A'); + EventService::FireEvent(new EventData('event1', 'A')); $this->assertEquals(3, self::$iEventCalls); - EventService::FireEvent('event2', 'A'); + EventService::FireEvent(new EventData('event2', 'A')); $this->assertEquals(5, self::$iEventCalls); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(6, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(7, self::$iEventCalls); - EventService::FireEvent('event2', array('A', 'B')); + EventService::FireEvent(new EventData('event2', ['A', 'B'])); $this->assertEquals(10, self::$iEventCalls); } @@ -217,18 +217,18 @@ class EventTest extends ItopTestCase $sId = EventService::Register('event2', array($oReceiver, 'OnEvent1')); $this->debug("Registered $sId"); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(3, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(4, self::$iEventCalls); EventService::UnRegisterEvent('event1'); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(4, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(5, self::$iEventCalls); } @@ -244,18 +244,18 @@ class EventTest extends ItopTestCase $sId = EventService::Register('event2', array($oReceiver, 'OnEvent1')); $this->debug("Registered $sId"); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(3, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(4, self::$iEventCalls); EventService::UnRegisterAll(); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(4, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(4, self::$iEventCalls); } @@ -271,18 +271,18 @@ class EventTest extends ItopTestCase $sId = EventService::Register('event2', array($oReceiver, 'OnEvent1')); $this->debug("Registered $sId"); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(3, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(4, self::$iEventCalls); EventService::UnRegisterCallback($sIdToRemove); - EventService::FireEvent('event1'); + EventService::FireEvent(new EventData('event1')); $this->assertEquals(6, self::$iEventCalls); - EventService::FireEvent('event2'); + EventService::FireEvent(new EventData('event2')); $this->assertEquals(7, self::$iEventCalls); }