From 9d28e43804e8a767529505a07ea2faf65cfb5338 Mon Sep 17 00:00:00 2001 From: acognet Date: Mon, 16 Aug 2021 09:53:19 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B04232=20-=20Order=20By=20error=20on=20que?= =?UTF-8?q?ry=20with=20two=20classes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/run_query.php | 12 ++--- sources/Controller/AjaxRenderController.php | 4 +- .../DataTable/DataTableUIBlockFactory.php | 44 ++++++++++++------- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/pages/run_query.php b/pages/run_query.php index fecbb91d1..0433a566f 100644 --- a/pages/run_query.php +++ b/pages/run_query.php @@ -217,7 +217,7 @@ EOF $oP->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('UI:RunQuery:QueryResults'), 2)); $oResultBlock = new DisplayBlock($oFilter, 'list', false); - $oResultBlock->Display($oP, 'runquery'); + $oP->AddSubBlock($oResultBlock->GetDisplay($oP, 'runquery')); // Breadcrumb //$iCount = $oResultBlock->GetDisplayedCount(); @@ -235,8 +235,7 @@ EOF } } $sUrl = utils::GetAbsoluteUrlAppRoot().'pages/run_query.php?'.implode('&', $aArgs); - $oP->SetBreadCrumbEntry($sPageId, $sLabel, $oFilter->ToOQL(true), $sUrl, 'fas fa-terminal', - iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES); + $oP->SetBreadCrumbEntry($sPageId, $sLabel, $oFilter->ToOQL(true), $sUrl, 'fas fa-terminal', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES); //--- More info @@ -319,12 +318,7 @@ EOF $sEscapedExpression = utils::EscapeHtml(addslashes($sFixedExpression)); $oUseSuggestedQueryButton = ButtonUIBlockFactory::MakeForDestructiveAction('Use this query'); - $oUseSuggestedQueryButton->SetOnClickJsCode(<<SetOnClickJsCode("let \$oQueryTextarea = $('textarea[name=expression]');\$oQueryTextarea.val('$sEscapedExpression').focus();\$oQueryTextarea.closest('form').submit();"); $oSyntaxErrorPanel->AddSubBlock($oUseSuggestedQueryButton); } else { $oSyntaxErrorPanel->AddSubBlock(HtmlFactory::MakeParagraph($e->getHtmlDesc())); diff --git a/sources/Controller/AjaxRenderController.php b/sources/Controller/AjaxRenderController.php index 98ea043e7..57e138a2e 100644 --- a/sources/Controller/AjaxRenderController.php +++ b/sources/Controller/AjaxRenderController.php @@ -343,8 +343,8 @@ class AjaxRenderController $sIdName = $sAlias."/_key_"; } if ($iSortCol == $iSortIndex) { - if (!MetaModel::HasChildrenClasses($oFilter->GetClass())) { - $aNameSpec = MetaModel::GetNameSpec($oFilter->GetClass()); + if (!MetaModel::HasChildrenClasses($sClassName)) { + $aNameSpec = MetaModel::GetNameSpec($sClassName); if ($aNameSpec[0] == '%1$s') { // The name is made of a single column, let's sort according to the sort algorithm for this column $aOrderBy[$sAlias.'.'.$aNameSpec[1][0]] = ($sSortOrder == 'asc'); diff --git a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php index 8b318b813..728faeee6 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php +++ b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php @@ -574,28 +574,22 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory foreach ($aAuthorizedClasses as $sClassAlias => $sClassName) { 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['sort'] != 'none' && $aSortDatable == []) { + $aSortDatable = [$index, $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;"; - } $sAttLabel = MetaModel::GetName($sClassName); $aColumnDefinition[] = [ - 'description' => $aData['label'], - 'object_class' => $sClassName, - 'class_alias' => $sClassAlias, - 'attribute_code' => $sAttCode, - 'attribute_type' => '_key_', + 'description' => $aData['label'], + 'object_class' => $sClassName, + 'class_alias' => $sClassAlias, + 'attribute_code' => $sAttCode, + 'attribute_type' => '_key_', 'attribute_label' => $sAttLabel, - "render" => "return row['".$sClassAlias."/hyperlink'];", + "render" => "return row['".$sClassAlias."/hyperlink'];", ]; } } else { @@ -825,6 +819,23 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory return $aOptions; } + /** + * @param string $sTitle + * @param array $aColumns + * @param array $aData + * @param string|null $sId + * @param array $aExtraParams + * @param string $sFilter + * @param array $aOptions + * * + * $aColumns =[ + * 'nameField1' => ['label' => labelFIeld1, 'description' => descriptionField1], + * 'nameField2' => ['label' => labelFIeld2, 'description' => descriptionField2], + * 'nameField3' => ['label' => labelFIeld3, 'description' => descriptionField3]]; + * $aData = [['nameField1' => valueField1, 'nameField2' => valueField2, 'nameField3' => valueField3],...] + * + * @return \Combodo\iTop\Application\UI\Base\Layout\UIContentBlock + */ public static function MakeForStaticData(string $sTitle, array $aColumns, array $aData, ?string $sId = null, array $aExtraParams = [], string $sFilter = "", array $aOptions = []) { $oBlock = new UIContentBlock(); @@ -872,6 +883,9 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory return $oTable; } + /** + * @return array + */ public static function GetAllowedParams(): array { return [