diff --git a/application/Espo/Controllers/EntityManager.php b/application/Espo/Controllers/EntityManager.php
index 30596612af..e059edad0a 100644
--- a/application/Espo/Controllers/EntityManager.php
+++ b/application/Espo/Controllers/EntityManager.php
@@ -292,5 +292,23 @@ class EntityManager extends \Espo\Core\Controllers\Base
return true;
}
+
+ public function postActionFormula($params, $data, $request)
+ {
+ if (empty($data['scope'])) {
+ throw new BadRequest();
+ }
+ if (!array_key_exists('data', $data)) {
+ throw new BadRequest();
+ }
+
+ $formulaData = get_object_vars($data['data']);
+
+ $this->getContainer()->get('entityManagerUtil')->setFormulaData($data['scope'], $formulaData);
+
+ $this->getContainer()->get('dataManager')->clearCache();
+
+ return true;
+ }
}
diff --git a/application/Espo/Controllers/Metadata.php b/application/Espo/Controllers/Metadata.php
index c4692ea07b..06850d2266 100644
--- a/application/Espo/Controllers/Metadata.php
+++ b/application/Espo/Controllers/Metadata.php
@@ -25,15 +25,26 @@
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
- ************************************************************************/
+ ************************************************************************/
namespace Espo\Controllers;
+use \Espo\Core\Exceptions\Forbidden;
+
class Metadata extends \Espo\Core\Controllers\Base
{
-
public function actionRead($params, $data)
{
return $this->getMetadata()->getAll(true);
}
+
+ public function getActionGet($params, $data, $request)
+ {
+ if (!$this->getUser()->isAdmin()) {
+ throw new \Forbidden();
+ }
+ $key = $request->get('key');
+
+ return $this->getMetadata()->get($key, false);
+ }
}
diff --git a/application/Espo/Core/Utils/EntityManager.php b/application/Espo/Core/Utils/EntityManager.php
index 904d60f379..c7781a5400 100644
--- a/application/Espo/Core/Utils/EntityManager.php
+++ b/application/Espo/Core/Utils/EntityManager.php
@@ -730,6 +730,12 @@ class EntityManager
return true;
}
+ public function setFormulaData($scope, $data)
+ {
+ $this->getMetadata()->set('formula', $scope, $data);
+ $this->getMetadata()->save();
+ }
+
protected function processHook($methodName, $type, $name, &$params = null)
{
$hook = $this->getHook($type);
diff --git a/application/Espo/Resources/i18n/en_US/EntityManager.json b/application/Espo/Resources/i18n/en_US/EntityManager.json
index 61edbe5272..cc6dfee8fb 100644
--- a/application/Espo/Resources/i18n/en_US/EntityManager.json
+++ b/application/Espo/Resources/i18n/en_US/EntityManager.json
@@ -27,7 +27,8 @@
"textFilterFields": "Text Filter Fields",
"audited": "Audited",
"auditedForeign": "Foreign Audited",
- "statusField": "Status Field"
+ "statusField": "Status Field",
+ "beforeSaveCustomScript": "Before Save Custom Script"
},
"options": {
"type": {
diff --git a/client/res/templates/admin/entity-manager/record/edit-formula.tpl b/client/res/templates/admin/entity-manager/record/edit-formula.tpl
new file mode 100644
index 0000000000..03b2b1a555
--- /dev/null
+++ b/client/res/templates/admin/entity-manager/record/edit-formula.tpl
@@ -0,0 +1,10 @@
+
+
+
+
+ {{{beforeSaveCustomScript}}}
+
+
+
\ No newline at end of file
diff --git a/client/src/views/admin/entity-manager/index.js b/client/src/views/admin/entity-manager/index.js
index 2f16cf404a..2733923e2f 100644
--- a/client/src/views/admin/entity-manager/index.js
+++ b/client/src/views/admin/entity-manager/index.js
@@ -48,6 +48,10 @@ Espo.define('views/admin/entity-manager/index', 'view', function (Dep) {
var scope = $(e.currentTarget).data('scope');
this.editEntity(scope);
},
+ 'click [data-action="editFormula"]': function (e) {
+ var scope = $(e.currentTarget).data('scope');
+ this.editFormula(scope);
+ },
'click button[data-action="createEntity"]': function (e) {
this.createEntity();
},
@@ -157,6 +161,22 @@ Espo.define('views/admin/entity-manager/index', 'view', function (Dep) {
}.bind(this));
},
+ editFormula: function (scope) {
+ this.createView('edit', 'views/admin/entity-manager/modals/edit-formula', {
+ scope: scope
+ }, function (view) {
+ view.render();
+
+ this.listenTo(view, 'after:save', function () {
+ this.clearView('edit');
+ }, this);
+
+ this.listenTo(view, 'close', function () {
+ this.clearView('edit');
+ }, this);
+ }, this);
+ },
+
updatePageTitle: function () {
this.setPageTitle(this.getLanguage().translate('Entity Manager', 'labels', 'Admin'));
},
diff --git a/client/src/views/admin/entity-manager/modals/edit-formula.js b/client/src/views/admin/entity-manager/modals/edit-formula.js
new file mode 100644
index 0000000000..68d47949d4
--- /dev/null
+++ b/client/src/views/admin/entity-manager/modals/edit-formula.js
@@ -0,0 +1,102 @@
+/************************************************************************
+ * This file is part of EspoCRM.
+ *
+ * EspoCRM - Open Source CRM application.
+ * Copyright (C) 2014-2015 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
+ * Website: http://www.espocrm.com
+ *
+ * EspoCRM is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * EspoCRM is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with EspoCRM. If not, see http://www.gnu.org/licenses/.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
+ ************************************************************************/
+
+Espo.define('views/admin/entity-manager/modals/edit-formula', ['views/modal', 'model'], function (Dep, Model) {
+
+ return Dep.extend({
+
+ _template: '
{{{record}}}
',
+
+ data: function () {
+ return {
+ };
+ },
+
+ setup: function () {
+ this.buttonList = [
+ {
+ name: 'save',
+ label: 'Save',
+ style: 'danger'
+ },
+ {
+ name: 'cancel',
+ label: 'Cancel'
+ }
+ ];
+
+ var scope = this.scope = this.options.scope || false;
+
+ this.header = this.translate('Formula', 'labels', 'EntityManager') + ': ' + this.translate(scope, 'scopeName');
+
+ var model = this.model = new Model();
+ model.name = 'EntityManager';
+
+ this.wait(true);
+ this.ajaxGetRequest('Metadata/action/get', {
+ key: 'formula.' + scope
+ }).then(function (formulaData) {
+ formulaData = formulaData || {};
+
+ model.set('beforeSaveCustomScript', formulaData.beforeSaveCustomScript || null);
+
+ this.createView('record', 'views/admin/entity-manager/record/edit-formula', {
+ el: this.getSelector() + ' .record',
+ model: model
+ });
+ this.wait(false);
+ }.bind(this));
+ },
+
+ actionSave: function () {
+ this.disableButton('save');
+
+ var data = this.getView('record').fetch();
+ this.model.set(data);
+ if (this.getView('record').validate()) return;
+
+ if (data.beforeSaveCustomScript === '') {
+ data.beforeSaveCustomScript = null;
+ }
+
+ Espo.Ui.notify(this.translate('pleaseWait', 'messages'));
+ this.ajaxPostRequest('EntityManager/action/formula', {
+ data: data,
+ scope: this.scope
+ }).then(function () {
+ Espo.Ui.success(this.translate('Saved'));
+ this.trigger('after:save');
+ }.bind(this)).fail(function () {
+ this.enableButton('save');
+ }.bind(this));
+ }
+
+
+ });
+});
+
diff --git a/client/src/views/admin/entity-manager/record/edit-formula.js b/client/src/views/admin/entity-manager/record/edit-formula.js
new file mode 100644
index 0000000000..9a3c355fe9
--- /dev/null
+++ b/client/src/views/admin/entity-manager/record/edit-formula.js
@@ -0,0 +1,44 @@
+/************************************************************************
+ * This file is part of EspoCRM.
+ *
+ * EspoCRM - Open Source CRM application.
+ * Copyright (C) 2014-2015 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
+ * Website: http://www.espocrm.com
+ *
+ * EspoCRM is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * EspoCRM is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with EspoCRM. If not, see http://www.gnu.org/licenses/.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of this program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU General Public License version 3.
+ *
+ * In accordance with Section 7(b) of the GNU General Public License version 3,
+ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
+ ************************************************************************/
+
+Espo.define('views/admin/entity-manager/record/edit-formula', 'views/record/base', function (Dep) {
+
+ return Dep.extend({
+
+ template: 'admin/entity-manager/record/edit-formula',
+
+ setup: function () {
+ Dep.prototype.setup.call(this);
+ this.createField('beforeSaveCustomScript', 'views/fields/text', {
+ rows: 12
+ }, 'edit');
+ }
+
+ });
+});
+