N°4232 - Order By error on query with two classes

This commit is contained in:
acognet
2021-08-16 09:53:19 +02:00
parent 8e3cc471df
commit 9d28e43804
3 changed files with 34 additions and 26 deletions

View File

@@ -217,7 +217,7 @@ EOF
$oP->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('UI:RunQuery:QueryResults'), 2)); $oP->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('UI:RunQuery:QueryResults'), 2));
$oResultBlock = new DisplayBlock($oFilter, 'list', false); $oResultBlock = new DisplayBlock($oFilter, 'list', false);
$oResultBlock->Display($oP, 'runquery'); $oP->AddSubBlock($oResultBlock->GetDisplay($oP, 'runquery'));
// Breadcrumb // Breadcrumb
//$iCount = $oResultBlock->GetDisplayedCount(); //$iCount = $oResultBlock->GetDisplayedCount();
@@ -235,8 +235,7 @@ EOF
} }
} }
$sUrl = utils::GetAbsoluteUrlAppRoot().'pages/run_query.php?'.implode('&', $aArgs); $sUrl = utils::GetAbsoluteUrlAppRoot().'pages/run_query.php?'.implode('&', $aArgs);
$oP->SetBreadCrumbEntry($sPageId, $sLabel, $oFilter->ToOQL(true), $sUrl, 'fas fa-terminal', $oP->SetBreadCrumbEntry($sPageId, $sLabel, $oFilter->ToOQL(true), $sUrl, 'fas fa-terminal', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES);
iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES);
//--- More info //--- More info
@@ -319,12 +318,7 @@ EOF
$sEscapedExpression = utils::EscapeHtml(addslashes($sFixedExpression)); $sEscapedExpression = utils::EscapeHtml(addslashes($sFixedExpression));
$oUseSuggestedQueryButton = ButtonUIBlockFactory::MakeForDestructiveAction('Use this query'); $oUseSuggestedQueryButton = ButtonUIBlockFactory::MakeForDestructiveAction('Use this query');
$oUseSuggestedQueryButton->SetOnClickJsCode(<<<JS $oUseSuggestedQueryButton->SetOnClickJsCode("let \$oQueryTextarea = $('textarea[name=expression]');\$oQueryTextarea.val('$sEscapedExpression').focus();\$oQueryTextarea.closest('form').submit();");
let \$oQueryTextarea = $('textarea[name=expression]');
\$oQueryTextarea.val('$sEscapedExpression').focus();
\$oQueryTextarea.closest('form').submit();
JS
);
$oSyntaxErrorPanel->AddSubBlock($oUseSuggestedQueryButton); $oSyntaxErrorPanel->AddSubBlock($oUseSuggestedQueryButton);
} else { } else {
$oSyntaxErrorPanel->AddSubBlock(HtmlFactory::MakeParagraph($e->getHtmlDesc())); $oSyntaxErrorPanel->AddSubBlock(HtmlFactory::MakeParagraph($e->getHtmlDesc()));

View File

@@ -343,8 +343,8 @@ class AjaxRenderController
$sIdName = $sAlias."/_key_"; $sIdName = $sAlias."/_key_";
} }
if ($iSortCol == $iSortIndex) { if ($iSortCol == $iSortIndex) {
if (!MetaModel::HasChildrenClasses($oFilter->GetClass())) { if (!MetaModel::HasChildrenClasses($sClassName)) {
$aNameSpec = MetaModel::GetNameSpec($oFilter->GetClass()); $aNameSpec = MetaModel::GetNameSpec($sClassName);
if ($aNameSpec[0] == '%1$s') { if ($aNameSpec[0] == '%1$s') {
// The name is made of a single column, let's sort according to the sort algorithm for this column // 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'); $aOrderBy[$sAlias.'.'.$aNameSpec[1][0]] = ($sSortOrder == 'asc');

View File

@@ -574,28 +574,22 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
foreach ($aAuthorizedClasses as $sClassAlias => $sClassName) { foreach ($aAuthorizedClasses as $sClassAlias => $sClassName) {
if (isset($oCustomSettings->aColumns[$sClassAlias])) { if (isset($oCustomSettings->aColumns[$sClassAlias])) {
foreach ($oCustomSettings->aColumns[$sClassAlias] as $sAttCode => $aData) { foreach ($oCustomSettings->aColumns[$sClassAlias] as $sAttCode => $aData) {
if ($aData['sort'] != 'none') { if ($aData['sort'] != 'none' && $aSortDatable == []) {
$sCode = ($aData['code'] == '_key_') ? 'friendlyname' : $aData['code']; $aSortDatable = [$index, $aData['sort']];
$aSortOrder[$sAlias.$sCode] = ($aData['sort'] == 'asc'); // true for ascending, false for descending
$aSortDatable = [$iIndexColumn, $aData['sort']];
} }
if ($aData['checked']) { if ($aData['checked']) {
if ($sAttCode == '_key_') { if ($sAttCode == '_key_') {
if ($bViewLink) { if ($bViewLink) {
if (MetaModel::IsValidAttCode($sClassName, 'obsolescence_flag')) {
$sRender = "let displayField = '<span class=\"object-ref\" title=\"".$sClassAlias."::'+data+'\"><a class=\'object-ref-link\' href=\'".$oAppRoot."/pages/UI.php?operation=details&class=".$sClassName."&id='+data+'\'>'+row['".$sClassAlias."/friendlyname']+'</a></span>'; if (row['".$sClassAlias."/obsolescence_flag'].indexOf('no') == -1){displayField = '<span class=\"object-ref obsolete\" title=\"obsolete\"><span class=\"object-ref-icon text_decoration\"><span class=\"fas fa-eye-slash object-obsolete fa-1x fa-fw\"></span></span><a class=\'object-ref-link\' href=\'UI.php?operation=details&class=".$sClassName."&id='+data+'\'>'+row['".$sClassAlias."/friendlyname']+'</a></span>';} return displayField;";
} else {
$sRender = "let displayField = '<span class=\"object-ref\" title=\"".$sClassAlias."::'+data+'\"><a class=\'object-ref-link\' href=\'".$oAppRoot."/pages/UI.php?operation=details&class=".$sClassName."&id='+data+'\'>'+row['".$sClassAlias."/friendlyname']+'</a></span>'; return displayField;";
}
$sAttLabel = MetaModel::GetName($sClassName); $sAttLabel = MetaModel::GetName($sClassName);
$aColumnDefinition[] = [ $aColumnDefinition[] = [
'description' => $aData['label'], 'description' => $aData['label'],
'object_class' => $sClassName, 'object_class' => $sClassName,
'class_alias' => $sClassAlias, 'class_alias' => $sClassAlias,
'attribute_code' => $sAttCode, 'attribute_code' => $sAttCode,
'attribute_type' => '_key_', 'attribute_type' => '_key_',
'attribute_label' => $sAttLabel, 'attribute_label' => $sAttLabel,
"render" => "return row['".$sClassAlias."/hyperlink'];", "render" => "return row['".$sClassAlias."/hyperlink'];",
]; ];
} }
} else { } else {
@@ -825,6 +819,23 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
return $aOptions; 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 = []) public static function MakeForStaticData(string $sTitle, array $aColumns, array $aData, ?string $sId = null, array $aExtraParams = [], string $sFilter = "", array $aOptions = [])
{ {
$oBlock = new UIContentBlock(); $oBlock = new UIContentBlock();
@@ -872,6 +883,9 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
return $oTable; return $oTable;
} }
/**
* @return array
*/
public static function GetAllowedParams(): array public static function GetAllowedParams(): array
{ {
return [ return [