Explorar o código

#653 Document notes and FAQ: when data is longer than 64Kb, then at each modification of the text, an error is displayed and the change is not visible in the history tab (but data correctly saved).

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@2574 a333f486-631f-4898-b8df-5754b55c2be0
romainq %!s(int64=12) %!d(string=hai) anos
pai
achega
158b4cc920
Modificáronse 2 ficheiros con 80 adicións e 0 borrados
  1. 65 0
      core/cmdbchangeop.class.inc.php
  2. 15 0
      core/cmdbobject.class.inc.php

+ 65 - 0
core/cmdbchangeop.class.inc.php

@@ -493,6 +493,71 @@ class CMDBChangeOpSetAttributeText extends CMDBChangeOpSetAttribute
 }
 
 /**
+ * Record the modification of a multiline string (text)
+ *
+ * @package     iTopORM
+ */
+class CMDBChangeOpSetAttributeLongText extends CMDBChangeOpSetAttribute
+{
+	public static function Init()
+	{
+		$aParams = array
+		(
+			"category" => "core/cmdb",
+			"key_type" => "",
+			"name_attcode" => "change",
+			"state_attcode" => "",
+			"reconc_keys" => array(),
+			"db_table" => "priv_changeop_setatt_longtext",
+			"db_key_field" => "id",
+			"db_finalclass_field" => "",
+		);
+		MetaModel::Init_Params($aParams);
+		MetaModel::Init_InheritAttributes();
+		MetaModel::Init_AddAttribute(new AttributeLongText("prevdata", array("allowed_values"=>null, "sql"=>"prevdata", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+
+		// Display lists
+		MetaModel::Init_SetZListItems('details', array('date', 'userinfo', 'attcode')); // Attributes to be displayed for the complete details
+		MetaModel::Init_SetZListItems('list', array('date', 'userinfo', 'attcode')); // 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 = '';
+		$oTargetObjectClass = $this->Get('objclass');
+		$oTargetObjectKey = $this->Get('objkey');
+		$oTargetSearch = new DBObjectSearch($oTargetObjectClass);
+		$oTargetSearch->AddCondition('id', $oTargetObjectKey, '=');
+
+		$oMonoObjectSet = new DBObjectSet($oTargetSearch);
+		if (UserRights::IsActionAllowedOnAttribute($this->Get('objclass'), $this->Get('attcode'), UR_ACTION_READ, $oMonoObjectSet) == UR_ALLOWED_YES)
+		{
+			if (MetaModel::IsValidAttCode($this->Get('objclass'), $this->Get('attcode')))
+			{
+				$oAttDef = MetaModel::GetAttributeDef($this->Get('objclass'), $this->Get('attcode'));
+				$sAttName = $oAttDef->GetLabel();
+			}
+			else
+			{
+				// The attribute was renamed or removed from the object ?
+				$sAttName = $this->Get('attcode');
+			}
+			$sTextView = '<div>'.$this->GetAsHtml('prevdata').'</div>';
+
+			//$sDocView = $oPrevDoc->GetDisplayInline(get_class($this), $this->GetKey(), 'prevdata');
+			$sResult = Dict::Format('Change:AttName_Changed_PreviousValue_OldValue', $sAttName, $sTextView);
+		}
+		return $sResult;
+	}
+}
+
+/**
  * Record the modification of a caselog (text)
  * since the caselog itself stores the history
  * of its entries, there is no need to duplicate

+ 15 - 0
core/cmdbobject.class.inc.php

@@ -282,6 +282,21 @@ abstract class CMDBObject extends DBObject
 				$oMyChangeOp->Set("lastentry", $value->GetLatestEntryIndex());
 				$iId = $oMyChangeOp->DBInsertNoReload();
 			}
+			elseif ($oAttDef instanceOf AttributeLongText)
+			{
+				// Data blobs
+				$oMyChangeOp = MetaModel::NewObject("CMDBChangeOpSetAttributeLongText");
+				$oMyChangeOp->Set("objclass", get_class($this));
+				$oMyChangeOp->Set("objkey", $this->GetKey());
+				$oMyChangeOp->Set("attcode", $sAttCode);
+
+				if (!is_null($original) && ($original instanceof ormCaseLog))
+				{
+					$original = $original->GetText();
+				}
+				$oMyChangeOp->Set("prevdata", $original);
+				$iId = $oMyChangeOp->DBInsertNoReload();
+			}
 			elseif ($oAttDef instanceOf AttributeText)
 			{
 				// Data blobs