From 80678c97f069e561cd623f2c9cefda91df171b34 Mon Sep 17 00:00:00 2001 From: yuri Date: Tue, 7 May 2019 16:07:57 +0300 Subject: [PATCH 1/4] field removal reload metadata --- client/src/views/admin/field-manager/list.js | 25 ++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/client/src/views/admin/field-manager/list.js b/client/src/views/admin/field-manager/list.js index 431c8a54c0..e9105b9d28 100644 --- a/client/src/views/admin/field-manager/list.js +++ b/client/src/views/admin/field-manager/list.js @@ -45,19 +45,20 @@ Espo.define('views/admin/field-manager/list', 'view', function (Dep) { var field = $(e.currentTarget).data('name'); this.confirm(this.translate('confirmation', 'messages'), function () { - this.notify('Removing...'); - $.ajax({ - url: 'Admin/fieldManager/' + this.scope + '/' + field, - type: 'DELETE', - success: function () { - this.notify('Removed', 'success'); - var data = this.getMetadata().data; - delete data['entityDefs'][this.scope]['fields'][field]; + Espo.Ui.notify(this.translate('Removing...')); + Espo.Ajax.request('Admin/fieldManager/' + this.scope + '/' + field, 'delete').then(function () { + Espo.Ui.success(this.translate('Removed')); + + $(e.currentTarget).closest('tr').remove(); + var data = this.getMetadata().data; + + delete data['entityDefs'][this.scope]['fields'][field]; + + this.getMetadata().load(function () { this.getMetadata().storeToCache(); - $(e.currentTarget).closest('tr').remove(); - }.bind(this), - }); - }, this); + }.bind(this), true); + }.bind(this)); + }.bind(this)); } }, From c3be6db4f38a5ff4c73015501d9d58687d592fc4 Mon Sep 17 00:00:00 2001 From: yuri Date: Tue, 7 May 2019 18:28:57 +0300 Subject: [PATCH 2/4] log changes --- .../Espo/Core/Exceptions/ForbiddenSilent.php | 35 ++++++++++++++++++ .../Espo/Core/Exceptions/NotFoundSilent.php | 35 ++++++++++++++++++ application/Espo/Core/Utils/Api/Output.php | 36 ++++++++++++++++--- application/Espo/Services/Record.php | 23 ++++++------ 4 files changed, 112 insertions(+), 17 deletions(-) create mode 100644 application/Espo/Core/Exceptions/ForbiddenSilent.php create mode 100644 application/Espo/Core/Exceptions/NotFoundSilent.php diff --git a/application/Espo/Core/Exceptions/ForbiddenSilent.php b/application/Espo/Core/Exceptions/ForbiddenSilent.php new file mode 100644 index 0000000000..11958ea1c7 --- /dev/null +++ b/application/Espo/Core/Exceptions/ForbiddenSilent.php @@ -0,0 +1,35 @@ +getSlim()->router()->getCurrentRoute(); if (isset($currentRoute)) { $inputData = $this->getSlim()->request()->getBody(); $inputData = $this->clearPasswords($inputData); - $GLOBALS['log']->error('API ['.$this->getSlim()->request()->getMethod().']:'.$currentRoute->getPattern().', Params:'.print_r($currentRoute->getParams(), true).', InputData: '.$inputData.' - '.$message); + + $logLevel = 'debug'; + + $routePattern = $currentRoute->getPattern(); + $routeParams = $currentRoute->getParams(); + $method = $this->getSlim()->request()->getMethod(); + + $logMessage = "API ($statusCode) "; + $logMessageItemList = []; + if ($message) $logMessageItemList[] = $message; + $logMessageItemList[] .= "$method " . $_SERVER['REQUEST_URI']; + if ($inputData) $logMessageItemList[] = "Input data: " . $inputData; + if ($routePattern) $logMessageItemList[] = "Route pattern: ". $routePattern; + if (!empty($routeParams)) $logMessageItemList[] = "Route params: ". print_r($routeParams, true); + + $logMessage .= implode("; ", $logMessageItemList); + + $GLOBALS['log']->log($logLevel, $logMessage); } - $this->displayError($message, $code, $toPrint, $exception); + $this->displayError($message, $statusCode, $toPrint, $exception); } public function displayError(string $text, int $statusCode = 500, bool $toPrint = false, $exception = null) { - $GLOBALS['log']->error('Display Error: '.$text.', Code: '.$statusCode.' URL: '.$_SERVER['REQUEST_URI']); + $logLevel = 'error'; + if ($exception && !empty($exception->logLevel)) { + $logLevel = $exception->logLevel; + } + $logMessageItemList = []; + if ($text) $logMessageItemList[] = "{$text}"; + if (!empty($this->slim)) { + $logMessageItemList[] = $this->getSlim()->request()->getMethod() . ' ' .$_SERVER['REQUEST_URI']; + } + $logMessage = "($statusCode) " . implode("; ", $logMessageItemList); + + $GLOBALS['log']->log($logLevel, $logMessage); ob_clean(); diff --git a/application/Espo/Services/Record.php b/application/Espo/Services/Record.php index 33a410c605..8839f18c51 100644 --- a/application/Espo/Services/Record.php +++ b/application/Espo/Services/Record.php @@ -36,7 +36,8 @@ use \Espo\Core\Exceptions\Forbidden; use \Espo\Core\Exceptions\BadRequest; use \Espo\Core\Exceptions\Conflict; use \Espo\Core\Exceptions\NotFound; - +use \Espo\Core\Exceptions\NotFoundSilent; +use \Espo\Core\Exceptions\ForbiddenSilent; use \Espo\Core\Utils\Util; @@ -282,7 +283,7 @@ class Record extends \Espo\Core\Services\Base } $entity = $this->getEntity($id); - if (!$entity) throw new NotFound(); + if (!$entity) throw new NotFoundSilent("Record does not exist."); $this->processActionHistoryRecord('read', $entity); @@ -303,11 +304,7 @@ class Record extends \Espo\Core\Services\Base if ($entity && !is_null($id)) { $this->loadAdditionalFields($entity); - - if (!$this->getAcl()->check($entity, 'read')) { - throw new Forbidden(); - } - + if (!$this->getAcl()->check($entity, 'read')) throw new ForbiddenSilent(); $this->prepareEntityForOutput($entity); } @@ -882,7 +879,7 @@ class Record extends \Espo\Core\Services\Base public function create($data) { - if (!$this->getAcl()->check($this->getEntityType(), 'create')) throw new Forbidden(); + if (!$this->getAcl()->check($this->getEntityType(), 'create')) throw new ForbiddenSilent(); $entity = $this->getRepository()->get(); @@ -902,11 +899,11 @@ class Record extends \Espo\Core\Services\Base $this->populateDefaults($entity, $data); - if (!$this->getAcl()->check($entity, 'create')) throw new Forbidden(); + if (!$this->getAcl()->check($entity, 'create')) throw new ForbiddenSilent(); $this->processValidation($entity, $data); - if (!$this->checkAssignment($entity)) throw new Forbidden('Assignment permission failure'); + if (!$this->checkAssignment($entity)) throw new Forbidden('Assignment permission failure.'); $this->processDuplicateCheck($entity, $data); @@ -954,13 +951,13 @@ class Record extends \Espo\Core\Services\Base if (!$entity) throw new NotFound(); - if (!$this->getAcl()->check($entity, 'edit')) throw new Forbidden(); + if (!$this->getAcl()->check($entity, 'edit')) throw new ForbiddenSilent(); $entity->set($data); $this->processValidation($entity, $data); - if (!$this->checkAssignment($entity)) throw new Forbidden(); + if (!$this->checkAssignment($entity)) throw new Forbidden("Assignment permission failure."); $this->beforeUpdateEntity($entity, $data); @@ -1023,7 +1020,7 @@ class Record extends \Espo\Core\Services\Base if (!$entity) throw new NotFound(); - if (!$this->getAcl()->check($entity, 'delete')) throw new Forbidden(); + if (!$this->getAcl()->check($entity, 'delete')) throw new ForbiddenSilent(); $this->beforeDeleteEntity($entity); From 4068a20b8ea2d5ec3a149d45c0e9b59c6e931d94 Mon Sep 17 00:00:00 2001 From: yuri Date: Wed, 8 May 2019 11:08:38 +0300 Subject: [PATCH 3/4] cleanup --- application/Espo/Core/Utils/Api/Output.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/application/Espo/Core/Utils/Api/Output.php b/application/Espo/Core/Utils/Api/Output.php index 685eb326d5..3e3f3d2a72 100644 --- a/application/Espo/Core/Utils/Api/Output.php +++ b/application/Espo/Core/Utils/Api/Output.php @@ -79,8 +79,6 @@ class Output $inputData = $this->getSlim()->request()->getBody(); $inputData = $this->clearPasswords($inputData); - $logLevel = 'debug'; - $routePattern = $currentRoute->getPattern(); $routeParams = $currentRoute->getParams(); $method = $this->getSlim()->request()->getMethod(); @@ -95,7 +93,7 @@ class Output $logMessage .= implode("; ", $logMessageItemList); - $GLOBALS['log']->log($logLevel, $logMessage); + $GLOBALS['log']->log('debug', $logMessage); } $this->displayError($message, $statusCode, $toPrint, $exception); From 68301c52c1d1c5e9cc2daeb6a52a3e369586f7b9 Mon Sep 17 00:00:00 2001 From: yuri Date: Wed, 8 May 2019 11:31:35 +0300 Subject: [PATCH 4/4] logger cleanup --- application/Espo/Core/Container.php | 4 ++-- .../Espo/Core/Utils/Log/Monolog/Logger.php | 19 +------------------ 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/application/Espo/Core/Container.php b/application/Espo/Core/Container.php index d67658828a..96cc0eefc8 100644 --- a/application/Espo/Core/Container.php +++ b/application/Espo/Core/Container.php @@ -115,7 +115,7 @@ class Container $rotation = $config->get('logger.rotation', true); $log = new \Espo\Core\Utils\Log('Espo'); - $levelCode = $log->getLevelCode($config->get('logger.level', 'WARNING')); + $levelCode = $log::toMonologLevel($config->get('logger.level', 'WARNING')); if ($rotation) { $maxFileNumber = $config->get('logger.maxFileNumber', 30); @@ -127,7 +127,7 @@ class Container $errorHandler = new \Monolog\ErrorHandler($log); $errorHandler->registerExceptionHandler(null, false); - $errorHandler->registerErrorHandler(array(), false); + $errorHandler->registerErrorHandler([], false); return $log; } diff --git a/application/Espo/Core/Utils/Log/Monolog/Logger.php b/application/Espo/Core/Utils/Log/Monolog/Logger.php index 507c923bba..6f9ee159c7 100644 --- a/application/Espo/Core/Utils/Log/Monolog/Logger.php +++ b/application/Espo/Core/Utils/Log/Monolog/Logger.php @@ -28,28 +28,11 @@ ************************************************************************/ namespace Espo\Core\Utils\Log\Monolog; + class Logger extends \Monolog\Logger { protected $defaultLevelName = 'DEBUG'; - /** - * Get Level Code - * @param string $level Ex. DEBUG, ... - * @return int - */ - public function getLevelCode($levelName) - { - $levelName = strtoupper($levelName); - - $levels = $this->getLevels(); - - if (isset($levels[$levelName])) { - return $levels[$levelName]; - } - - return $levels[$this->defaultLevelName]; - } - public function setLevel($levelName) { $level = static::toMonologLevel($levelName);