N°2163 DB*Tracked methods : modifications after review with Romain

Previous commit : 24eb82d1
Use \CMDBObject::SetTrackInfo
Move \CMDBObject::SetCurrentChange calls at the top most level of the stacks
Restore old behaviors that were removed in previous commit
This commit is contained in:
Pierre Goiffon
2019-11-25 09:41:20 +01:00
parent 2f2d9547b7
commit 0ee77d8c88
13 changed files with 39 additions and 76 deletions

View File

@@ -121,20 +121,14 @@ class UserRightsMatrix extends UserRightsAddOnAPI
public function CreateAdministrator($sAdminUser, $sAdminPwd, $sLanguage = 'EN US')
{
// Maybe we should check that no other user with userid == 0 exists
CMDBObject::SetTrackInfo('Initialization');
$oUser = new UserLocal();
$oUser->Set('login', $sAdminUser);
$oUser->Set('password', $sAdminPwd);
$oUser->Set('contactid', 1); // one is for root !
$oUser->Set('language', $sLanguage); // Language was chosen during the installation
// Create a change to record the history of the User object
/** @var \CMDBChange $oChange */
$oChange = MetaModel::NewObject("CMDBChange");
$oChange->Set("date", time());
$oChange->Set("userinfo", "Initialization");
// Now record the admin user object
$oUser::SetCurrentChange($oChange);
$iUserId = $oUser->DBInsertNoReload();
$this->SetupUser($iUserId, true);
return true;

View File

@@ -4433,7 +4433,7 @@ EOF
*
* @param \WebPage $oP
* @param $sClass
* @param $aObjects
* @param \DBObject[] $aObjects
* @param $bPreview
* @param $sCustomOperation
* @param array $aContextData
@@ -4453,7 +4453,7 @@ EOF
}
else
{
$oObj->DBDelete();
$oObj->DBDelete($oDeletionPlan);
}
}

View File

@@ -786,7 +786,13 @@ class LoginWebPage extends NiceWebPage
$oPerson = null;
try
{
/** @var Person $oPerson */
$sOrigin = 'External User provisioning';
if (isset($_SESSION['login_mode']))
{
$sOrigin .= " ({$_SESSION['login_mode']})";
}
CMDBObject::SetTrackOrigin($sOrigin);
$oPerson = MetaModel::NewObject('Person');
$oPerson->Set('first_name', $sFirstName);
$oPerson->Set('name', $sLastName);
@@ -801,16 +807,6 @@ class LoginWebPage extends NiceWebPage
{
$oPerson->Set($sAttCode, $sValue);
}
/** @var CMDBChange $oMyChange */
$oMyChange = MetaModel::NewObject('CMDBChange');
$oMyChange->Set("date", time());
$sOrigin = 'External User provisioning';
if (isset($_SESSION['login_mode']))
{
$sOrigin .= " ({$_SESSION['login_mode']})";
}
$oMyChange->Set('userinfo', $sOrigin);
$oPerson::SetCurrentChange($oMyChange);
$oPerson->DBInsert();
}
catch (Exception $e)

View File

@@ -654,7 +654,7 @@ class BulkChange
return $aResults;
}
protected function CreateObject(&$aResult, $iRow, $aRowData, CMDBChange $oChange = null)
{
$oTargetObj = MetaModel::NewObject($this->m_sClass);
@@ -731,18 +731,17 @@ class BulkChange
//
if ($oChange)
{
$oTargetObj::SetCurrentChange($oChange);
$newID = $oTargetObj->DBInsert();
$aResult[$iRow]["__STATUS__"] = new RowStatus_NewObj();
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
$aResult[$iRow]["id"] = new CellStatus_Void($newID);
}
else
{
$aResult[$iRow]["__STATUS__"] = new RowStatus_NewObj();
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
$aResult[$iRow]["id"] = new CellStatus_Void(0);
$newID = 0;
}
$aResult[$iRow]["__STATUS__"] = new RowStatus_NewObj();
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
$aResult[$iRow]["id"] = new CellStatus_Void($newID);
return $oTargetObj;
}
@@ -786,7 +785,6 @@ class BulkChange
{
try
{
$oTargetObj::SetCurrentChange($oChange);
$oTargetObj->DBUpdate();
}
catch(CoreException $e)
@@ -852,6 +850,11 @@ class BulkChange
public function Process(CMDBChange $oChange = null)
{
if ($oChange)
{
CMDBObject::SetCurrentChange($oChange);
}
// Note: $oChange can be null, in which case the aim is to check what would be done
// Debug...

View File

@@ -8,6 +8,7 @@
namespace Combodo\iTop\Cas;
use AbstractLoginFSMExtension;
use CMDBObject;
use DBObjectSearch;
use DBObjectSet;
use Dict;
@@ -185,6 +186,7 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
return;
}
CMDBObject::SetTrackInfo('CAS/LDAP Synchro');
$oUser = LoginWebPage::FindUser($sLogin, false);
if ($oUser)
{

View File

@@ -50,21 +50,13 @@ class TicketsInstaller extends ModuleInstallerAPI
public static function AfterDatabaseCreation(Config $oConfiguration, $sPreviousVersion, $sCurrentVersion)
{
// Delete all Triggers corresponding to a no more valid class
CMDBObject::SetTrackInfo('Uninstallation');
$oSearch = new DBObjectSearch('TriggerOnObject');
$oSet = new DBObjectSet($oSearch);
$oChange = null;
while($oTrigger = $oSet->Fetch())
{
if (!MetaModel::IsValidClass($oTrigger->Get('target_class')))
{
if ($oChange == null)
{
// Create the change for its first use
$oChange = new CMDBChange;
$oChange->Set("date", time());
$oChange->Set("userinfo", "Uninstallation");
}
$oTrigger::SetCurrentChange($oChange);
$oTrigger->DBDelete();
}
}

View File

@@ -3001,6 +3001,7 @@ class SynchroExecution
$this->m_oChange->Set('userinfo', $sUserString.' '.Dict::S('Core:SyncDataExchangeComment'));
$this->m_oChange->Set('origin', 'synchro-data-source');
$this->m_oChange->DBInsert();
CMDBObject::SetCurrentChange($oChange);
// Start logging this execution (stats + protection against reentrance)
//
@@ -3377,6 +3378,7 @@ class SynchroExecution
self::$m_oCurrentTask = $this->m_oDataSource;
$this->m_oStatLog = $oLog;
$this->m_oChange = $oChange;
CMDBObject::SetCurrentChange($oChange);
// Prepare internal structures (not the first pass)
$this->PrepareProcessing(false);

View File

@@ -43,9 +43,7 @@ class BenchmarkDataCreation
var $m_oChange;
public function __construct()
{
$this->m_oChange = MetaModel::NewObject("CMDBChange");
$this->m_oChange->Set("date", time());
$this->m_oChange->Set("userinfo", "Benchmark setup");
CMDBObject::SetTrackInfo('Benchmark setup');
}
public function PlanStructure($iPlannedContacts, $iPlannedContracts)
@@ -147,7 +145,6 @@ class BenchmarkDataCreation
$oMyObject->Set($sProp, $value);
}
$oMyObject::SetCurrentChange($this->m_oChange);
$iId = $oMyObject->DBInsertNoReload();
$sClassId = "$sClass ($sClassDesc)";

View File

@@ -434,22 +434,13 @@ abstract class TestBizModel extends TestHandler
}
protected function ObjectToDB($oNew, $bReload = false)
{
if ($oNew instanceof CMDBObject)
if ($bReload)
{
$oChange = $this->GetCurrentChange();
$oNew::SetCurrentChange($oChange);
$oNew->DBWrite();
$iId = $oNew->DBInsert();
}
else
{
if ($bReload)
{
$iId = $oNew->DBInsert();
}
else
{
$iId = $oNew->DBInsertNoReload();
}
$iId = $oNew->DBInsertNoReload();
}
return $iId;
}

View File

@@ -342,12 +342,9 @@ class TestMyBizModel extends TestBizModel
self::DumpVariable($team->ListChanges());
echo "New headcount = {$team->Get("headcount")}</br>\n";
echo "Computed name = {$team->Get("name")}</br>\n";
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$oMyChange->Set("userinfo", "test_setattribute / Made by robot #".rand(1,100));
CMDBObject::SetTrackInfo('test_setattribute / Made by robot #'.rand(1, 100));
//DBSearch::StartDebugQuery();
$team::SetCurrentChange($oMyChange);
$team->DBUpdate();
//DBSearch::StopDebugQuery();
@@ -524,12 +521,8 @@ class TestMyBizModel extends TestBizModel
echo "<h5>New workshops</h5>\n";
$oSetWorkshopsCurr = $oObj->Get("myworkshops");
$this->show_list($oSetWorkshopsCurr);
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$oMyChange->Set("userinfo", "test_linkedset / Made by robot #".rand(1,100));
$iChangeId = $oMyChange->DBInsert();
$oObj::SetCurrentChange($oMyChange);
CMDBObject::SetTrackInfo('test_linkedset / Made by robot #'.rand(1, 100));
$oObj->DBUpdate();
$oObj = MetaModel::GetObject("cmdbContact", 18);

View File

@@ -84,11 +84,8 @@ function CreateTicket($sSenderEmail, $sSubject, $sBody)
$oTicket->Set('workgroup_id', DEFAULT_WORKGROUP_ID); // Same as above...
// Record the change information about the object
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$sUserString = $oContact->GetName().', submitted by email';
$oMyChange->Set("userinfo", $sUserString);
$oTicket::SetCurrentChange($oMyChange);
CMDBObject::SetTrackInfo($sUserString);
$oTicket->DBInsert();
}
else

View File

@@ -172,9 +172,7 @@ class BasicServices extends WebServicesBase
try
{
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$oMyChange->Set("userinfo", "Administrator");
CMDBObject::SetTrackInfo('Administrator');
$oNewTicket = MetaModel::NewObject($sClass);
$this->MyObjectSetScalar('title', 'title', $sTitle, $oNewTicket, $oRes);
@@ -230,7 +228,7 @@ class BasicServices extends WebServicesBase
$this->MyObjectSetScalar('impact', 'impact', $sImpact, $oNewTicket, $oRes);
$this->MyObjectSetScalar('urgency', 'urgency', $sUrgency, $oNewTicket, $oRes);
$this->MyObjectInsert($oNewTicket, 'created', $oMyChange, $oRes);
$this->MyObjectInsert($oNewTicket, 'created', $oRes);
}
catch (CoreException $e)
{

View File

@@ -519,7 +519,6 @@ abstract class WebServicesBase
/**
* @param \CMDBObject $oTargetObj
* @param string $sResultLabel
* @param \CMDBChange $oChange
* @param \WebServiceResult $oRes
*
* @throws \ArchivedObjectException
@@ -531,14 +530,13 @@ abstract class WebServicesBase
* @throws \OQLException
* @throws \SecurityException
*/
protected function MyObjectInsert($oTargetObj, $sResultLabel, $oChange, &$oRes)
protected function MyObjectInsert($oTargetObj, $sResultLabel, &$oRes)
{
if ($oRes->IsOk())
{
list($bRes, $aIssues) = $oTargetObj->CheckToWrite();
if ($bRes)
{
$oTargetObj::SetCurrentChange($oChange);
$iId = $oTargetObj->DBInsertNoReload();
$oRes->LogInfo("Created object ".get_class($oTargetObj)."::$iId");
$oRes->AddResultObject($sResultLabel, $oTargetObj);