diff --git a/Application/Core/Setup/Actions.php b/Application/Core/Setup/Actions.php new file mode 100644 index 0000000..8e33665 --- /dev/null +++ b/Application/Core/Setup/Actions.php @@ -0,0 +1,111 @@ + + * + * @copyright Copyright (c) 2022 Marat Bedoev, bestlife AG + * @copyright Copyright (c) 2023 O3-Shop (https://www.o3-shop.com) + * @license https://www.gnu.org/licenses/gpl-3.0 GNU General Public License 3 (GPLv3) + */ + +namespace O3\TinyMCE\Application\Core\Setup; + +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Bridge\ShopConfigurationDaoBridgeInterface; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataObject\ModuleConfiguration; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataObject\ModuleConfiguration\Template; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataObject\ModuleConfiguration\TemplateBlock; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Exception\ModuleConfigurationNotFoundException; +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\ContainerInterface; +use Psr\Container\NotFoundExceptionInterface; + +class Actions +{ + /** + * clear cache + */ + public function clearCache(): void + { + try { + $oUtils = Registry::getUtils(); + $oUtils->resetTemplateCache($this->getModuleTemplates()); + $oUtils->resetLanguageCache(); + } catch (ContainerExceptionInterface|NotFoundExceptionInterface|ModuleConfigurationNotFoundException $e) { + Registry::getLogger()->error($e->getMessage(), [$this]); + Registry::getUtilsView()->addErrorToDisplay($e->getMessage()); + } + } + + /** + * @return array + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + * @throws ModuleConfigurationNotFoundException + */ + protected function getModuleTemplates(): array + { + $container = $this->getDIContainer(); + $shopConfiguration = $container->get(ShopConfigurationDaoBridgeInterface::class)->get(); + $moduleConfiguration = $shopConfiguration->getModuleConfiguration('o3-tinymce-editor'); + + return array_unique( + array_merge( + $this->getModuleTemplatesFromTemplates($moduleConfiguration), + $this->getModuleTemplatesFromBlocks($moduleConfiguration) + ) + ); + } + + /** + * @param ModuleConfiguration $moduleConfiguration + * + * @return array + */ + protected function getModuleTemplatesFromTemplates(ModuleConfiguration $moduleConfiguration): array + { + /** @var $template Template */ + return array_map( + function ($template) { + return $template->getTemplateKey(); + }, + $moduleConfiguration->getTemplates() + ); + } + + /** + * @param ModuleConfiguration $moduleConfiguration + * + * @return array + */ + protected function getModuleTemplatesFromBlocks(ModuleConfiguration $moduleConfiguration): array + { + /** @var $templateBlock TemplateBlock */ + return array_map( + function ($templateBlock) { + return basename($templateBlock->getShopTemplatePath()); + }, + $moduleConfiguration->getTemplateBlocks() + ); + } + + /** + * @return ContainerInterface|null + */ + protected function getDIContainer(): ?ContainerInterface + { + return ContainerFactory::getInstance()->getContainer(); + } +} \ No newline at end of file diff --git a/Application/Core/Setup/Events.php b/Application/Core/Setup/Events.php new file mode 100644 index 0000000..6cccc11 --- /dev/null +++ b/Application/Core/Setup/Events.php @@ -0,0 +1,45 @@ + + * + * @copyright Copyright (c) 2022 Marat Bedoev, bestlife AG + * @copyright Copyright (c) 2023 O3-Shop (https://www.o3-shop.com) + * @license https://www.gnu.org/licenses/gpl-3.0 GNU General Public License 3 (GPLv3) + */ + +declare(strict_types=1); + +namespace O3\TinyMCE\Application\Core\Setup; + +class Events +{ + /** + * Execute action on activate event + */ + public static function onActivate(): void + { + $actions = oxNew(Actions::class); + $actions->clearCache(); + } + + /** + * Execute action on deactivate event + */ + public static function onDeactivate(): void + { + $actions = oxNew(Actions::class); + $actions->clearCache(); + } +} diff --git a/metadata.php b/metadata.php index 94dd434..ef1b02c 100755 --- a/metadata.php +++ b/metadata.php @@ -19,6 +19,8 @@ * @license https://www.gnu.org/licenses/gpl-3.0 GNU General Public License 3 (GPLv3) */ +use O3\TinyMCE\Application\Core\Setup\Events; + $sMetadataVersion = '2.1'; $aModule = [ 'id' => 'o3-tinymce-editor', @@ -68,4 +70,8 @@ $aModule = [ 'position' => 2, ] ], + 'events' => [ + 'onActivate' => Events::class.'::onActivate', + 'onDeactivate' => Events::class.'::onDeactivate' + ], ];