Переглянути джерело

Protects against temporary objects that exist only in memory (id < 0)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@2202 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 12 роки тому
батько
коміт
e15dd738ae
1 змінених файлів з 11 додано та 3 видалено
  1. 11 3
      core/dbobject.class.php

+ 11 - 3
core/dbobject.class.php

@@ -451,7 +451,7 @@ abstract class DBObject
 					//
 					$sExtKeyAttCode = $oAttDef->GetKeyAttCode();
 	
-					if ($iRemote = $this->Get($sExtKeyAttCode))
+					if (($iRemote = $this->Get($sExtKeyAttCode)) && ($iRemote > 0)) // Objects in memory have negative IDs
 					{
 						$oExtKeyAttDef = MetaModel::GetAttributeDef(get_class($this), $sExtKeyAttCode);
 						$oRemote = MetaModel::GetObject($oExtKeyAttDef->GetTargetClass(), $iRemote);
@@ -558,8 +558,16 @@ abstract class DBObject
 			//return $this->Get($sAttCode.'_friendlyname');
 			$sTargetClass = $oAtt->GetTargetClass(EXTKEY_ABSOLUTE);
 			$iTargetKey = $this->Get($sAttCode);
-			$sLabel = $this->Get($sAttCode.'_friendlyname');
-			return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sLabel);
+			if ($iTargetKey < 0)
+			{
+				// the key points to an object that exists only in memory... no hyperlink points to it yet
+				return '';
+			}
+			else
+			{
+				$sLabel = $this->Get($sAttCode.'_friendlyname');
+				return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sLabel);
+			}
 		}
 
 		// That's a standard attribute (might be an ext field or a direct field, etc.)