From f46bc47bbad1ba85e27995e61df978ff20a03e9b Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 8 Apr 2022 12:55:11 +0300 Subject: [PATCH] select user own first --- .../OrderItemConverters/UserNameOwnFirst.php | 66 +++++++++++++++++++ application/Espo/Core/Select/Order/Item.php | 6 ++ .../Resources/metadata/clientDefs/User.json | 3 + .../Resources/metadata/selectDefs/User.json | 3 + client/src/views/modals/select-records.js | 10 ++- 5 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 application/Espo/Classes/Select/User/OrderItemConverters/UserNameOwnFirst.php diff --git a/application/Espo/Classes/Select/User/OrderItemConverters/UserNameOwnFirst.php b/application/Espo/Classes/Select/User/OrderItemConverters/UserNameOwnFirst.php new file mode 100644 index 0000000000..cb63ef70cc --- /dev/null +++ b/application/Espo/Classes/Select/User/OrderItemConverters/UserNameOwnFirst.php @@ -0,0 +1,66 @@ +user = $user; + } + + public function convert(Item $item): OrderList + { + return OrderList::create([ + Order + ::create( + Expr::notEqual( + Expr::column('id'), + $this->user->getId() + ) + ) + ->withDirection($item->getOrder()), + Order + ::create(Expr::column('userName')) + ->withDirection($item->getOrder()), + ]); + } +} diff --git a/application/Espo/Core/Select/Order/Item.php b/application/Espo/Core/Select/Order/Item.php index 8477763a41..07b806874d 100644 --- a/application/Espo/Core/Select/Order/Item.php +++ b/application/Espo/Core/Select/Order/Item.php @@ -80,12 +80,18 @@ class Item return $object; } + /** + * Get an order-by field. + */ public function getOrderBy(): ?string { /** @var ?string */ return $this->orderBy; } + /** + * Get a direction of order. + */ public function getOrder(): ?string { /** @var ?string */ diff --git a/application/Espo/Resources/metadata/clientDefs/User.json b/application/Espo/Resources/metadata/clientDefs/User.json index 8fb4b85f8e..7d2218fac1 100644 --- a/application/Espo/Resources/metadata/clientDefs/User.json +++ b/application/Espo/Resources/metadata/clientDefs/User.json @@ -120,5 +120,8 @@ "selectDefaultFilters": { "filter": "active" }, + "selectRecords": { + "orderBy": "userNameOwnFirst" + }, "iconClass": "fas fa-user-circle" } diff --git a/application/Espo/Resources/metadata/selectDefs/User.json b/application/Espo/Resources/metadata/selectDefs/User.json index a4291b1f59..3cc262c7ef 100644 --- a/application/Espo/Resources/metadata/selectDefs/User.json +++ b/application/Espo/Resources/metadata/selectDefs/User.json @@ -18,5 +18,8 @@ }, "boolFilterClassNameMap": { "onlyMyTeam": "Espo\\Classes\\Select\\User\\BoolFilters\\OnlyMyTeam" + }, + "orderItemConverterClassNameMap": { + "userNameOwnFirst": "Espo\\Classes\\Select\\User\\OrderItemConverters\\UserNameOwnFirst" } } diff --git a/client/src/views/modals/select-records.js b/client/src/views/modals/select-records.js index 947c5163d3..df0a9181f8 100644 --- a/client/src/views/modals/select-records.js +++ b/client/src/views/modals/select-records.js @@ -118,6 +118,14 @@ define('views/modals/select-records', ['views/modal', 'search-manager'], functio this.scope = this.entityType = this.options.scope || this.scope; + let customDefaultOrderBy = this.getMetadata().get(['clientDefs', this.scope, 'selectRecords', 'orderBy']); + let customDefaultOrder = this.getMetadata().get(['clientDefs', this.scope, 'selectRecords', 'order']); + + if (customDefaultOrderBy) { + this.defaultOrderBy = customDefaultOrderBy; + this.defaultOrder = customDefaultOrder || false; + } + if (this.noCreateScopeList.indexOf(this.scope) !== -1) { this.createButton = false; } @@ -151,7 +159,7 @@ define('views/modals/select-records', ['views/modal', 'search-manager'], functio this.collection = collection; if (this.defaultOrderBy) { - this.collection.setOrder(this.defaultOrderBy, this.defaultOrder || false, true); + this.collection.setOrder(this.defaultOrderBy, this.defaultOrder || 'asc', true); } this.loadSearch();