浏览代码

Core API: added DBSearch:SetSelectedClasses

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3815 a333f486-631f-4898-b8df-5754b55c2be0
romainq 9 年之前
父节点
当前提交
5f0de18ba6
共有 3 个文件被更改,包括 53 次插入1 次删除
  1. 17 1
      core/dbobjectsearch.class.php
  2. 12 0
      core/dbsearch.class.php
  3. 24 0
      core/dbunionsearch.class.php

+ 17 - 1
core/dbobjectsearch.class.php

@@ -155,6 +155,22 @@ class DBObjectSearch extends DBSearch
 		return $this->m_aSelectedClasses;
 	}
 
+	/**
+	 * @param array $aSelectedClasses array of aliases
+	 * @throws CoreException
+	 */
+	public function SetSelectedClasses($aSelectedClasses)
+	{
+		$this->m_aSelectedClasses = array();
+		foreach ($aSelectedClasses as $sAlias)
+		{
+			if (!array_key_exists($sAlias, $this->m_aClasses))
+			{
+				throw new CoreException("Invalid class alias $sAlias");
+			}
+			$this->m_aSelectedClasses[$sAlias] = $this->m_aClasses[$sAlias];
+		}
+	}
 
 	public function SetModifierProperty($sPluginClass, $sProperty, $value)
 	{
@@ -565,7 +581,7 @@ class DBObjectSearch extends DBSearch
 		// NO: $oFilter = $oFilter->DeepClone();
 		// See also: Trac #639, and self::AddCondition_PointingTo()
 		$aAliasTranslation = array();
-		$res = $this->AddCondition_ReferencedBy_InNameSpace(DBObjectSearch, $sForeignExtKeyAttCode, $this->m_aClasses, $aAliasTranslation);
+		$res = $this->AddCondition_ReferencedBy_InNameSpace($oFilter, $sForeignExtKeyAttCode, $this->m_aClasses, $aAliasTranslation);
 		$this->TransferConditionExpression($oFilter, $aAliasTranslation);
 		return $res;
 	}

+ 12 - 0
core/dbsearch.class.php

@@ -91,6 +91,12 @@ abstract class DBSearch
 	abstract public function ChangeClass($sNewClass, $sAlias = null);
 	abstract public function GetSelectedClasses();
 
+	/**
+	 * @param array $aSelectedClasses array of aliases
+	 * @throws CoreException
+	 */
+	abstract public function SetSelectedClasses($aSelectedClasses);
+
 	abstract public function IsAny();
 
 	public function Describe(){return 'deprecated - use ToOQL() instead';}
@@ -162,6 +168,12 @@ abstract class DBSearch
 		return $oRes;
 	}
 
+	/**
+	 * @param string $sQuery
+	 * @param array $aParams
+	 * @return DBSearch
+	 * @throws OQLException
+	 */
 	static public function FromOQL($sQuery, $aParams = null)
 	{
 		if (empty($sQuery)) return null;

+ 24 - 0
core/dbunionsearch.class.php

@@ -52,6 +52,14 @@ class DBUnionSearch extends DBSearch
 			}
 		}
 
+		$this->ComputeSelectedClasses();
+	}
+
+	/**
+	 * Find the lowest common ancestor for each of the selected class
+	 */
+	protected function ComputeSelectedClasses()
+	{
 		// 1 - Collect all the column/classes
 		$aColumnToClasses = array();
 		foreach ($this->aSearches as $iPos => $oSearch)
@@ -163,6 +171,22 @@ class DBUnionSearch extends DBSearch
 		return $this->aSelectedClasses;
 	}
 
+	/**
+	 * @param array $aSelectedClasses array of aliases
+	 * @throws CoreException
+	 */
+	public function SetSelectedClasses($aSelectedClasses)
+	{
+		// 1 - change for each search
+		foreach ($this->aSearches as $oSearch)
+		{
+			// Throws an exception if not valid
+			$oSearch->SetSelectedClasses($aSelectedClasses);
+		}
+		// 2 - update the lowest common ancestors
+		$this->ComputeSelectedClasses();
+	}
+
 	public function IsAny()
 	{
 		$bIsAny = true;