From a11c6a23c4d9dac9bec265f1029bf399f8cfbb36 Mon Sep 17 00:00:00 2001 From: yuri Date: Fri, 23 Dec 2016 12:52:00 +0200 Subject: [PATCH] formula ui 1 --- .../Espo/Controllers/EntityManager.php | 18 ++++ application/Espo/Controllers/Metadata.php | 15 ++- application/Espo/Core/Utils/EntityManager.php | 6 ++ .../Resources/i18n/en_US/EntityManager.json | 3 +- .../entity-manager/record/edit-formula.tpl | 10 ++ .../src/views/admin/entity-manager/index.js | 20 ++++ .../entity-manager/modals/edit-formula.js | 102 ++++++++++++++++++ .../entity-manager/record/edit-formula.js | 44 ++++++++ 8 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 client/res/templates/admin/entity-manager/record/edit-formula.tpl create mode 100644 client/src/views/admin/entity-manager/modals/edit-formula.js create mode 100644 client/src/views/admin/entity-manager/record/edit-formula.js 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'); + } + + }); +}); +