Pārlūkot izejas kodu

Enhancement: better display of the "Attachments" (addition/removal) in the history.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3760 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 9 gadi atpakaļ
vecāks
revīzija
2c61920b11
1 mainītis faili ar 119 papildinājumiem un 12 dzēšanām
  1. 119 12
      datamodels/2.x/itop-attachments/main.attachments.php

+ 119 - 12
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('<fieldset>');
@@ -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', '<span class="attachment-history-added attachment"><a '.$sPreview.' target="_blank" href="'.$oDoc->GetDownloadURL($sTargetObjectClass, $iTargetObjectKey, 'contents').'">'.$sFilename.'</a></span>');
+		}
+		else
+		{
+			$sResult = Dict::Format('Attachments:History_File_Added', '<span class="attachment-history-deleted">'.$sFilename.'</span>');
+		}
+		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', '<span class="attachment-history-deleted">'.htmlentities($this->Get('filename'), ENT_QUOTES, 'UTF-8').'</span>');
+		return $sResult;
+	}
+}
+