浏览代码

Fixed regressions with DBObjectSet, impacting the new paginated lists and their menus

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1302 a333f486-631f-4898-b8df-5754b55c2be0
romainq 14 年之前
父节点
当前提交
de639176ca
共有 1 个文件被更改,包括 12 次插入7 次删除
  1. 12 7
      core/dbobjectset.class.php

+ 12 - 7
core/dbobjectset.class.php

@@ -32,7 +32,7 @@
 class DBObjectSet
 {
 	private $m_oFilter;
-	private $m_aAddedIds; // Ids of objects added
+	private $m_aAddedIds; // Ids of objects added (discrete lists)
 	private $m_aOrderBy;
 	public $m_bLoaded;
 	private $m_aData;
@@ -275,8 +275,9 @@ class DBObjectSet
 		}
 		else
 		{
-			$oFilter = $this->m_oFilter;
-			$oIdListExpr = ListExpression::FromScalars($this->m_aAddedIds);
+			$oFilter = clone $this->m_oFilter;
+
+			$oIdListExpr = ListExpression::FromScalars(array_keys($this->m_aAddedIds));
 			$oIdExpr = new FieldExpression('id', $oFilter->GetClassAlias());
 			$oIdInList = new BinaryExpression($oIdExpr, 'IN', $oIdListExpr);
 			$oFilter->MergeConditionExpression($oIdInList);
@@ -351,9 +352,10 @@ class DBObjectSet
 				{
 					$oObject = MetaModel::GetObjectByRow($sClass, $aRow, $sClassAlias, $this->m_aAttToLoad, $this->m_aExtendedDataSpec);
 				}
+
 				$aObjects[$sClassAlias] = $oObject;
 			}
-			$this->AddObjectExtended($aObjects);
+			$this->AddObjectExtended($aObjects, true /* internal load */);
 		}
 		CMDBSource::FreeResult($resQuery);
 	}
@@ -444,11 +446,11 @@ class DBObjectSet
 		if (!is_null($oObject))
 		{
 			$this->m_aId2Row[$sClassAlias][$oObject->GetKey()] = $iNextPos;
-			$this->m_aAddedIds[] = $oObject->GetKey();
+			$this->m_aAddedIds[$oObject->GetKey()] = true;
 		}
 	}
 
-	protected function AddObjectExtended($aObjectArray)
+	protected function AddObjectExtended($aObjectArray, $bInternalLoad = false)
 	{
 		if (!$this->m_bLoaded) $this->Load();
 
@@ -460,7 +462,10 @@ class DBObjectSet
 			if (!is_null($oObject))
 			{
 				$this->m_aId2Row[$sClassAlias][$oObject->GetKey()] = $iNextPos;
-				$this->m_aAddedIds[] = $oObject->GetKey();
+				if (!$bInternalLoad)
+				{
+					$this->m_aAddedIds[$oObject->GetKey()] = true;
+				}
 			}
 		}
 	}