From 752b683494f482e93ebcaf880c1c99dc98580bae Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Mon, 18 Apr 2022 19:11:40 +0300 Subject: [PATCH] config fill missing default parameters on rebuild --- application/Espo/Core/DataManager.php | 11 ++- .../Config/MissingDefaultParamsSaver.php | 82 +++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 application/Espo/Core/Utils/Config/MissingDefaultParamsSaver.php diff --git a/application/Espo/Core/DataManager.php b/application/Espo/Core/DataManager.php index bc441629f5..76ed442890 100644 --- a/application/Espo/Core/DataManager.php +++ b/application/Espo/Core/DataManager.php @@ -29,6 +29,8 @@ namespace Espo\Core; +use Espo\Core\Utils\Config\MissingDefaultParamsSaver as ConfigMissingDefaultParamsSaver; + use Espo\Core\{ Exceptions\Error, ORM\EntityManager, @@ -74,6 +76,8 @@ class DataManager private $rebuildActionProcessor; + private ConfigMissingDefaultParamsSaver $configMissingDefaultParamsSaver; + private string $cachePath = 'data/cache'; public function __construct( @@ -87,7 +91,8 @@ class DataManager SchemaProxy $schemaProxy, Log $log, Module $module, - RebuildActionProcessor $rebuildActionProcessor + RebuildActionProcessor $rebuildActionProcessor, + ConfigMissingDefaultParamsSaver $configMissingDefaultParamsSaver ) { $this->entityManager = $entityManager; $this->config = $config; @@ -100,6 +105,7 @@ class DataManager $this->log = $log; $this->module = $module; $this->rebuildActionProcessor = $rebuildActionProcessor; + $this->configMissingDefaultParamsSaver = $configMissingDefaultParamsSaver; } /** @@ -110,13 +116,16 @@ class DataManager public function rebuild(?array $entityList = null): void { $this->clearCache(); + $this->disableHooks(); + $this->checkModules(); $this->populateConfigParameters(); $this->rebuildMetadata(); $this->rebuildDatabase($entityList); $this->rebuildActionProcessor->process(); + $this->configMissingDefaultParamsSaver->process(); $this->enableHooks(); } diff --git a/application/Espo/Core/Utils/Config/MissingDefaultParamsSaver.php b/application/Espo/Core/Utils/Config/MissingDefaultParamsSaver.php new file mode 100644 index 0000000000..8e3ff944c3 --- /dev/null +++ b/application/Espo/Core/Utils/Config/MissingDefaultParamsSaver.php @@ -0,0 +1,82 @@ +config = $config; + $this->configWriter = $configWriter; + $this->fileManager = $fileManager; + } + + public function process(): void + { + $data = $this->fileManager->getPhpSafeContents($this->defaultConfigPath); + + if (!is_array($data)) { + throw new Error(); + } + + /** @var array $data */ + + $newData = []; + + foreach ($data as $param => $value) { + if ($this->config->has($param)) { + continue; + } + + $newData[$param] = $value; + } + + if (!count($newData)) { + return; + } + + $this->configWriter->setMultiple($newData); + $this->configWriter->save(); + } +}