From 93a4f999b6b6bbcae52b67d22d219a26954137e0 Mon Sep 17 00:00:00 2001 From: yuri Date: Tue, 20 Jan 2015 18:01:05 +0200 Subject: [PATCH] entity manager 2 --- .../Espo/Controllers/EntityManager.php | 40 ++++++- application/Espo/Core/Container.php | 22 ++++ .../Log.php => Templates/Services/Base.php} | 26 +---- .../Espo/Core/Templates/Services/Person.php | 30 +++++ application/Espo/Core/Utils/EntityManager.php | 53 ++++----- .../Espo/Resources/i18n/en_US/Admin.json | 2 - .../Espo/Resources/i18n/en_US/Global.json | 7 +- .../Resources/metadata/app/adminPanel.json | 5 - custom/Espo/Custom/Controllers/Test.php | 5 + custom/Espo/Custom/Entities/Test.php | 5 + custom/Espo/Custom/Repositories/Test.php | 5 + custom/Espo/Custom/Services/Test.php | 5 + .../src/views/admin/entity-manager/index.js | 2 +- .../entity-manager/modals/edit-entity.js | 20 ++++ .../src/views/admin/field-manager/edit.js | 110 +++++++++--------- 15 files changed, 218 insertions(+), 119 deletions(-) rename application/Espo/Core/{Loaders/Log.php => Templates/Services/Base.php} (54%) create mode 100644 application/Espo/Core/Templates/Services/Person.php create mode 100644 custom/Espo/Custom/Controllers/Test.php create mode 100644 custom/Espo/Custom/Entities/Test.php create mode 100644 custom/Espo/Custom/Repositories/Test.php create mode 100644 custom/Espo/Custom/Services/Test.php diff --git a/application/Espo/Controllers/EntityManager.php b/application/Espo/Controllers/EntityManager.php index 19af966a68..29772e4e22 100644 --- a/application/Espo/Controllers/EntityManager.php +++ b/application/Espo/Controllers/EntityManager.php @@ -24,6 +24,7 @@ namespace Espo\Controllers; use \Espo\Core\Exceptions\BadRequest; use \Espo\Core\Exceptions\Forbidden; +use \Espo\Core\Exceptions\Error; class EntityManager extends \Espo\Core\Controllers\Base { @@ -47,6 +48,9 @@ class EntityManager extends \Espo\Core\Controllers\Base $name = $data['name']; $type = $data['type']; + $name = filter_var($name, \FILTER_SANITIZE_STRING); + $type = filter_var($type, \FILTER_SANITIZE_STRING); + $params = array(); if (!empty($data['labelSingular'])) { @@ -59,7 +63,41 @@ class EntityManager extends \Espo\Core\Controllers\Base $params['stream'] = $data['stream']; } - return $this->getContainer()->get('entityManagerUtil')->create($name, $type, $params); + $result = $this->getContainer()->get('entityManagerUtil')->create($name, $type, $params); + + if ($result) { + $this->getContainer()->get('dataManager')->rebuild(); + } else { + throw new Error(); + } + + return true; + } + + public function actionRemoveEntity($params, $data, $request) + { + if (!$request->isPost()) { + throw new BadRequest(); + } + + if (empty($data['name'])) { + throw new BadRequest(); + } + + $name = $data['name']; + + $name = filter_var($name, \FILTER_SANITIZE_STRING); + + + $result = $this->getContainer()->get('entityManagerUtil')->delete($name); + + if ($result) { + $this->getContainer()->get('dataManager')->clearCache(); + } else { + throw new Error(); + } + + return true; } } diff --git a/application/Espo/Core/Container.php b/application/Espo/Core/Container.php index e1e499f7c5..5fc044eb72 100644 --- a/application/Espo/Core/Container.php +++ b/application/Espo/Core/Container.php @@ -79,6 +79,28 @@ class Container return $className; } + protected function loadLog() + { + $logConfig = $this->get('config')->get('logger'); + + $log = new \Espo\Core\Utils\Log('Espo'); + + $levelCode = $log->getLevelCode($logConfig['level']); + + if ($logConfig['isRotate']) { + $handler = new \Espo\Core\Utils\Log\Monolog\Handler\RotatingFileHandler($logConfig['path'], $logConfig['maxRotateFiles'], $levelCode); + } else { + $handler = new \Espo\Core\Utils\Log\Monolog\Handler\StreamHandler($logConfig['path'], $levelCode); + } + $log->pushHandler($handler); + + $errorHandler = new \Monolog\ErrorHandler($log); + $errorHandler->registerExceptionHandler(null, false); + $errorHandler->registerErrorHandler(array(), false); + + return $log; + } + protected function loadContainer() { return $this; diff --git a/application/Espo/Core/Loaders/Log.php b/application/Espo/Core/Templates/Services/Base.php similarity index 54% rename from application/Espo/Core/Loaders/Log.php rename to application/Espo/Core/Templates/Services/Base.php index fc056753d2..daabc73f49 100644 --- a/application/Espo/Core/Loaders/Log.php +++ b/application/Espo/Core/Templates/Services/Base.php @@ -20,33 +20,11 @@ * along with EspoCRM. If not, see http://www.gnu.org/licenses/. ************************************************************************/ -namespace Espo\Core\Loaders; +namespace Espo\Core\Templates\Services; -use Espo\Core\Utils, - Espo\Core\Utils\Log\Monolog\Handler; -class Log extends Base +class Base extends \Espo\Services\Record { - public function load() - { - $logConfig = $this->getContainer()->get('config')->get('logger'); - $log = new Utils\Log('Espo'); - - $levelCode = $log->getLevelCode($logConfig['level']); - - if ($logConfig['isRotate']) { - $handler = new Handler\RotatingFileHandler($logConfig['path'], $logConfig['maxRotateFiles'], $levelCode); - } else { - $handler = new Handler\StreamHandler($logConfig['path'], $levelCode); - } - $log->pushHandler($handler); - - $errorHandler = new \Monolog\ErrorHandler($log); - $errorHandler->registerExceptionHandler(null, false); - $errorHandler->registerErrorHandler(array(), false); - - return $log; - } } diff --git a/application/Espo/Core/Templates/Services/Person.php b/application/Espo/Core/Templates/Services/Person.php new file mode 100644 index 0000000000..56478c1ba2 --- /dev/null +++ b/application/Espo/Core/Templates/Services/Person.php @@ -0,0 +1,30 @@ +getMetadata()->get('scope.' . $name)) { + if ($this->getMetadata()->get('scopes.' . $name)) { throw new Conflict('Entity ['.$name.'] already exists.'); } + if (empty($name) || empty($type)) { + throw new Error(); + } $contents = "<" . "?" . "php\n". "namespace Espo\Custom\Entities;\n". @@ -136,12 +140,14 @@ class EntityManager $filePath = "application/Espo/Core/Templates/Metadata/{$type}/clientDefs.json"; $clientDefsData = Json::decode($this->getFileManager()->getContents($filePath), true); $this->getMetadata()->set($clientDefsData, 'clientDefs', $name); + + return true; } public function update($name, $fieldDef, $scope) { /*Add option to metadata to identify the custom field*/ - if (!$this->isCore($name, $scope)) { + if ($this->isCustom($name, $scope)) { $fieldDef['isCustom'] = true; } @@ -167,21 +173,29 @@ class EntityManager return (bool) $res; } - public function delete($name, $scope) + public function delete($name) { - if ($this->isCore($name, $scope)) { - throw new Error('Cannot delete core field ['.$name.'] in '.$scope); + if (!$this->isCustom($name)) { + throw new Forbidden; } $unsets = array( - 'fields.'.$name, - 'links.'.$name, + 'entityDefs', + 'clientDefs', + 'scopes' ); + $res = $this->getMetadata()->delete($unsets, $this->metadataType, $name); - $res = $this->getMetadata()->delete($unsets, $this->metadataType, $scope); - $res &= $this->deleteLabel($name, $scope); + $this->getFileManager()->removeFile("custom/Espo/Custom/Resources/metadata/entityDefs/{$name}.json"); + $this->getFileManager()->removeFile("custom/Espo/Custom/Resources/metadata/clientDefs/{$name}.json"); + $this->getFileManager()->removeFile("custom/Espo/Custom/Resources/metadata/scopes/{$name}.json"); - return (bool) $res; + $this->getFileManager()->removeFile("custom/Espo/Custom/Entities/{$name}.php"); + $this->getFileManager()->removeFile("custom/Espo/Custom/Services/{$name}.php"); + $this->getFileManager()->removeFile("custom/Espo/Custom/Controllers/{$name}.php"); + $this->getFileManager()->removeFile("custom/Espo/Custom/Repositories/{$name}.php"); + + return true; } protected function setEntityDefs($name, $fieldDef, $scope) @@ -316,21 +330,8 @@ class EntityManager return $this->isChanged; } - /** - * Check if a field is core field - * - * @param string $name - * @param string $scope - * @return boolean - */ - protected function isCore($name, $scope) + protected function isCustom($name) { - $existingField = $this->getFieldDef($name, $scope); - if (isset($existingField) && (!isset($existingField['isCustom']) || !$existingField['isCustom'])) { - return true; - } - - return false; + return $this->getMetadata()->get('scopes.' . $name . '.isCustom'); } - -} \ No newline at end of file +} diff --git a/application/Espo/Resources/i18n/en_US/Admin.json b/application/Espo/Resources/i18n/en_US/Admin.json index 7c4ce7fdce..0f70d4bf2d 100644 --- a/application/Espo/Resources/i18n/en_US/Admin.json +++ b/application/Espo/Resources/i18n/en_US/Admin.json @@ -10,7 +10,6 @@ "Available Fields": "Available Fields", "Layout": "Layout", "Entity Manager": "Entity Manager", - "Relationship Manager": "Relationship Manager", "Add Panel": "Add Panel", "Add Field": "Add Field", "Settings": "Settings", @@ -133,7 +132,6 @@ "layoutManager": "Customize layouts (list, detail, edit, search, mass update).", "fieldManager": "Create new fields or customize existing ones.", "entityManager": "Create custom entities. Edit existing ones.", - "relationshipManager": "Manage relationships between entities.", "userInterface": "Configure UI.", "authTokens": "Active auth sessions. IP address and last access date.", "authentication": "Authentication settings.", diff --git a/application/Espo/Resources/i18n/en_US/Global.json b/application/Espo/Resources/i18n/en_US/Global.json index 5e2662361b..b1caac232b 100644 --- a/application/Espo/Resources/i18n/en_US/Global.json +++ b/application/Espo/Resources/i18n/en_US/Global.json @@ -186,7 +186,8 @@ "createdAt": "Created At", "modifiedAt": "Modified At", "createdBy": "Created By", - "modifiedBy": "Modified By" + "modifiedBy": "Modified By", + "description": "Description" }, "links": { "assignedUser": "Assigned User", @@ -198,10 +199,10 @@ "users": "Users" }, "dashlets": { - "Stream": "Stream" + "Stream": "Stream" }, "streamMessages": { - "create": "{user} created {entityType} {entity}", + "create": "{user} created {entityType} {entity}", "createAssigned": "{user} created {entityType} {entity} assigned to {assignee}", "assign": "{user} assigned {entityType} {entity} to {assignee}", "post": "{user} posted on {entityType} {entity}", diff --git a/application/Espo/Resources/metadata/app/adminPanel.json b/application/Espo/Resources/metadata/app/adminPanel.json index 5204469291..530fec5130 100644 --- a/application/Espo/Resources/metadata/app/adminPanel.json +++ b/application/Espo/Resources/metadata/app/adminPanel.json @@ -112,11 +112,6 @@ "label":"Entity Manager", "description":"entityManager" }, - { - "url":"#Admin/relationshipManager", - "label":"Relationship Manager", - "description":"relationshipManager" - }, { "url":"#Admin/userInterface", "label":"User Interface", diff --git a/custom/Espo/Custom/Controllers/Test.php b/custom/Espo/Custom/Controllers/Test.php new file mode 100644 index 0000000000..0a69dd77c4 --- /dev/null +++ b/custom/Espo/Custom/Controllers/Test.php @@ -0,0 +1,5 @@ +