From 5ccd229092ac1b70e9140cfefc360ac1740be678 Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 4 Mar 2021 15:37:13 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B03648=20-=20Fix=20"Configure=20this=20lis?= =?UTF-8?q?t..."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/dataTables.settings.js | 16 ++-- sources/Controller/AjaxRenderController.php | 12 ++- .../UI/Base/Component/DataTable/DataTable.php | 3 +- .../Component/DataTable/DataTableSettings.php | 35 ++++----- .../DataTable/DataTableUIBlockFactory.php | 74 +++++++++++-------- 5 files changed, 80 insertions(+), 60 deletions(-) diff --git a/js/dataTables.settings.js b/js/dataTables.settings.js index d946a36f8..5e0c07b84 100644 --- a/js/dataTables.settings.js +++ b/js/dataTables.settings.js @@ -74,22 +74,20 @@ $(function() $.post(this.options.sRenderUrl, oParams, function(data) { // Nasty workaround to clear the pager's state for paginated lists !!! // See jquery.tablesorter.pager.js / saveParams / restoreParams - if (window.pager_params) - { + if (window.pager_params) { window.pager_params['pager'+me.options.sListId] = undefined; } - // try { - var parentElt = $('#'+me.options.sListId).parent().parent(); + var parentElt = $('#'+me.options.sListId).closest('.dataTables_wrapper').parent(); $('#'+me.options.sListId).DataTable().destroy(true); - var sThead=""; - if(me.options.sSelectMode !=""){ + var sThead = ""; + if (me.options.sSelectMode != "") { sThead += ""; } var aOptions = JSON.parse(data); - $.each(aOptions['allColumns'], function(i, item) { - $.each(item, function(j, champs) { - if(champs.checked == 'true') { + $.each(aOptions['allColumns'], function (i, item) { + $.each(item, function (j, champs) { + if (champs.checked == 'true') { sThead += ""+champs.label+""; } }); diff --git a/sources/Controller/AjaxRenderController.php b/sources/Controller/AjaxRenderController.php index ea46805f8..5aa06ce4c 100644 --- a/sources/Controller/AjaxRenderController.php +++ b/sources/Controller/AjaxRenderController.php @@ -167,6 +167,12 @@ class AjaxRenderController } } } + if (!isset($aExtraParams['list_id'])) { + $sListId = utils::ReadParam('list_id', null); + if (!is_null($sListId)) { + $aExtraParams['list_id'] = $sListId; + } + } $iLength = utils::ReadParam('end', 10); $aColumns = utils::ReadParam('columns', array(), false, 'raw_data'); $sSelectMode = utils::ReadParam('select_mode', ''); @@ -318,7 +324,9 @@ class AjaxRenderController if ($sIdName != "") { $aObj["id"] = $aObj[$sIdName]; } - array_push($aResult["data"], $aObj); + if (isset($aObj)) { + array_push($aResult["data"], $aObj); + } } return $aResult; @@ -350,7 +358,7 @@ class AjaxRenderController if ($bSaveAsDefaults) { if ($sTableId != null) { - $oCurrSettings = unserialize(DataTableSettings::GetTableSettings($aClassAliases, $sTableId, true /* bOnlyTable */)); + $oCurrSettings = DataTableSettings::GetTableSettings($aClassAliases, $sTableId, true /* bOnlyTable */); if ($oCurrSettings) { $oCurrSettings->ResetToDefault(false); // Reset this table to the defaults } diff --git a/sources/application/UI/Base/Component/DataTable/DataTable.php b/sources/application/UI/Base/Component/DataTable/DataTable.php index 41968f29f..dd3986455 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTable.php +++ b/sources/application/UI/Base/Component/DataTable/DataTable.php @@ -51,7 +51,8 @@ class DataTable extends UIContentBlock public function __construct(?string $sId = null) { parent::__construct($sId); - $this->AddDeferredBlock(new DataTableConfig($this)); + //$this->AddDeferredBlock(new DataTableConfig($this)); + $this->AddSubBlock(new DataTableConfig($this)); $this->aDisplayColumns = []; $this->aOptions = []; $this->aResultColumns = []; diff --git a/sources/application/UI/Base/Component/DataTable/DataTableSettings.php b/sources/application/UI/Base/Component/DataTable/DataTableSettings.php index 9f224b059..b94eee9e4 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTableSettings.php +++ b/sources/application/UI/Base/Component/DataTable/DataTableSettings.php @@ -196,26 +196,27 @@ class DataTableSettings implements Serializable */ static public function GetTableSettings($aClassAliases, $sTableId = null, $bOnlyOnTable = false) { - $pref = null; - $oSettings = new DataTableSettings($aClassAliases, $sTableId); + $pref = null; + $oSettings = new DataTableSettings($aClassAliases, $sTableId); - if ($sTableId != null) { - // An identified table, let's fetch its own settings (if any) - $pref = appUserPreferences::GetPref($oSettings->GetPrefsKey($sTableId), null); - } + if ($sTableId != null) { + // An identified table, let's fetch its own settings (if any) + $pref = appUserPreferences::GetPref($oSettings->GetPrefsKey($sTableId), null); + } - if ($pref == null) { - if (!$bOnlyOnTable) { - // Try the global preferred values for this class / set of classes - $pref = appUserPreferences::GetPref($oSettings->GetPrefsKey(null), null); - } - if ($pref == null) { - // no such settings, use the default values provided by the data model - return null; - } - } + if ($pref == null) { + if (!$bOnlyOnTable) { + // Try the global preferred values for this class / set of classes + $pref = appUserPreferences::GetPref($oSettings->GetPrefsKey(null), null); + } + if ($pref == null) { + // no such settings, use the default values provided by the data model + return null; + } + } + $oSettings->unserialize($pref); - return $oSettings; + return $oSettings; } /** diff --git a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php index c4bf0df75..d7594c938 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php +++ b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php @@ -165,7 +165,7 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory $oDataTable = new DataTable('datatable_'.$sListId); $oAppRoot = utils::GetAbsoluteUrlAppRoot(); - + // Initialize and check the parameters $bViewLink = isset($aExtraParams['view_link']) ? $aExtraParams['view_link'] : true; $sLinkageAttribute = isset($aExtraParams['link_attr']) ? $aExtraParams['link_attr'] : ''; @@ -433,7 +433,7 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory $oDataTable = new DataTable('datatable_'.$sListId); $aList = array(); $oAppRoot = utils::GetAbsoluteUrlAppRoot(); - + // Initialize and check the parameters $bViewLink = isset($aExtraParams['view_link']) ? $aExtraParams['view_link'] : true; // Check if there is a list of aliases to limit the display to... @@ -551,40 +551,47 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory } $aSortDatable = []; foreach ($aAuthorizedClasses as $sClassAlias => $sClassName) { - foreach ($oCustomSettings->aColumns[$sClassAlias] as $sAttCode => $aData) { - if ($aData['sort'] != 'none') { - $sCode = ($aData['code'] == '_key_') ? 'friendlyname' : $aData['code']; - $aSortOrder[$sAlias.$sCode] = ($aData['sort'] == 'asc'); // true for ascending, false for descending - $aSortDatable = [$iIndexColumn, $aData['sort']]; - } - if ($aData['checked']) { - if ($sAttCode == '_key_') { - if ($bViewLink) { + if (isset($oCustomSettings->aColumns[$sClassAlias])) { + foreach ($oCustomSettings->aColumns[$sClassAlias] as $sAttCode => $aData) { + if ($aData['sort'] != 'none') { + $sCode = ($aData['code'] == '_key_') ? 'friendlyname' : $aData['code']; + $aSortOrder[$sAlias.$sCode] = ($aData['sort'] == 'asc'); // true for ascending, false for descending + $aSortDatable = [$iIndexColumn, $aData['sort']]; + } + if ($aData['checked']) { + if ($sAttCode == '_key_') { + if ($bViewLink) { + if (MetaModel::IsValidAttCode($sClassName, 'obsolescence_flag')) { + $sRender = "let displayField = ''+row['".$sClassAlias."/friendlyname']+''; if (row['".$sClassAlias."/obsolescence_flag'].indexOf('no') == -1){displayField = ''+row['".$sClassAlias."/friendlyname']+'';} return displayField;"; + } else { + $sRender = "let displayField = ''+row['".$sClassAlias."/friendlyname']+''; return displayField;"; + } + $aColumnDefinition[] = [ + 'description' => $aData['label'], + 'object_class' => $sClassName, + 'class_alias' => $sClassAlias, + 'attribute_code' => $sAttCode, + 'attribute_type' => '_key_', + 'attribute_label' => $aData['alias'], + "render" => $sRender, + ]; + } + } else { + $oAttDef = MetaModel::GetAttributeDef($sClassName, $sAttCode); + $sAttDefClass = get_class($oAttDef); + $sAttLabel = MetaModel::GetLabel($sClassName, $sAttCode); $aColumnDefinition[] = [ - 'description' => $aData['label'], + 'description' => $oAttDef->GetOrderByHint(), 'object_class' => $sClassName, 'class_alias' => $sClassAlias, 'attribute_code' => $sAttCode, - 'attribute_type' => '_key_', - 'attribute_label' => $aData['alias'], - "render" => "let displayField = ''+row['".$sClassAlias."/friendlyname']+''; if (row['".$sClassAlias."/obsolescence_flag'].indexOf('no') == -1){displayField = ''+row['".$sClassAlias."/friendlyname']+'';} return displayField;", + 'attribute_type' => $sAttDefClass, + 'attribute_label' => $sAttLabel, + "render" => $oAttDef->GetRenderForDataTable($sClassAlias), ]; } - } else { - $oAttDef = MetaModel::GetAttributeDef($sClassName, $sAttCode); - $sAttDefClass = get_class($oAttDef); - $sAttLabel = MetaModel::GetLabel($sClassName, $sAttCode); - $aColumnDefinition[] = [ - 'description' => $oAttDef->GetOrderByHint(), - 'object_class' => $sClassName, - 'class_alias' => $sClassAlias, - 'attribute_code' => $sAttCode, - 'attribute_type' => $sAttDefClass, - 'attribute_label' => $sAttLabel, - "render" => $oAttDef->GetRenderForDataTable($sClassAlias), - ]; + $iIndexColumn++; } - $iIndexColumn++; } } } @@ -645,7 +652,7 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory public static function GetOptionsForRendering(array $aColumns, string $sSelectMode, string $sFilter, int $iLength, array $aClassAliases, array $aExtraParams) { $oAppRoot = utils::GetAbsoluteUrlAppRoot(); - + $aOptions = []; $sTableId = $aExtraParams["table_id"]; $sListId = $aExtraParams["list_id"]; @@ -695,8 +702,13 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory 'attribute_label' => $aData['alias'], ]; $aColumnDefinition["data"] = $sClassAlias."/".$sAttCode; + if (MetaModel::IsValidAttCode($sClassName, 'obsolescence_flag')) { + $sDisplay = "let displayField = ''+row['".$sClassAlias."/friendlyname']+''; if (row['".$sClassAlias."/obsolescence_flag'].indexOf('no') == -1){displayField = ''+row['".$sClassAlias."/friendlyname']+'';} return displayField;"; + } else { + $sDisplay = "let displayField = ''+row['".$sClassAlias."/friendlyname']+''; return displayField;"; + } $aColumnDefinition["render"] = [ - "display" => "let displayField = ''+row['".$sClassAlias."/friendlyname']+''; if (row['".$sClassAlias."/obsolescence_flag'].indexOf('no') == -1){displayField = ''+row['".$sClassAlias."/friendlyname']+'';} return displayField;", + "display" => $sDisplay, "_" => $sClassAlias."/".$sAttCode, ]; } else {