From be03f3c6dec77de481b28ed69bfd3698f4ea9e13 Mon Sep 17 00:00:00 2001 From: Stephen Abello Date: Fri, 11 Jun 2021 10:48:06 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B04048=20Fix=20default=20sorting=20on=20li?= =?UTF-8?q?sts=20when=20using=20custom=20list=20settings=20without=20sort?= =?UTF-8?q?=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sources/Controller/AjaxRenderController.php | 13 ++++++++++++- .../Component/DataTable/DataTableUIBlockFactory.php | 12 +++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/sources/Controller/AjaxRenderController.php b/sources/Controller/AjaxRenderController.php index 17da63b85..2995e329e 100644 --- a/sources/Controller/AjaxRenderController.php +++ b/sources/Controller/AjaxRenderController.php @@ -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; diff --git a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php index 76b1c568d..8b5f1ab4c 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php +++ b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php @@ -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']) {