Merge remote-tracking branch 'origin/support/3.1' into develop

This commit is contained in:
Pierre Goiffon
2024-01-05 17:48:42 +01:00
4 changed files with 42 additions and 2 deletions

View File

@@ -5954,6 +5954,16 @@ JS
$this->FireEvent(EVENT_DB_CHECK_TO_DELETE, ['deletion_plan' => $oDeletionPlan]); $this->FireEvent(EVENT_DB_CHECK_TO_DELETE, ['deletion_plan' => $oDeletionPlan]);
} }
/**
* @return void
* @throws \CoreException
* @since 3.1.2
*/
final protected function FireEventAboutToDelete(): void
{
$this->FireEvent(EVENT_DB_ABOUT_TO_DELETE);
}
/** /**
* @return void * @return void
* @throws \CoreException * @throws \CoreException

View File

@@ -270,6 +270,23 @@
</event_datum> </event_datum>
</event_data> </event_data>
</event> </event>
<event id="EVENT_DB_ABOUT_TO_DELETE" _delta="define">
<description>An object is about to be deleted from the database</description>
<sources>
<source id="cmdbAbstractObject">cmdbAbstractObject</source>
</sources>
<replaces>cmdbAbstractObject::OnDelete</replaces>
<event_data>
<event_datum id="object">
<description>The object about to be deleted</description>
<type>DBObject</type>
</event_datum>
<event_datum id="debug_info">
<description>Debug string</description>
<type>string</type>
</event_datum>
</event_data>
</event>
<event id="EVENT_DB_AFTER_DELETE" _delta="define"> <event id="EVENT_DB_AFTER_DELETE" _delta="define">
<description>An object has been deleted into the database</description> <description>An object has been deleted into the database</description>
<sources> <sources>

View File

@@ -4108,6 +4108,8 @@ abstract class DBObject implements iDisplay
return; return;
} }
$this->SetReadOnly("No modification allowed before delete");
$this->FireEventAboutToDelete();
$oKPI = new ExecutionKPI(); $oKPI = new ExecutionKPI();
$this->OnDelete(); $this->OnDelete();
$oKPI->ComputeStatsForExtension($this, 'OnDelete'); $oKPI->ComputeStatsForExtension($this, 'OnDelete');
@@ -6627,6 +6629,14 @@ abstract class DBObject implements iDisplay
{ {
} }
/**
* @return void
* @since 3.1.2
*/
protected function FireEventAboutToDelete(): void
{
}
/** /**
* @return void * @return void
* @since 3.1.0 * @since 3.1.0

View File

@@ -24,6 +24,7 @@ use Server;
use Team; use Team;
use UserRequest; use UserRequest;
use utils; use utils;
use const EVENT_DB_ABOUT_TO_DELETE;
use const EVENT_DB_AFTER_DELETE; use const EVENT_DB_AFTER_DELETE;
use const EVENT_DB_AFTER_WRITE; use const EVENT_DB_AFTER_WRITE;
use const EVENT_DB_BEFORE_WRITE; use const EVENT_DB_BEFORE_WRITE;
@@ -422,9 +423,10 @@ class CRUDEventTest extends ItopDataTestCase
// 1 delete for UserRequest, 3 delete for lnkFunctionalCIToTicket // 1 delete for UserRequest, 3 delete for lnkFunctionalCIToTicket
$this->assertEquals(4, self::$aEventCalls[EVENT_DB_CHECK_TO_DELETE]); $this->assertEquals(4, self::$aEventCalls[EVENT_DB_CHECK_TO_DELETE]);
$this->assertEquals(4, self::$aEventCalls[EVENT_DB_ABOUT_TO_DELETE]);
$this->assertEquals(4, self::$aEventCalls[EVENT_DB_AFTER_DELETE]); $this->assertEquals(4, self::$aEventCalls[EVENT_DB_AFTER_DELETE]);
$this->assertArrayNotHasKey(EVENT_DB_LINKS_CHANGED, self::$aEventCalls, 'no relation with the with_php_compute attribute !'); $this->assertArrayNotHasKey(EVENT_DB_LINKS_CHANGED, self::$aEventCalls, 'Event not to be sent on delete');
$this->assertEquals(8, self::$iEventCalls); $this->assertEquals(12, self::$iEventCalls);
} }
@@ -725,6 +727,7 @@ class CRUDEventReceiver extends ClassesWithDebug
$this->oTestCase->EventService_RegisterListener(EVENT_DB_CHECK_TO_DELETE, [$this, 'OnEvent']); $this->oTestCase->EventService_RegisterListener(EVENT_DB_CHECK_TO_DELETE, [$this, 'OnEvent']);
$this->oTestCase->EventService_RegisterListener(EVENT_DB_BEFORE_WRITE, [$this, 'OnEvent']); $this->oTestCase->EventService_RegisterListener(EVENT_DB_BEFORE_WRITE, [$this, 'OnEvent']);
$this->oTestCase->EventService_RegisterListener(EVENT_DB_AFTER_WRITE, [$this, 'OnEvent']); $this->oTestCase->EventService_RegisterListener(EVENT_DB_AFTER_WRITE, [$this, 'OnEvent']);
$this->oTestCase->EventService_RegisterListener(EVENT_DB_ABOUT_TO_DELETE, [$this, 'OnEvent']);
$this->oTestCase->EventService_RegisterListener(EVENT_DB_AFTER_DELETE, [$this, 'OnEvent']); $this->oTestCase->EventService_RegisterListener(EVENT_DB_AFTER_DELETE, [$this, 'OnEvent']);
$this->oTestCase->EventService_RegisterListener(EVENT_DB_LINKS_CHANGED, [$this, 'OnEvent']); $this->oTestCase->EventService_RegisterListener(EVENT_DB_LINKS_CHANGED, [$this, 'OnEvent']);