N°4048 Fix default sorting on lists when using custom list settings without sort order

This commit is contained in:
Stephen Abello
2021-06-11 10:48:06 +02:00
parent bcfdf76b71
commit be03f3c6de
2 changed files with 21 additions and 4 deletions

View File

@@ -225,10 +225,12 @@ class AjaxRenderController
$iDrawNumber = utils::ReadParam('draw', 1);
$aSort = utils::ReadParam('order', [], false, 'array');
$bForceSort = false;
if (count($aSort) > 0) {
$iSortCol = $aSort[0]["column"];
$sSortOrder = $aSort[0]["dir"];
} else {
} else{
$bForceSort = true;
$iSortCol = 0;
$sSortOrder = "asc";
}
@@ -251,6 +253,15 @@ class AjaxRenderController
if (!isset($aColumns[$sAlias])) {
continue;
}
// It's better to use default class order than asc first column when none specified by the request
if($bForceSort && count(MetaModel::GetOrderByDefault($sClassName)) > 0){
$iSortCol = -1;
$aDefaultOrder = MetaModel::GetOrderByDefault($sClassName);
foreach ($aDefaultOrder as $sAttCode => $bOrder) {
$aOrderBy[$sAlias.'.'.$sAttCode] = $bOrder;
}
}
foreach ($aColumns[$sAlias] as $sAttCode => $aData) {
if ($aData['checked'] == 'true') {
$aColumns[$sAlias][$sAttCode]['checked'] = true;

View File

@@ -288,6 +288,8 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
if (count($oCustomSettings->aColumns) == 0)
{
$oCustomSettings->aColumns = $oDefaultSettings->aColumns;
}
if(count($oCustomSettings->GetSortOrder()) == 0){
$oCustomSettings->aSortOrder = $oDefaultSettings->aSortOrder;
}
@@ -295,8 +297,12 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$aColumnsToLoad = array();
foreach ($oCustomSettings->aColumns as $sAlias => $aColumnsInfo) {
foreach ($aColumnsInfo as $sAttCode => $aData) {
$bForceLoad = false;
if ($aData['sort'] != 'none' || isset($oCustomSettings->aSortOrder[$sAttCode])) {
$bForceLoad = true;
}
if ($sAttCode != '_key_') {
if ($aData['checked']) {
if ($aData['checked'] || $bForceLoad) {
$aColumnsToLoad[$sAlias][] = $sAttCode;
} else {
// See if this column is a must to load
@@ -321,11 +327,11 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
foreach ($oCustomSettings->aColumns[$sClassAlias] as $sAttCode => $aData) {
$sCode = ($aData['code'] == '_key_') ? 'friendlyname' : $aData['code'];
if ($aData['sort'] != 'none') {
$aSortOrder[$sAlias.$sCode] = ($aData['sort'] == 'asc'); // true for ascending, false for descending
$aSortOrder[$sAlias.'.'.$sCode] = ($aData['sort'] == 'asc'); // true for ascending, false for descending
$aSortDatable=[$iIndexColumn,$aData['sort']];
}
elseif (isset($oCustomSettings->aSortOrder[$sAttCode])){
$aSortOrder[$sAlias.$sCode] = $oCustomSettings->aSortOrder[$sAttCode]; // true for ascending, false for descending
$aSortOrder[$sAlias.'.'.$sCode] = $oCustomSettings->aSortOrder[$sAttCode]; // true for ascending, false for descending
}
if ($aData['checked']) {