From 320a6b8a1642f3288dae423dd75d440e2e17c5cc Mon Sep 17 00:00:00 2001 From: Stephen Abello Date: Fri, 9 Aug 2019 15:37:52 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B02238=20Portal:=20Track=20in=20object's?= =?UTF-8?q?=20history=20attachments=20addition=20and=20deletion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../portal/src/Form/ObjectFormManager.php | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php index 5e388ca4c..04343af3c 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php @@ -25,6 +25,8 @@ namespace Combodo\iTop\Portal\Form; use AttachmentPlugIn; use AttributeDateTime; use AttributeTagSet; +use CMDBChangeOpAttachmentAdded; +use CMDBChangeOpAttachmentRemoved; use CMDBSource; use Combodo\iTop\Form\Field\Field; use Combodo\iTop\Form\Field\FileUploadField; @@ -1292,6 +1294,7 @@ class ObjectFormManager extends FormManager { $aRemovedAttachmentsIds = (isset($aAttachmentIds['removed_attachments_ids'])) ? $aAttachmentIds['removed_attachments_ids'] : array(); // Not used for now. //$aActualAttachmentsIds = (isset($aAttachmentIds['actual_attachments_ids'])) ? $aAttachmentIds['actual_attachments_ids'] : array(); + $aActions = array(); // Removing attachments from currents if (!empty($aRemovedAttachmentsIds)) @@ -1304,6 +1307,7 @@ class ObjectFormManager extends FormManager if (in_array($oAttachment->GetKey(), $aRemovedAttachmentsIds)) { $oAttachment->DBDelete(); + $aActions[] = self::GetAttachmentActionChangeOp($oAttachment, false); } } } @@ -1325,8 +1329,18 @@ class ObjectFormManager extends FormManager $oAttachment->SetItem($this->oObject); $oAttachment->Set('temp_id', ''); $oAttachment->DBUpdate(); + $aActions[] = self::GetAttachmentActionChangeOp($oAttachment, true); } } + + // Save changes to current object history + // inspired from itop-attachments/main.attachments.php / RecordHistory + foreach ($aActions as $oChangeOp) + { + $oChangeOp->Set("objclass", get_class($this->oObject)); + $oChangeOp->Set("objkey", $this->oObject->GetKey()); + $oChangeOp->DBInsertNoReload(); + } } /** @@ -1351,4 +1365,33 @@ class ObjectFormManager extends FormManager $oAttachment->DBDelete(); } } + + /** + * This is a temporary function until the Attachment refactoring is done. It should be remove once it's done. + * It is inspired from itop-attachments/main.attachments.php / GetActionChangeOp() + * + * @param $oAttachment + * @param bool $bCreate + * + * @return \CMDBChangeOpAttachmentAdded|\CMDBChangeOpAttachmentRemoved + * @throws \CoreException + * @throws \CoreUnexpectedValue + */ + private static function GetAttachmentActionChangeOp($oAttachment, $bCreate = true) + { + $oBlob = $oAttachment->Get('contents'); + $sFileName = $oBlob->GetFileName(); + if ($bCreate) + { + $oChangeOp = new CMDBChangeOpAttachmentAdded(); + $oChangeOp->Set('attachment_id', $oAttachment->GetKey()); + $oChangeOp->Set('filename', $sFileName); + } + else + { + $oChangeOp = new CMDBChangeOpAttachmentRemoved(); + $oChangeOp->Set('filename', $sFileName); + } + return $oChangeOp; + } }