From 9467171c84d9f07b241cdec0da4e05138a97e21e Mon Sep 17 00:00:00 2001 From: yuri Date: Fri, 9 Mar 2018 16:37:40 +0200 Subject: [PATCH] fix entity manager labels --- .../Espo/Controllers/EntityManager.php | 4 +- application/Espo/Core/Utils/EntityManager.php | 40 +++++++++++----- .../entity-manager/modals/edit-entity.js | 16 ++++++- .../views/admin/link-manager/modals/edit.js | 48 ++++++++++++------- 4 files changed, 76 insertions(+), 32 deletions(-) diff --git a/application/Espo/Controllers/EntityManager.php b/application/Espo/Controllers/EntityManager.php index c186a7da50..532a62816e 100644 --- a/application/Espo/Controllers/EntityManager.php +++ b/application/Espo/Controllers/EntityManager.php @@ -245,7 +245,9 @@ class EntityManager extends \Espo\Core\Controllers\Base $params = array(); foreach ($paramList as $item) { - $params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING); + if (array_key_exists($item, $data)) { + $params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING); + } } foreach ($additionalParamList as $item) { diff --git a/application/Espo/Core/Utils/EntityManager.php b/application/Espo/Core/Utils/EntityManager.php index f24d917288..e555fd6685 100644 --- a/application/Espo/Core/Utils/EntityManager.php +++ b/application/Espo/Core/Utils/EntityManager.php @@ -743,9 +743,6 @@ class EntityManager $entityForeign = $params['entityForeign']; $linkForeign = $params['linkForeign']; - $label = $params['label']; - $labelForeign = $params['labelForeign']; - if (empty($entity) || empty($entityForeign)) { throw new Error(); } @@ -839,24 +836,41 @@ class EntityManager } } - $this->getLanguage()->set($entity, 'fields', $link, $label); - $this->getLanguage()->set($entity, 'links', $link, $label); - $this->getLanguage()->set($entityForeign, 'fields', $linkForeign, $labelForeign); - $this->getLanguage()->set($entityForeign, 'links', $linkForeign, $labelForeign); + $label = null; + if (isset($params['label'])) { + $label = $params['label']; + } + $labelForeign = null; + if (isset($params['labelForeign'])) { + $labelForeign = $params['labelForeign']; + } + + if ($label) { + $this->getLanguage()->set($entity, 'fields', $link, $label); + $this->getLanguage()->set($entity, 'links', $link, $label); + } + + if ($labelForeign) { + $this->getLanguage()->set($entityForeign, 'fields', $linkForeign, $labelForeign); + $this->getLanguage()->set($entityForeign, 'links', $linkForeign, $labelForeign); + } + $this->getLanguage()->save(); if ($isCustom) { if ($this->getBaseLanguage()->getLanguage() !== $this->getBaseLanguage()->getLanguage()) { - $this->getBaseLanguage()->set($entity, 'fields', $link, $label); - $this->getBaseLanguage()->set($entity, 'links', $link, $label); - $this->getBaseLanguage()->set($entityForeign, 'fields', $linkForeign, $labelForeign); - $this->getBaseLanguage()->set($entityForeign, 'links', $linkForeign, $labelForeign); + if ($label) { + $this->getBaseLanguage()->set($entity, 'fields', $link, $label); + $this->getBaseLanguage()->set($entity, 'links', $link, $label); + } + if ($labelForeign) { + $this->getBaseLanguage()->set($entityForeign, 'fields', $linkForeign, $labelForeign); + $this->getBaseLanguage()->set($entityForeign, 'links', $linkForeign, $labelForeign); + } $this->getBaseLanguage()->save(); } } - - return true; } diff --git a/client/src/views/admin/entity-manager/modals/edit-entity.js b/client/src/views/admin/entity-manager/modals/edit-entity.js index 66a365b257..d6f03b0458 100644 --- a/client/src/views/admin/entity-manager/modals/edit-entity.js +++ b/client/src/views/admin/entity-manager/modals/edit-entity.js @@ -276,6 +276,7 @@ Espo.define('views/admin/entity-manager/modals/edit-entity', ['views/modal', 'mo }); } } + this.model.fetchedAttributes = this.model.getClonedAttributes(); }, hideField: function (name) { @@ -365,7 +366,7 @@ Espo.define('views/admin/entity-manager/modals/edit-entity', ['views/modal', 'mo return; } - this.$el.find('button[data-name="save"]').addClass('disabled'); + this.$el.find('button[data-name="save"]').addClass('disabled').attr('disabled'); var url = 'EntityManager/action/createEntity'; if (this.scope) { @@ -394,14 +395,25 @@ Espo.define('views/admin/entity-manager/modals/edit-entity', ['views/modal', 'mo data.sortDirection = this.model.get('sortDirection'); } + if (!this.isNew) { + if (this.model.fetchedAttributes.labelPlural === data.labelPlural) { + delete data.labelPlural; + } + if (this.model.fetchedAttributes.labelSingular === data.labelSingular) { + delete data.labelSingular; + } + } + $.ajax({ url: url, type: 'POST', data: JSON.stringify(data), error: function () { - this.$el.find('button[data-name="save"]').removeClass('disabled'); + this.$el.find('button[data-name="save"]').removeClass('disabled').removeAttr('disabled'); }.bind(this) }).done(function () { + this.model.fetchedAttributes = this.model.getClonedAttributes(); + if (this.scope) { Espo.Ui.success(this.translate('Saved')); } else { diff --git a/client/src/views/admin/link-manager/modals/edit.js b/client/src/views/admin/link-manager/modals/edit.js index eb2383f948..fd49a21216 100644 --- a/client/src/views/admin/link-manager/modals/edit.js +++ b/client/src/views/admin/link-manager/modals/edit.js @@ -283,6 +283,9 @@ Espo.define('views/admin/link-manager/modals/edit', ['views/modal', 'views/admin tooltip: true, tooltipText: this.translate('linkAudited', 'tooltips', 'EntityManager') }); + + + this.model.fetchedAttributes = this.model.getClonedAttributes(); }, toPlural: function (string) { @@ -487,7 +490,7 @@ Espo.define('views/admin/link-manager/modals/edit', ['views/modal', 'views/admin return; } - this.$el.find('button[data-name="save"]').addClass('disabled'); + this.$el.find('button[data-name="save"]').addClass('disabled').attr('disabled'); var url = 'EntityManager/action/createLink'; if (!this.isNew) { @@ -508,29 +511,40 @@ Espo.define('views/admin/link-manager/modals/edit', ['views/modal', 'views/admin var audited = this.model.get('audited'); var auditedForeign = this.model.get('auditedForeign'); + var attributes = { + entity: entity, + entityForeign: entityForeign, + link: link, + linkForeign: linkForeign, + label: label, + labelForeign: labelForeign, + linkType: this.model.get('linkType'), + relationName: relationName, + linkMultipleField: linkMultipleField, + linkMultipleFieldForeign: linkMultipleFieldForeign, + audited: audited, + auditedForeign: auditedForeign + }; + + if (!this.isNew) { + if (attributes.label === this.model.fetchedAttributes.label) { + delete attributes.label; + } + if (attributes.labelForeign === this.model.fetchedAttributes.labelForeign) { + delete attributes.labelForeign; + } + } + $.ajax({ url: url, type: 'POST', - data: JSON.stringify({ - entity: entity, - entityForeign: entityForeign, - link: link, - linkForeign: linkForeign, - label: label, - labelForeign: labelForeign, - linkType: this.model.get('linkType'), - relationName: relationName, - linkMultipleField: linkMultipleField, - linkMultipleFieldForeign: linkMultipleFieldForeign, - audited: audited, - auditedForeign: auditedForeign - }), + data: JSON.stringify(attributes), error: function (x) { if (x.status == 409) { Espo.Ui.error(this.translate('linkConflict', 'messages', 'EntityManager')); x.errorIsHandled = true; } - this.$el.find('button[data-name="save"]').removeClass('disabled'); + this.$el.find('button[data-name="save"]').removeClass('disabled').removeAttr('disabled'); }.bind(this) }).done(function () { if (!this.isNew) { @@ -539,6 +553,8 @@ Espo.define('views/admin/link-manager/modals/edit', ['views/modal', 'views/admin Espo.Ui.success(this.translate('Created')); } + this.model.fetchedAttributes = this.model.getClonedAttributes(); + var data; data = ((this.getLanguage().data || {}) || {})[entity] || {};