diff --git a/application/Espo/Core/Formula/Functions/EntityGroup/SumRelatedType.php b/application/Espo/Core/Formula/Functions/EntityGroup/SumRelatedType.php index 5beb84e197..102e8bc297 100644 --- a/application/Espo/Core/Formula/Functions/EntityGroup/SumRelatedType.php +++ b/application/Espo/Core/Formula/Functions/EntityGroup/SumRelatedType.php @@ -84,6 +84,7 @@ class SumRelatedType extends \Espo\Core\Formula\Functions\Base $foreignSelectManager = $this->getInjection('selectManagerFactory')->create($foreignEntityType); $foreignLink = $entity->getRelationParam($link, 'foreign'); + $foreignLinkAlias = $foreignLink . 'SumRelated'; if (empty($foreignLink)) { throw new Error("No foreign link for link {$link}."); @@ -95,29 +96,29 @@ class SumRelatedType extends \Espo\Core\Formula\Functions\Base $foreignSelectManager->applyFilter($filter, $selectParams); } - $selectParams['select'] = [[$foreignLink . '.id', 'foreignId'], 'SUM:' . $field]; + $selectParams['select'] = [[$foreignLinkAlias . '.id', 'foreignId'], 'SUM:' . $field]; if ($entity->getRelationType($link) === 'hasChildren') { $foreignSelectManager->addJoin([ $entity->getEntityType(), - $foreignLink, + $foreignLinkAlias, [ - $foreignLink . '.id:' => $foreignLink . 'Id', + $foreignLinkAlias . '.id:' => $foreignLink . 'Id', 'deleted' => false, - $foreignLink . '.id!=' => null, + $foreignLinkAlias . '.id!=' => null, ] ], $selectParams); $selectParams['whereClause'][] = [$foreignLink . 'Type' => $entity->getEntityType()]; } else { - $foreignSelectManager->addJoin($foreignLink, $selectParams); + $foreignSelectManager->addJoin([$foreignLink, $foreignLinkAlias], $selectParams); } if (!empty($selectParams['distinct'])) { $sqSelectParams = $selectParams; $sqSelectParams['whereClause'][] = [ - $foreignLink . '.id' => $entity->id + $foreignLinkAlias . '.id' => $entity->id ]; $sqSelectParams['select'] = ['id']; @@ -133,11 +134,11 @@ class SumRelatedType extends \Espo\Core\Formula\Functions\Base ]; } else { $selectParams['whereClause'][] = [ - $foreignLink . '.id' => $entity->id + $foreignLinkAlias . '.id' => $entity->id ]; } - $selectParams['groupBy'] = [$foreignLink . '.id']; + $selectParams['groupBy'] = [$foreignLinkAlias . '.id']; $entityManager->getRepository($foreignEntityType)->handleSelectParams($selectParams); diff --git a/application/Espo/Resources/i18n/en_US/Email.json b/application/Espo/Resources/i18n/en_US/Email.json index e5ed7de9d2..b1b8ca0c2b 100644 --- a/application/Espo/Resources/i18n/en_US/Email.json +++ b/application/Espo/Resources/i18n/en_US/Email.json @@ -107,7 +107,7 @@ "View Users": "View Users" }, "messages": { - "noSmtpSetup": "No SMTP setup. {link}.", + "noSmtpSetup": "SMTP is not configured: {link}", "testEmailSent": "Test email has been sent", "emailSent": "Email has been sent", "savedAsDraft": "Saved as draft", diff --git a/client/src/views/email/fields/compose-from-address.js b/client/src/views/email/fields/compose-from-address.js index af5ce98c48..2126f5f1df 100644 --- a/client/src/views/email/fields/compose-from-address.js +++ b/client/src/views/email/fields/compose-from-address.js @@ -32,9 +32,18 @@ Espo.define('views/email/fields/compose-from-address', 'views/fields/base', func editTemplate: 'email/fields/compose-from-address/edit', data: function () { + var noSmtpMessage = this.translate('noSmtpSetup', 'messages', 'Email'); + + var linkHtml = ''+this.translate('EmailAccount', 'scopeNamesPlural')+''; + if (!this.getAcl().check('EmailAccount')) { + linkHtml = ''+this.translate('Preferences')+''; + } + + noSmtpMessage = noSmtpMessage.replace('{link}', linkHtml); + return _.extend({ list: this.list, - noSmtpMessage: this.translate('noSmtpSetup', 'messages', 'Email').replace('{link}', ''+this.translate('Preferences')+'') + noSmtpMessage: noSmtpMessage, }, Dep.prototype.data.call(this)); }, diff --git a/client/src/views/fields/link-multiple-with-role.js b/client/src/views/fields/link-multiple-with-role.js index cc5ac0ca18..3c25697d48 100644 --- a/client/src/views/fields/link-multiple-with-role.js +++ b/client/src/views/fields/link-multiple-with-role.js @@ -58,9 +58,8 @@ define('views/fields/link-multiple-with-role', 'views/fields/link-multiple', fun this.roleFieldScope = this.model.name; } - if (this.roleType == 'enum') { + if (this.roleType == 'enum' && !this.forceRoles) { this.roleList = this.getMetadata().get('entityDefs.' + this.roleFieldScope + '.fields.' + this.roleField + '.options'); - if (!this.roleList) { this.roleList = []; this.skipRoles = true; diff --git a/client/src/views/user/fields/teams.js b/client/src/views/user/fields/teams.js index 9e4c11ac57..25ea576f99 100644 --- a/client/src/views/user/fields/teams.js +++ b/client/src/views/user/fields/teams.js @@ -26,10 +26,12 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -Espo.define('views/user/fields/teams', 'views/fields/link-multiple-with-role', function (Dep) { +define('views/user/fields/teams', 'views/fields/link-multiple-with-role', function (Dep) { return Dep.extend({ + forceRoles: true, + setup: function () { Dep.prototype.setup.call(this); @@ -43,7 +45,6 @@ Espo.define('views/user/fields/teams', 'views/fields/link-multiple-with-role', f } }, this); - this.listenTo(this.model, 'change:teamsIds', function () { var toLoad = false; this.ids.forEach(function (id) { @@ -85,7 +86,6 @@ Espo.define('views/user/fields/teams', 'views/fields/link-multiple-with-role', f teams.fetch(); }, this); - }, getDetailLinkHtml: function (id, name) { @@ -94,6 +94,7 @@ Espo.define('views/user/fields/teams', 'views/fields/link-multiple-with-role', f var role = (this.columns[id] || {})[this.columnName] || ''; var roleHtml = ''; if (role != '') { + role = this.getHelper().escapeString(role); roleHtml = ' » ' + role + ''; } var lineHtml = '