瀏覽代碼

#702 Ignoring the class when looking up for a polymorphic ext key

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@2681 a333f486-631f-4898-b8df-5754b55c2be0
romainq 12 年之前
父節點
當前提交
82b2e16742
共有 2 個文件被更改,包括 23 次插入0 次删除
  1. 4 0
      application/ui.extkeywidget.class.inc.php
  2. 19 0
      core/dbobjectsearch.class.php

+ 4 - 0
application/ui.extkeywidget.class.inc.php

@@ -355,6 +355,10 @@ EOF
 		}
 		
 		$oFilter = DBObjectSearch::FromOQL($sFilter);
+		if (strlen($sRemoteClass) > 0)
+		{
+			$oFilter->ChangeClass($sRemoteClass);
+		}
 		$oFilter->SetModifierProperty('UserRightsGetSelectFilter', 'bSearchMode', $this->bSearchMode);
 		$oBlock = new DisplayBlock($oFilter, 'list', false, array('query_params' => array('this' => $oObj)));
 		$oBlock->Display($oP, $this->iId.'_results', array('this' => $oObj, 'cssCount'=> '#count_'.$this->iId, 'menu' => false, 'selection_mode' => true, 'selection_type' => 'single', 'table_id' => 'select_'.$this->sAttCode)); // Don't display the 'Actions' menu on the results

+ 19 - 0
core/dbobjectsearch.class.php

@@ -118,6 +118,25 @@ class DBObjectSearch
 		return key($this->m_aClasses);
 	}
 
+	/**
+	 * Change the class (only subclasses are supported as of now, because the conditions must fit the new class)
+	 * Defaults to the first selected class (most of the time it is also the first joined class	 
+	 */	 	
+	public function ChangeClass($sNewClass, $sAlias = null)
+	{
+		if (is_null($sAlias))
+		{
+			$sAlias = $this->GetClassAlias();
+		}
+		$sCurrClass = $this->GetClassName($sAlias);
+		if (!MetaModel::IsParentClass($sCurrClass, $sNewClass))
+		{
+			throw new Exception("Could not change the search class from '$sCurrClass' to '$sNewClass'. Only child classes are permitted.");
+		}
+		$this->m_aSelectedClasses[$sAlias] = $sNewClass;
+		$this->m_aClasses[$sAlias] = $sNewClass;
+	}
+
 	public function SetSelectedClasses($aNewSet)
 	{
 		$this->m_aSelectedClasses = array();