diff --git a/application/Espo/Core/ApplicationRunners/ClearCache.php b/application/Espo/Core/ApplicationRunners/ClearCache.php index 71b4ceea58..57a48eca06 100644 --- a/application/Espo/Core/ApplicationRunners/ClearCache.php +++ b/application/Espo/Core/ApplicationRunners/ClearCache.php @@ -31,7 +31,8 @@ namespace Espo\Core\ApplicationRunners; use Espo\Core\{ Application\Runner, - DataManager, + Exceptions\Error, + Utils\CacheClearer, }; /** @@ -41,15 +42,18 @@ class ClearCache implements Runner { use Cli; - private DataManager $dataManager; + private CacheClearer $cacheClearer; - public function __construct(DataManager $dataManager) + public function __construct(CacheClearer $cacheClearer) { - $this->dataManager = $dataManager; + $this->cacheClearer = $cacheClearer; } + /** + * @throws Error + */ public function run(): void { - $this->dataManager->clearCache(); + $this->cacheClearer->clear(); } } diff --git a/application/Espo/Core/Console/Commands/ClearCache.php b/application/Espo/Core/Console/Commands/ClearCache.php index 6324e5ea4c..0c8ad5e024 100644 --- a/application/Espo/Core/Console/Commands/ClearCache.php +++ b/application/Espo/Core/Console/Commands/ClearCache.php @@ -30,24 +30,28 @@ namespace Espo\Core\Console\Commands; use Espo\Core\{ - DataManager, Console\Command, Console\Command\Params, Console\IO, + Exceptions\Error, + Utils\CacheClearer, }; class ClearCache implements Command { - private $dataManager; + private CacheClearer $cacheClearer; - public function __construct(DataManager $dataManager) + public function __construct(CacheClearer $cacheClearer) { - $this->dataManager = $dataManager; + $this->cacheClearer = $cacheClearer; } + /** + * @throws Error + */ public function run(Params $params, IO $io): void { - $this->dataManager->clearCache(); + $this->cacheClearer->clear(); $io->writeLine("Cache has been cleared."); } diff --git a/application/Espo/Core/DataManager.php b/application/Espo/Core/DataManager.php index 718ddd1389..0a5c1d2b61 100644 --- a/application/Espo/Core/DataManager.php +++ b/application/Espo/Core/DataManager.php @@ -31,19 +31,18 @@ namespace Espo\Core; use Espo\Core\Utils\Config\MissingDefaultParamsSaver as ConfigMissingDefaultParamsSaver; -use Espo\Core\{ - Exceptions\Error, - ORM\EntityManager, - Utils\Metadata, - Utils\Util, - Utils\Config, - Utils\Config\ConfigWriter, - Utils\File\Manager as FileManager, - Utils\Metadata\OrmMetadataData, - Utils\Database\Schema\SchemaProxy, - Utils\Log, - Utils\Module, - Rebuild\RebuildActionProcessor}; +use Espo\Core\Exceptions\Error; +use Espo\Core\ORM\EntityManagerProxy; +use Espo\Core\Utils\CacheClearer; +use Espo\Core\Utils\Metadata; +use Espo\Core\Utils\Util; +use Espo\Core\Utils\Config; +use Espo\Core\Utils\Config\ConfigWriter; +use Espo\Core\Utils\Metadata\OrmMetadataData; +use Espo\Core\Utils\Database\Schema\SchemaProxy; +use Espo\Core\Utils\Log; +use Espo\Core\Utils\Module; +use Espo\Core\Rebuild\RebuildActionProcessor; use Throwable; @@ -54,8 +53,7 @@ class DataManager { private Config $config; private ConfigWriter $configWriter; - private EntityManager $entityManager; - private FileManager $fileManager; + private EntityManagerProxy $entityManager; private Metadata $metadata; private OrmMetadataData $ormMetadataData; private HookManager $hookManager; @@ -64,14 +62,12 @@ class DataManager private Module $module; private RebuildActionProcessor $rebuildActionProcessor; private ConfigMissingDefaultParamsSaver $configMissingDefaultParamsSaver; - - private string $cachePath = 'data/cache'; + private CacheClearer $cacheClearer; public function __construct( - EntityManager $entityManager, + EntityManagerProxy $entityManager, Config $config, ConfigWriter $configWriter, - FileManager $fileManager, Metadata $metadata, OrmMetadataData $ormMetadataData, HookManager $hookManager, @@ -79,12 +75,12 @@ class DataManager Log $log, Module $module, RebuildActionProcessor $rebuildActionProcessor, - ConfigMissingDefaultParamsSaver $configMissingDefaultParamsSaver + ConfigMissingDefaultParamsSaver $configMissingDefaultParamsSaver, + CacheClearer $cacheClearer ) { $this->entityManager = $entityManager; $this->config = $config; $this->configWriter = $configWriter; - $this->fileManager = $fileManager; $this->metadata = $metadata; $this->ormMetadataData = $ormMetadataData; $this->hookManager = $hookManager; @@ -93,6 +89,7 @@ class DataManager $this->module = $module; $this->rebuildActionProcessor = $rebuildActionProcessor; $this->configMissingDefaultParamsSaver = $configMissingDefaultParamsSaver; + $this->cacheClearer = $cacheClearer; } /** @@ -106,8 +103,8 @@ class DataManager $this->clearCache(); $this->disableHooks(); $this->checkModules(); - $this->populateConfigParameters(); $this->rebuildMetadata(); + $this->populateConfigParameters(); $this->rebuildDatabase($entityList); $this->rebuildActionProcessor->process(); $this->configMissingDefaultParamsSaver->process(); @@ -115,21 +112,13 @@ class DataManager } /** - * Clear a cache. + * Clear cache. * * @throws Error */ public function clearCache(): void { - $this->module->clearCache(); - - $result = $this->fileManager->removeInDir($this->cachePath); - - if (!$result) { - throw new Error("Error while clearing cache"); - } - - $this->updateCacheTimestamp(); + $this->cacheClearer->clear(); } /** diff --git a/application/Espo/Core/ORM/EntityManagerProxy.php b/application/Espo/Core/ORM/EntityManagerProxy.php index 2c10a429bd..290ce4ab78 100644 --- a/application/Espo/Core/ORM/EntityManagerProxy.php +++ b/application/Espo/Core/ORM/EntityManagerProxy.php @@ -31,18 +31,17 @@ namespace Espo\Core\ORM; use Espo\ORM\{ Entity, + Metadata, Repository\Repository, Repository\RDBRepository, + SqlExecutor, }; -use Espo\Core\{ - Container, -}; +use Espo\Core\Container; class EntityManagerProxy { private ?EntityManager $entityManager = null; - private Container $container; public function __construct(Container $container) @@ -103,4 +102,14 @@ class EntityManagerProxy { return $this->getEntityManager()->getRDBRepository($entityType); } + + public function getMetadata(): Metadata + { + return $this->getEntityManager()->getMetadata(); + } + + public function getSqlExecutor(): SqlExecutor + { + return $this->getEntityManager()->getSqlExecutor(); + } } diff --git a/application/Espo/Core/Utils/CacheClearer.php b/application/Espo/Core/Utils/CacheClearer.php new file mode 100644 index 0000000000..caf609115c --- /dev/null +++ b/application/Espo/Core/Utils/CacheClearer.php @@ -0,0 +1,75 @@ +configWriter = $configWriter; + $this->fileManager = $fileManager; + $this->module = $module; + } + + /** + * @throws Error + */ + public function clear(): void + { + $this->module->clearCache(); + + $result = $this->fileManager->removeInDir($this->cachePath); + + if (!$result) { + throw new Error("Error while clearing cache"); + } + + $this->updateCacheTimestamp(); + } + + private function updateCacheTimestamp(): void + { + $this->configWriter->updateCacheTimestamp(); + $this->configWriter->save(); + } +}