diff --git a/application/Espo/Core/SelectManagers/Base.php b/application/Espo/Core/SelectManagers/Base.php index ab107de181..ce541e93fa 100644 --- a/application/Espo/Core/SelectManagers/Base.php +++ b/application/Espo/Core/SelectManagers/Base.php @@ -163,7 +163,7 @@ class Base $desc = $desc === strtolower('desc'); } - if (!empty($sortBy)) { + if ($sortBy) { $result['orderBy'] = $sortBy; $type = $this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortBy, 'type']); if (in_array($type, ['link', 'file', 'image', 'linkOne'])) { @@ -171,13 +171,11 @@ class Base } else if ($type === 'linkParent') { $result['orderBy'] .= 'Type'; } else if ($type === 'address') { - if (!$desc) { - $orderPart = 'ASC'; - } else { - $orderPart = 'DESC'; - } - $result['orderBy'] = [[$sortBy . 'Country', $orderPart], [$sortBy . 'City', $orderPart], [$sortBy . 'Street', $orderPart]]; - return; + $result['orderBy'] = [ + [$sortBy . 'Country', $desc], + [$sortBy . 'City', $desc], + [$sortBy . 'Street', $desc], + ]; } else if ($type === 'enum') { $list = $this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortBy, 'options']); if ($list && is_array($list) && count($list)) { @@ -190,8 +188,7 @@ class Base foreach ($list as $i => $listItem) { $list[$i] = str_replace(',', '_COMMA_', $listItem); } - $result['orderBy'] = 'LIST:' . $sortBy . ':' . implode(',', $list); - return; + $result['orderBy'] = [['LIST:' . $sortBy . ':' . implode(',', $list)]]; } } else { if (strpos($sortBy, '.') === false && strpos($sortBy, ':') === false) { @@ -200,7 +197,22 @@ class Base } } } + + if (!is_array($result['orderBy'])) { + $result['orderBy'] = [[$result['orderBy'], $desc]]; + } + + if ( + $this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortBy, 'orderById']) + && + $this->getSeed()->hasAttribute('id') + ) { + $result['orderBy'][] = ['id', $desc]; + } + + return; } + if (!$desc) { $result['order'] = 'ASC'; } else { diff --git a/tests/unit/Espo/Core/SelectManagers/BaseTest.php b/tests/unit/Espo/Core/SelectManagers/BaseTest.php index 75ca1376fa..efdd372d86 100644 --- a/tests/unit/Espo/Core/SelectManagers/BaseTest.php +++ b/tests/unit/Espo/Core/SelectManagers/BaseTest.php @@ -221,7 +221,7 @@ class BaseTest extends \PHPUnit\Framework\TestCase $this->assertEquals(2, $selectParams['whereClause'][0]['int=']); $this->assertEquals(5, $selectParams['offset']); $this->assertEquals(10, $selectParams['limit']); - $this->assertEquals('name', $selectParams['orderBy']); + $this->assertEquals([['name', false]], $selectParams['orderBy']); $this->assertEquals('2016-10-10', $selectParams['whereClause'][1]['OR'][0]['date=']); $this->assertEquals('2016-10-10 10:10:00', $selectParams['whereClause'][1]['OR'][1]['dateTime>']);