mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
Preserve the initial sort order on lists by determining the default sort order of the tables based on the equivalence between the "friendlyname" and another actual field of the class.
SVN:trunk[3774]
This commit is contained in:
@@ -748,6 +748,12 @@ class DataTableSettings implements Serializable
|
||||
{
|
||||
$sSort = $aSortOrder['friendlyname'] ? 'asc' : 'desc';
|
||||
}
|
||||
$sNormalizedFName = MetaModel::NormalizeFieldSpec($sClass, 'friendlyname');
|
||||
if(array_key_exists($sNormalizedFName, $aSortOrder))
|
||||
{
|
||||
$sSort = $aSortOrder[$sNormalizedFName] ? 'asc' : 'desc';
|
||||
}
|
||||
|
||||
$aColumns[$sAlias]['_key_'] = $oSettings->GetFieldData($sAlias, '_key_', null, true /* bChecked */, $sSort);
|
||||
}
|
||||
foreach($aList as $sAttCode)
|
||||
|
||||
@@ -4920,6 +4920,62 @@ abstract class MetaModel
|
||||
apc_delete($sAPCKey);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a field spec, get the most relevant (unique) representation
|
||||
* Examples for a user request:
|
||||
* - friendlyname => ref
|
||||
* - org_name => org_id->name
|
||||
* - org_id_friendlyname => org_id=>name
|
||||
* - caller_name => caller_id->name
|
||||
* - caller_id_friendlyname => caller_id->friendlyname
|
||||
* @param string $sClass
|
||||
* @param string $sField
|
||||
* @return string
|
||||
*/
|
||||
public static function NormalizeFieldSpec($sClass, $sField)
|
||||
{
|
||||
$sRet = $sField;
|
||||
|
||||
if ($sField == 'id')
|
||||
{
|
||||
$sRet = 'id';
|
||||
}
|
||||
elseif ($sField == 'friendlyname')
|
||||
{
|
||||
$sFriendlyNameAttCode = static::GetFriendlyNameAttributeCode($sClass);
|
||||
if (!is_null($sFriendlyNameAttCode))
|
||||
{
|
||||
// The friendly name is made of a single attribute
|
||||
$sRet = $sFriendlyNameAttCode;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$oAttDef = static::GetAttributeDef($sClass, $sField);
|
||||
if ($oAttDef instanceof AttributeFriendlyName)
|
||||
{
|
||||
$oKeyAttDef = MetaModel::GetAttributeDef($sClass, $oAttDef->GetKeyAttCode());
|
||||
$sRemoteClass = $oKeyAttDef->GetTargetClass();
|
||||
$sFriendlyNameAttCode = static::GetFriendlyNameAttributeCode($sRemoteClass);
|
||||
if (is_null($sFriendlyNameAttCode))
|
||||
{
|
||||
// The friendly name is made of several attributes
|
||||
$sRet = $oAttDef->GetKeyAttCode().'->friendlyname';
|
||||
}
|
||||
else
|
||||
{
|
||||
// The friendly name is made of a single attribute
|
||||
$sRet = $oAttDef->GetKeyAttCode().'->'.$sFriendlyNameAttCode;
|
||||
}
|
||||
}
|
||||
elseif ($oAttDef->IsExternalField())
|
||||
{
|
||||
$sRet = $oAttDef->GetKeyAttCode().'->'.$oAttDef->GetExtAttCode();
|
||||
}
|
||||
}
|
||||
return $sRet;
|
||||
}
|
||||
} // class MetaModel
|
||||
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ abstract class TabularBulkExport extends BulkExport
|
||||
$sClass = reset($aAliases);
|
||||
}
|
||||
$sMostRelevantField = $this->SuggestField($sClass, $sAttCode);
|
||||
$sAttCodeEx = $this->NormalizeFieldSpec($sClass, $sMostRelevantField);
|
||||
$sAttCodeEx = MetaModel::NormalizeFieldSpec($sClass, $sMostRelevantField);
|
||||
// Remove the aliases (if any) from the field names to make them compatible
|
||||
// with the 'short' notation used in this case by the widget
|
||||
if (count($aAliases) > 1)
|
||||
@@ -90,59 +90,6 @@ abstract class TabularBulkExport extends BulkExport
|
||||
return $sAttCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a field spec, get the most relevant (unique) representation
|
||||
* Examples for a user request:
|
||||
* - friendlyname => ref
|
||||
* - org_name => org_id->name
|
||||
* - org_id_friendlyname => org_id=>name
|
||||
* - caller_name => caller_id->name
|
||||
* - caller_id_friendlyname => caller_id->friendlyname
|
||||
*/
|
||||
protected function NormalizeFieldSpec($sClass, $sField)
|
||||
{
|
||||
$sRet = $sField;
|
||||
|
||||
if ($sField == 'id')
|
||||
{
|
||||
$sRet = 'id';
|
||||
}
|
||||
elseif ($sField == 'friendlyname')
|
||||
{
|
||||
$sFriendlyNameAttCode = MetaModel::GetFriendlyNameAttributeCode($sClass);
|
||||
if (!is_null($sFriendlyNameAttCode))
|
||||
{
|
||||
// The friendly name is made of a single attribute
|
||||
$sRet = $sFriendlyNameAttCode;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sField);
|
||||
if ($oAttDef instanceof AttributeFriendlyName)
|
||||
{
|
||||
$oKeyAttDef = MetaModel::GetAttributeDef($sClass, $oAttDef->GetKeyAttCode());
|
||||
$sRemoteClass = $oKeyAttDef->GetTargetClass();
|
||||
$sFriendlyNameAttCode = MetaModel::GetFriendlyNameAttributeCode($sRemoteClass);
|
||||
if (is_null($sFriendlyNameAttCode))
|
||||
{
|
||||
// The friendly name is made of several attributes
|
||||
$sRet = $oAttDef->GetKeyAttCode().'->friendlyname';
|
||||
}
|
||||
else
|
||||
{
|
||||
// The friendly name is made of a single attribute
|
||||
$sRet = $oAttDef->GetKeyAttCode().'->'.$sFriendlyNameAttCode;
|
||||
}
|
||||
}
|
||||
elseif ($oAttDef->IsExternalField())
|
||||
{
|
||||
$sRet = $oAttDef->GetKeyAttCode().'->'.$oAttDef->GetExtAttCode();
|
||||
}
|
||||
}
|
||||
return $sRet;
|
||||
}
|
||||
|
||||
protected function IsSubAttribute($sClass, $sAttCode, $oAttDef)
|
||||
{
|
||||
return (($oAttDef instanceof AttributeFriendlyName) || ($oAttDef instanceof AttributeExternalField) || ($oAttDef instanceof AttributeSubItem));
|
||||
|
||||
Reference in New Issue
Block a user