浏览代码

Internal: reworked default ordering (added DBObjectSet::GetRealSortOrder)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1927 a333f486-631f-4898-b8df-5754b55c2be0
romainq 13 年之前
父节点
当前提交
f811b41943
共有 2 个文件被更改,包括 34 次插入27 次删除
  1. 17 3
      core/dbobjectset.class.php
  2. 17 24
      core/metamodel.class.php

+ 17 - 3
core/dbobjectset.class.php

@@ -321,6 +321,20 @@ class DBObjectSet
 		return $this->m_iLimitStart;
 		return $this->m_iLimitStart;
 	}
 	}
 
 
+	public function GetRealSortOrder()
+	{
+		// Get the class default sort order if not specified with the API
+		//
+		if (empty($this->m_aOrderBy))
+		{
+			return MetaModel::GetOrderByDefault($this->m_oFilter->GetClass());
+		}
+		else
+		{
+			return $this->m_aOrderBy;
+		}
+	}
+
 	public function Load()
 	public function Load()
 	{
 	{
 		if ($this->m_bLoaded) return;
 		if ($this->m_bLoaded) return;
@@ -329,11 +343,11 @@ class DBObjectSet
 
 
 		if ($this->m_iLimitCount > 0)
 		if ($this->m_iLimitCount > 0)
 		{
 		{
-			$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, $this->m_aAttToLoad, $this->m_aExtendedDataSpec, $this->m_iLimitCount, $this->m_iLimitStart);
+			$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->GetRealSortOrder(), $this->m_aArgs, $this->m_aAttToLoad, $this->m_aExtendedDataSpec, $this->m_iLimitCount, $this->m_iLimitStart);
 		}
 		}
 		else
 		else
 		{
 		{
-			$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, $this->m_aAttToLoad, $this->m_aExtendedDataSpec);
+			$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->GetRealSortOrder(), $this->m_aArgs, $this->m_aAttToLoad, $this->m_aExtendedDataSpec);
 		}
 		}
 		$resQuery = CMDBSource::Query($sSQL);
 		$resQuery = CMDBSource::Query($sSQL);
 		if (!$resQuery) return;
 		if (!$resQuery) return;
@@ -370,7 +384,7 @@ class DBObjectSet
 		{
 		{
 			if (is_null($this->m_iCount))
 			if (is_null($this->m_iCount))
 			{
 			{
-				$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, null, null, 0, 0, true);
+				$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, array(), $this->m_aArgs, null, null, 0, 0, true);
 				$resQuery = CMDBSource::Query($sSQL);
 				$resQuery = CMDBSource::Query($sSQL);
 				if (!$resQuery) return 0;
 				if (!$resQuery) return 0;
 		
 		

+ 17 - 24
core/metamodel.class.php

@@ -494,11 +494,26 @@ abstract class MetaModel
 		self::_check_subclass($sClass);	
 		self::_check_subclass($sClass);	
 		return array_key_exists("display_template", self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["display_template"]: '';
 		return array_key_exists("display_template", self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["display_template"]: '';
 	}
 	}
-	final static public function GetOrderByDefault($sClass)
+
+	final static public function GetOrderByDefault($sClass, $bOnlyDeclared = false)
 	{
 	{
 		self::_check_subclass($sClass);	
 		self::_check_subclass($sClass);	
-		return array_key_exists("order_by_default", self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["order_by_default"]: array();
+		$aOrderBy = array_key_exists("order_by_default", self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["order_by_default"]: array();
+		if ($bOnlyDeclared)
+		{
+			// Used to reverse engineer the declaration of the data model
+			return $aOrderBy;
+		}
+		else
+		{
+			if (count($aOrderBy) == 0)
+			{
+				$aOrderBy['friendlyname'] = true;
+			}
+			return $aOrderBy;
+		}
 	}
 	}
+
 	final static public function GetAttributeOrigin($sClass, $sAttCode)
 	final static public function GetAttributeOrigin($sClass, $sAttCode)
 	{
 	{
 		self::_check_subclass($sClass);
 		self::_check_subclass($sClass);
@@ -2014,12 +2029,6 @@ abstract class MetaModel
 			}
 			}
 		}
 		}
 
 
-		// Get the class default sort order if not specified with the API
-		//
-		if (empty($aOrderBy))
-		{
-			$aOrderBy = self::GetOrderByDefault($oFilter->GetClass());
-		}
 		// Check the order by specification, and prefix with the class alias
 		// Check the order by specification, and prefix with the class alias
 		// and make sure that the ordering columns are going to be selected
 		// and make sure that the ordering columns are going to be selected
 		//
 		//
@@ -2054,22 +2063,6 @@ abstract class MetaModel
 				$aAttToLoad[$sFirstClassAlias][$sFieldAlias] = MetaModel::GetAttributeDef($oFilter->GetFirstJoinedClass(), $sFieldAlias);
 				$aAttToLoad[$sFirstClassAlias][$sFieldAlias] = MetaModel::GetAttributeDef($oFilter->GetFirstJoinedClass(), $sFieldAlias);
 			}			
 			}			
 		}
 		}
-		// At least, force the name attribute to be the ordering key
-		//
-		if (empty($aOrderSpec))
-		{
-			foreach ($oFilter->GetSelectedClasses() as $sSelectedAlias => $sSelectedClass)
-			{
-				// By default, simply order on the "friendlyname" attribute, ascending
-				$aOrderSpec['`'.$sSelectedAlias."friendlyname`"] = true;
-
-				// Make sure that the columns used for sorting are present in the loaded columns
-				if (!is_null($aAttToLoad) && !isset($aAttToLoad[$sSelectedAlias]["friendlyname"]))
-				{
-					$aAttToLoad[$sSelectedAlias]["friendlyname"] = MetaModel::GetAttributeDef($sSelectedClass, "friendlyname");
-				}			
-			}
-		}
 
 
 		if (!isset($oSelect))
 		if (!isset($oSelect))
 		{
 		{