diff --git a/datamodels/2.x/itop-attachments/main.attachments.php b/datamodels/2.x/itop-attachments/main.attachments.php index d609d9105d..36a02d479f 100755 --- a/datamodels/2.x/itop-attachments/main.attachments.php +++ b/datamodels/2.x/itop-attachments/main.attachments.php @@ -229,6 +229,10 @@ class AttachmentPlugIn implements iApplicationUIExtension, iApplicationObjectExt -webkit-box-shadow:inset 0 0 10px 2px #1C94C4; box-shadow:inset 0 0 10px 2px #1C94C4; } +#history .attachment-history-added { + padding: 0; + float: none; +} EOF ); $oPage->add('
'); @@ -440,7 +444,7 @@ EOF if (in_array($oAttachment->GetKey(), $aRemovedAttachmentIds)) { $oAttachment->DBDelete(); - $aActions[] = self::GetActionDescription($oAttachment, false /* false => deletion */); + $aActions[] = self::GetActionChangeOp($oAttachment, false /* false => deletion */); } } @@ -466,7 +470,7 @@ EOF $oAttachment->Set('temp_id', ''); $oAttachment->DBUpdate(); // temporary attachment confirmed, list it in the history - $aActions[] = self::GetActionDescription($oAttachment, true /* true => creation */); + $aActions[] = self::GetActionChangeOp($oAttachment, true /* true => creation */); } } } @@ -481,9 +485,9 @@ EOF $oChange->Set("userinfo", $sUserString); $iChangeId = $oChange->DBInsert(); } - foreach($aActions as $sActionDescription) + foreach($aActions as $oChangeOp) { - self::RecordHistory($oChange, $oObject, $sActionDescription); + self::RecordHistory($oChange, $oObject, $oChangeOp); } self::$m_bIsModified = true; } @@ -567,31 +571,134 @@ EOF } ///////////////////////////////////////////////////////////////////////// - private static function RecordHistory(CMDBChange $oChange, $oTargetObject, $sDescription) + private static function RecordHistory(CMDBChange $oChange, $oTargetObject, $oMyChangeOp) { - $oMyChangeOp = MetaModel::NewObject("CMDBChangeOpPlugin"); $oMyChangeOp->Set("change", $oChange->GetKey()); $oMyChangeOp->Set("objclass", get_class($oTargetObject)); $oMyChangeOp->Set("objkey", $oTargetObject->GetKey()); - $oMyChangeOp->Set("description", $sDescription); $iId = $oMyChangeOp->DBInsertNoReload(); } ///////////////////////////////////////////////////////////////////////// - private static function GetActionDescription($oAttachment, $bCreate = true) + private static function GetActionChangeOp($oAttachment, $bCreate = true) { $oBlob = $oAttachment->Get('contents'); $sFileName = $oBlob->GetFileName(); if ($bCreate) { - $sDescription = Dict::Format('Attachments:History_File_Added', $sFileName); + $oChangeOp = new CMDBChangeOpAttachmentAdded(); + $oChangeOp->Set('attachment_class', 'Attachment'); + $oChangeOp->Set('attachment_key', $oAttachment->GetKey()); + $oChangeOp->Set('filename', $sFileName); } else { - $sDescription = Dict::Format('Attachments:History_File_Removed', $sFileName); + $oChangeOp = new CMDBChangeOpAttachmentRemoved(); + $oChangeOp->Set('filename', $sFileName); } - return $sDescription; + return $oChangeOp; } } -?> +/** + * Record the modification of a caselog (text) + * since the caselog itself stores the history + * of its entries, there is no need to duplicate + * the text here + * + * @package iTopORM + */ +class CMDBChangeOpAttachmentAdded extends CMDBChangeOp +{ + public static function Init() + { + $aParams = array + ( + "category" => "core/cmdb", + "key_type" => "", + "name_attcode" => "change", + "state_attcode" => "", + "reconc_keys" => array(), + "db_table" => "priv_changeop_attachment_added", + "db_key_field" => "id", + "db_finalclass_field" => "", + ); + MetaModel::Init_Params($aParams); + MetaModel::Init_InheritAttributes(); + MetaModel::Init_AddAttribute(new AttributeString("attachment_class", array("allowed_values"=>null, "sql"=>"attachment_class", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array()))); + MetaModel::Init_AddAttribute(new AttributeObjectKey("attachment_key", array("allowed_values"=>null, "class_attcode"=>"attachment_class", "sql"=>"attachment_key", "is_null_allowed"=>false, "depends_on"=>array()))); + MetaModel::Init_AddAttribute(new AttributeString("filename", array("allowed_values"=>null, "sql"=>"filename", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array()))); + + // Display lists + MetaModel::Init_SetZListItems('details', array('attachment_class', 'attachment_key')); // Attributes to be displayed for the complete details + MetaModel::Init_SetZListItems('list', array('attachment_class', 'attachment_key')); // Attributes to be displayed for a list + } + + /** + * Describe (as a text string) the modifications corresponding to this change + */ + public function GetDescription() + { + // Temporary, until we change the options of GetDescription() -needs a more global revision + $bIsHtml = true; + + $sResult = ''; + $sTargetObjectClass = $this->Get('attachment_class'); + $iTargetObjectKey = $this->Get('attachment_key'); + $sFilename = htmlentities($this->Get('filename'), ENT_QUOTES, 'UTF-8'); + $oTargetSearch = new DBObjectSearch($sTargetObjectClass); + $oTargetSearch->AddCondition('id', $iTargetObjectKey, '='); + + $oMonoObjectSet = new DBObjectSet($oTargetSearch); + if ($oMonoObjectSet->Count() > 0) + { + $oAttachment = $oMonoObjectSet->Fetch(); + $oDoc = $oAttachment->Get('contents'); + $sPreview = $oDoc->IsPreviewAvailable() ? 'data-preview="true"' : ''; + $sResult = Dict::Format('Attachments:History_File_Added', ''.$sFilename.''); + } + else + { + $sResult = Dict::Format('Attachments:History_File_Added', ''.$sFilename.''); + } + return $sResult; + } +} + +class CMDBChangeOpAttachmentRemoved extends CMDBChangeOp +{ + public static function Init() + { + $aParams = array + ( + "category" => "core/cmdb", + "key_type" => "", + "name_attcode" => "change", + "state_attcode" => "", + "reconc_keys" => array(), + "db_table" => "priv_changeop_attachment_removed", + "db_key_field" => "id", + "db_finalclass_field" => "", + ); + MetaModel::Init_Params($aParams); + MetaModel::Init_InheritAttributes(); + MetaModel::Init_AddAttribute(new AttributeString("filename", array("allowed_values"=>null, "sql"=>"filename", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array()))); + + // Display lists + MetaModel::Init_SetZListItems('details', array('filename')); // Attributes to be displayed for the complete details + MetaModel::Init_SetZListItems('list', array('filename')); // Attributes to be displayed for a list + } + + /** + * Describe (as a text string) the modifications corresponding to this change + */ + public function GetDescription() + { + // Temporary, until we change the options of GetDescription() -needs a more global revision + $bIsHtml = true; + + $sResult = Dict::Format('Attachments:History_File_Removed', ''.htmlentities($this->Get('filename'), ENT_QUOTES, 'UTF-8').''); + return $sResult; + } +} +