From 573d810d374f06bcf212d91b86a4804b42441bd5 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Thu, 6 Jun 2024 20:58:51 +0300 Subject: [PATCH 01/12] color changes --- frontend/less/espo/value-variables.less | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/less/espo/value-variables.less b/frontend/less/espo/value-variables.less index aa16d7bc5d..c86991f7e3 100644 --- a/frontend/less/espo/value-variables.less +++ b/frontend/less/espo/value-variables.less @@ -60,14 +60,14 @@ @navbar-link-icon-color-value: @gray-dark-value; @navbar-inverse-color-value: #d2d5da; -@navbar-inverse-bg-value: #677a99; +@navbar-inverse-bg-value: #5d759e; @navbar-inverse-border-value: @default-border-color-value; @navbar-inverse-link-color-value: #fff; @navbar-inverse-link-hover-color-value: #fff; -@navbar-inverse-link-hover-bg-value: #62728d; +@navbar-inverse-link-hover-bg-value: #596e93; @navbar-inverse-link-disabled-color-value: #444; @navbar-inverse-link-disabled-bg-value: transparent; -@navbar-inverse-link-active-bg-value: #54647f; +@navbar-inverse-link-active-bg-value: #4a6086; @navbar-inverse-link-icon-color-value: @navbar-inverse-link-color-value; @navbar-inverse-link-icon-hover-color-value: @navbar-inverse-link-icon-color-value; From 268009e5f6def27488a1949937f359eadd73fd15 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 7 Jun 2024 14:35:06 +0300 Subject: [PATCH 02/12] 8.2.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 109b1aac10..2329123a63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "espocrm", - "version": "8.2.4", + "version": "8.2.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "espocrm", - "version": "8.2.4", + "version": "8.2.5", "hasInstallScript": true, "license": "AGPL-3.0-or-later", "dependencies": { diff --git a/package.json b/package.json index 3964459671..9abc9904ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "espocrm", - "version": "8.2.4", + "version": "8.2.5", "description": "Open-source CRM.", "repository": { "type": "git", From 071fb20f7b2f207bfdce79436877065969ad75c9 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 09:51:16 +0300 Subject: [PATCH 03/12] email insert data load additional fields --- application/Espo/Tools/EmailTemplate/InsertField/Service.php | 1 + 1 file changed, 1 insertion(+) diff --git a/application/Espo/Tools/EmailTemplate/InsertField/Service.php b/application/Espo/Tools/EmailTemplate/InsertField/Service.php index 6cc514c4ca..35ea108865 100644 --- a/application/Espo/Tools/EmailTemplate/InsertField/Service.php +++ b/application/Espo/Tools/EmailTemplate/InsertField/Service.php @@ -116,6 +116,7 @@ class Service $recordService = $this->recordServiceContainer->get($entityType); + $recordService->loadAdditionalFields($e); $recordService->prepareEntityForOutput($e); $ignoreTypeList = [ From 4923984e2d65d5b6af3ceb4308b727696e9a6c8c Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 11:48:53 +0300 Subject: [PATCH 04/12] cleanup --- application/Espo/ORM/BaseEntity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/Espo/ORM/BaseEntity.php b/application/Espo/ORM/BaseEntity.php index 01d9c803cf..6e218b20d5 100644 --- a/application/Espo/ORM/BaseEntity.php +++ b/application/Espo/ORM/BaseEntity.php @@ -86,7 +86,7 @@ class BaseEntity implements Entity $this->entityType = $entityType; $this->entityManager = $entityManager; - $this->attributes = $defs['attributes'] /*?? $defs['fields']*/ ?? $this->attributes; + $this->attributes = $defs['attributes'] ?? $this->attributes; $this->relations = $defs['relations'] ?? $this->relations; if ($valueAccessorFactory) { From b92970992fa51d2fd8f0968ebc716a4e1a5dfefc Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 11:50:46 +0300 Subject: [PATCH 05/12] ref --- application/Espo/ORM/BaseEntity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/Espo/ORM/BaseEntity.php b/application/Espo/ORM/BaseEntity.php index 6e218b20d5..357c698470 100644 --- a/application/Espo/ORM/BaseEntity.php +++ b/application/Espo/ORM/BaseEntity.php @@ -337,7 +337,7 @@ class BaseEntity implements Entity $value = $this->fetchedValuesContainer[$attribute] ?? null; if ($value === null) { - return $value; + return null; } $type = $this->getAttributeType($attribute); From 4f6ae321b965ef791d579c1968d7c44fd770585b Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 12:13:37 +0300 Subject: [PATCH 06/12] schema --- schema/metadata/clientDefs.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/schema/metadata/clientDefs.json b/schema/metadata/clientDefs.json index f76dcce8d2..81ebf13772 100644 --- a/schema/metadata/clientDefs.json +++ b/schema/metadata/clientDefs.json @@ -70,6 +70,16 @@ "type": "string" } }, + "listViewModeList": { + "type": "array", + "items": { + "anyOf": [ + {"type": "string"}, + {"enum": ["__APPEND__", "list", "kanban"]} + ] + }, + "description": "A list view mode list." + }, "saveErrorHandlers": { "description": "Save error handlers. https://docs.espocrm.com/development/frontend/save-error-handlers/", "type": "object", From c7465970bd0678c1a7ac5737cce6c9bb2f084938 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 12:21:00 +0300 Subject: [PATCH 07/12] viewModeIconClassMap --- client/src/views/record/search.js | 5 +++++ schema/metadata/clientDefs.json | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/client/src/views/record/search.js b/client/src/views/record/search.js index 5b87042c58..c3dd5fb24f 100644 --- a/client/src/views/record/search.js +++ b/client/src/views/record/search.js @@ -112,6 +112,11 @@ class SearchView extends View { this.filtersLayoutName = this.options.filtersLayoutName || this.filtersLayoutName; this.primaryFiltersDisabled = this.options.primaryFiltersDisabled || this.primaryFiltersDisabled; + this.viewModeIconClassMap = { + ...this.viewModeIconClassMap, + ...this.getMetadata().get(`clientDefs.${this.scope}.viewModeIconClassMap`), + }; + /** @type {module:search-manager} */ this.searchManager = this.options.searchManager; diff --git a/schema/metadata/clientDefs.json b/schema/metadata/clientDefs.json index 81ebf13772..020e223375 100644 --- a/schema/metadata/clientDefs.json +++ b/schema/metadata/clientDefs.json @@ -80,6 +80,13 @@ }, "description": "A list view mode list." }, + "viewModeIconClassMap": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "View mode icon classes. mode => class map." + }, "saveErrorHandlers": { "description": "Save error handlers. https://docs.espocrm.com/development/frontend/save-error-handlers/", "type": "object", From afb77424d4b41b53ddd1a040be02c786ca445cfe Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 16:09:03 +0300 Subject: [PATCH 08/12] array field: guard null item --- client/src/views/fields/array.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/views/fields/array.js b/client/src/views/fields/array.js index a8e813d93d..ff19338bbc 100644 --- a/client/src/views/fields/array.js +++ b/client/src/views/fields/array.js @@ -120,7 +120,7 @@ class ArrayFieldView extends BaseFieldView { const itemHtmlList = []; (this.selected || []).forEach(value => { - itemHtmlList.push(this.getItemHtml(value)); + itemHtmlList.push(this.getItemHtml(value || '')); }); // noinspection JSValidateTypes From 6cee542972bc4938a19033c728bf13900cbe294e Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 8 Jun 2024 21:16:11 +0300 Subject: [PATCH 09/12] change todo --- application/Espo/ORM/BaseEntity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/Espo/ORM/BaseEntity.php b/application/Espo/ORM/BaseEntity.php index 357c698470..95993bdccd 100644 --- a/application/Espo/ORM/BaseEntity.php +++ b/application/Espo/ORM/BaseEntity.php @@ -247,7 +247,7 @@ class BaseEntity implements Entity ); } - // @todo Remove support in v9.0. + // @todo Remove support in v10.0. if ($this->hasRelation($attribute) && $this->id && $this->entityManager) { trigger_error( "Accessing related records with Entity::get is deprecated. " . From d3288724798fa99300653cb5ff4836bfb10a7b7c Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sun, 9 Jun 2024 18:28:57 +0300 Subject: [PATCH 10/12] ref --- ...link-multiple-with-columns-with-primary.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/client/src/views/fields/link-multiple-with-columns-with-primary.js b/client/src/views/fields/link-multiple-with-columns-with-primary.js index ee3a8f4a2c..c9680c0bbf 100644 --- a/client/src/views/fields/link-multiple-with-columns-with-primary.js +++ b/client/src/views/fields/link-multiple-with-columns-with-primary.js @@ -41,7 +41,7 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn primaryLink getAttributeList() { - let list = super.getAttributeList(); + const list = super.getAttributeList(); list.push(this.primaryIdAttribute); list.push(this.primaryNameAttribute); @@ -58,8 +58,8 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn super.setup(); this.events['click [data-action="switchPrimary"]'] = e => { - let $target = $(e.currentTarget); - let id = $target.data('id'); + const $target = $(e.currentTarget); + const id = $target.data('id'); LinkMultipleWithPrimaryFieldView.prototype.switchPrimary.call(this, id); }; @@ -96,7 +96,7 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn getValueForDisplay() { if (this.isDetailMode() || this.isListMode()) { - let itemList = []; + const itemList = []; if (this.primaryId) { itemList.push( @@ -147,15 +147,15 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn return LinkMultipleWithPrimaryFieldView.prototype.addLinkHtml.call(this, id, name); } - let $el = super.addLinkHtml(id, name); + const $el = super.addLinkHtml(id, name); - let isPrimary = (id === this.primaryId); + const isPrimary = (id === this.primaryId); - let $star = $('') + const $star = $('') .addClass('fas fa-star fa-sm') - .addClass(!isPrimary ? 'text-muted' : '') + .addClass(!isPrimary ? 'text-muted' : ''); - let $button = $('