diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c9b41dea..dad3b10ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ## [Unreleased] +### [Mailer] + +- **BREAKING**: Removed `EnvironmentConfig::setParam()` and `EnvironmentConfig::getParam()` methods. remp/remp#1299 + - Use of these could lead to circular dependency issues if values were read by environment config itself. + - We recommend the extraction of these values to their separate config classes. +- Fixed circular dependency issue with configs using environment variables. remp/remp#1299 + ## Archive - [v3.3](./changelogs/CHANGELOG-v3.3.md) diff --git a/Mailer/composer.lock b/Mailer/composer.lock index 3e7e8c18d..7ca05a48b 100644 --- a/Mailer/composer.lock +++ b/Mailer/composer.lock @@ -2198,16 +2198,16 @@ }, { "name": "nette/di", - "version": "v3.1.1", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/nette/di.git", - "reference": "4799ee684453bf5e70df1e87bec80bfbfc0e7d13" + "reference": "00ea0afa643b3b4383a5cd1a322656c989ade498" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/4799ee684453bf5e70df1e87bec80bfbfc0e7d13", - "reference": "4799ee684453bf5e70df1e87bec80bfbfc0e7d13", + "url": "https://api.github.com/repos/nette/di/zipball/00ea0afa643b3b4383a5cd1a322656c989ade498", + "reference": "00ea0afa643b3b4383a5cd1a322656c989ade498", "shasum": "" }, "require": { @@ -2217,7 +2217,7 @@ "nette/robot-loader": "^3.2 || ~4.0.0", "nette/schema": "^1.2", "nette/utils": "^3.2.5 || ~4.0.0", - "php": ">=7.2 <8.3" + "php": "7.2 - 8.3" }, "require-dev": { "nette/tester": "^2.4", @@ -2264,9 +2264,9 @@ ], "support": { "issues": "https://github.com/nette/di/issues", - "source": "https://github.com/nette/di/tree/v3.1.1" + "source": "https://github.com/nette/di/tree/v3.1.5" }, - "time": "2023-01-16T03:38:02+00:00" + "time": "2023-10-02T19:58:38+00:00" }, { "name": "nette/finder", diff --git a/Mailer/extensions/mailer-module/src/Models/Config/EditorConfig.php b/Mailer/extensions/mailer-module/src/Models/Config/EditorConfig.php new file mode 100644 index 000000000..8f7d623c1 --- /dev/null +++ b/Mailer/extensions/mailer-module/src/Models/Config/EditorConfig.php @@ -0,0 +1,26 @@ +templateEditor = match ($editor) { + self::EDITOR_CODEMIRROR => self::EDITOR_CODEMIRROR, + self::EDITOR_WYSIWYG => self::EDITOR_WYSIWYG, + default => throw new \Exception('Unsupported editor configured: ' . $editor), + }; + } + + public function getTemplateEditor(): string + { + return $this->templateEditor; + } +} diff --git a/Mailer/extensions/mailer-module/src/Models/Config/LinkedServices.php b/Mailer/extensions/mailer-module/src/Models/Config/LinkedServices.php new file mode 100644 index 000000000..d3bba9e92 --- /dev/null +++ b/Mailer/extensions/mailer-module/src/Models/Config/LinkedServices.php @@ -0,0 +1,24 @@ +linkedServices[$code] = [ + 'url' => $url, + 'icon' => $icon, + ]; + } + + public function getServices(): array + { + return $this->linkedServices; + } +} diff --git a/Mailer/extensions/mailer-module/src/Models/Config/SearchConfig.php b/Mailer/extensions/mailer-module/src/Models/Config/SearchConfig.php new file mode 100644 index 000000000..c80bd0154 --- /dev/null +++ b/Mailer/extensions/mailer-module/src/Models/Config/SearchConfig.php @@ -0,0 +1,19 @@ +maxResultCount = $maxResultCount; + } + + public function getMaxResultCount(): int + { + return $this->maxResultCount; + } +} diff --git a/Mailer/extensions/mailer-module/src/Models/EnvironmentConfig.php b/Mailer/extensions/mailer-module/src/Models/EnvironmentConfig.php index 55c01c9d8..8f9424213 100644 --- a/Mailer/extensions/mailer-module/src/Models/EnvironmentConfig.php +++ b/Mailer/extensions/mailer-module/src/Models/EnvironmentConfig.php @@ -5,26 +5,6 @@ class EnvironmentConfig { - private $linkedServices = []; - - private $params = []; - - public function linkService(string $code, ?string $url, ?string $icon): void - { - if (empty($url)) { - return; - } - $this->linkedServices[$code] = [ - 'url' => $url, - 'icon' => $icon, - ]; - } - - public function getLinkedServices(): array - { - return $this->linkedServices; - } - public function get(string $key): ?string { if (!isset($_ENV[$key])) { @@ -67,14 +47,4 @@ public function getBool(string $key): ?bool } return filter_var($value, FILTER_VALIDATE_BOOLEAN); } - - public function setParam(string $key, ?string $value): void - { - $this->params[$key] = $value; - } - - public function getParam(string $key, $default = null): ?string - { - return $this->params[$key] ?? $default; - } } diff --git a/Mailer/extensions/mailer-module/src/Presenters/BasePresenter.php b/Mailer/extensions/mailer-module/src/Presenters/BasePresenter.php index e5f458e40..62d28d456 100644 --- a/Mailer/extensions/mailer-module/src/Presenters/BasePresenter.php +++ b/Mailer/extensions/mailer-module/src/Presenters/BasePresenter.php @@ -8,6 +8,7 @@ use Remp\MailerModule\Components\ApplicationStatus\IApplicationStatusFactory; use Remp\MailerModule\Forms\IFormFactory; use Remp\MailerModule\Models\Auth\PermissionManager; +use Remp\MailerModule\Models\Config\LinkedServices; use Remp\MailerModule\Models\Config\LocalizationConfig; use Remp\MailerModule\Models\EnvironmentConfig; @@ -24,6 +25,9 @@ abstract class BasePresenter extends Presenter /** @var LocalizationConfig @inject */ public $localizationConfig; + + /** @var LinkedServices @inject */ + public $linkedServices; public function startup(): void { @@ -34,8 +38,8 @@ public function startup(): void } $this->template->currentUser = $this->getUser(); - $this->template->linkedServices = $this->environmentConfig->getLinkedServices(); - $this->template->locale = $this->environmentConfig->getParam('locale'); + $this->template->linkedServices = $this->linkedServices->getServices(); + $this->template->locale = $this->localizationConfig->getDefaultLocale(); $this->template->langs = $this->localizationConfig->getSecondaryLocales(); } diff --git a/Mailer/extensions/mailer-module/src/Presenters/Error4xxPresenter.php b/Mailer/extensions/mailer-module/src/Presenters/Error4xxPresenter.php index 4757f079f..0c12101cd 100644 --- a/Mailer/extensions/mailer-module/src/Presenters/Error4xxPresenter.php +++ b/Mailer/extensions/mailer-module/src/Presenters/Error4xxPresenter.php @@ -6,12 +6,16 @@ use Nette; use Remp\MailerModule\Components\MissingConfiguration\IMissingConfigurationFactory; use Remp\MailerModule\Components\MissingConfiguration\MissingConfiguration; -use Remp\MailerModule\Models\EnvironmentConfig; +use Remp\MailerModule\Models\Config\LinkedServices; +use Remp\MailerModule\Models\Config\LocalizationConfig; class Error4xxPresenter extends BasePresenter { - /** @var EnvironmentConfig @inject */ - public $environmentConfig; + /** @var LocalizationConfig @inject */ + public $localizationConfig; + + /** @var LinkedServices @inject */ + public $linkedServices; public function startup(): void { @@ -25,8 +29,8 @@ public function startup(): void public function renderDefault(Nette\Application\BadRequestException $exception): void { $this->template->currentUser = $this->getUser(); - $this->template->linkedServices = $this->environmentConfig->getLinkedServices(); - $this->template->locale = $this->environmentConfig->getParam('locale'); + $this->template->linkedServices = $this->linkedServices->getServices(); + $this->template->locale = $this->localizationConfig->getDefaultLocale(); // load template 403.latte or 404.latte or ... 4xx.latte $file = __DIR__ . "/templates/Error/{$exception->getCode()}.latte"; diff --git a/Mailer/extensions/mailer-module/src/Presenters/SearchPresenter.php b/Mailer/extensions/mailer-module/src/Presenters/SearchPresenter.php index 35f9bdbb5..2430e0ab5 100644 --- a/Mailer/extensions/mailer-module/src/Presenters/SearchPresenter.php +++ b/Mailer/extensions/mailer-module/src/Presenters/SearchPresenter.php @@ -3,7 +3,7 @@ namespace Remp\MailerModule\Presenters; -use Remp\MailerModule\Repositories\BatchTemplatesRepository; +use Remp\MailerModule\Models\Config\SearchConfig; use Remp\MailerModule\Repositories\JobsRepository; use Remp\MailerModule\Repositories\LayoutsRepository; use Remp\MailerModule\Repositories\ListsRepository; @@ -11,31 +11,19 @@ final class SearchPresenter extends BasePresenter { - private $templatesRepository; - - private $layoutsRepository; - - private $listsRepository; - - private $jobsRepository; - public function __construct( - TemplatesRepository $templatesRepository, - LayoutsRepository $layoutsRepository, - ListsRepository $listsRepository, - JobsRepository $jobsRepository + private TemplatesRepository $templatesRepository, + private LayoutsRepository $layoutsRepository, + private ListsRepository $listsRepository, + private JobsRepository $jobsRepository, + private SearchConfig $searchConfig, ) { parent::__construct(); - - $this->templatesRepository = $templatesRepository; - $this->layoutsRepository = $layoutsRepository; - $this->listsRepository = $listsRepository; - $this->jobsRepository = $jobsRepository; } public function actionDefault($term): void { - $limit = (int) $this->environmentConfig->getParam('max_result_count', '5'); + $limit = $this->searchConfig->getMaxResultCount(); $layouts = array_values($this->layoutsRepository->search($term, $limit)); $lists = array_values($this->listsRepository->search($term, $limit)); diff --git a/Mailer/extensions/mailer-module/src/Presenters/TemplatePresenter.php b/Mailer/extensions/mailer-module/src/Presenters/TemplatePresenter.php index 925ba3987..250586bbd 100644 --- a/Mailer/extensions/mailer-module/src/Presenters/TemplatePresenter.php +++ b/Mailer/extensions/mailer-module/src/Presenters/TemplatePresenter.php @@ -10,6 +10,7 @@ use Remp\MailerModule\Components\MailLinkStats\MailLinkStats; use Remp\MailerModule\Forms\IFormFactory; use Remp\MailerModule\Models\Config\Config; +use Remp\MailerModule\Models\Config\EditorConfig; use Remp\MailerModule\Models\ContentGenerator\GeneratorInputFactory; use Remp\MailerModule\Models\ContentGenerator\Replace\RtmClickReplace; use Remp\MailerModule\Repositories\ActiveRow; @@ -46,6 +47,7 @@ public function __construct( private TemplateTranslationsRepository $templateTranslationsRepository, private MailLinkStats $mailLinkStats, private Config $config, + private EditorConfig $editorConfig, ) { parent::__construct(); } @@ -263,7 +265,7 @@ public function renderNew(): void $this->template->layouts = $layouts; $this->template->snippets = $snippets; $this->template->lists = $lists; - $this->template->templateEditor = $this->environmentConfig->getParam('template_editor', 'codemirror'); + $this->template->templateEditor = $this->editorConfig->getTemplateEditor(); $this->template->editedLocale = null; } @@ -291,7 +293,7 @@ public function renderEdit($id, string $editedLocale = null): void $this->template->layouts = $layouts; $this->template->snippets = $snippets; $this->template->lists = $lists; - $this->template->templateEditor = $this->environmentConfig->getParam('template_editor', 'codemirror'); + $this->template->templateEditor = $this->editorConfig->getTemplateEditor(); $this->template->editedLocale = $editedLocale; } diff --git a/Mailer/extensions/mailer-module/src/config/config.neon b/Mailer/extensions/mailer-module/src/config/config.neon index dc6a9437d..a84cf75d3 100644 --- a/Mailer/extensions/mailer-module/src/config/config.neon +++ b/Mailer/extensions/mailer-module/src/config/config.neon @@ -1,14 +1,23 @@ services: router: Remp\MailerModule\Models\RouterFactory::createRouter - environmentConfig: - factory: Remp\MailerModule\Models\EnvironmentConfig + environmentConfig: Remp\MailerModule\Models\EnvironmentConfig + + linkedServices: + factory: Remp\MailerModule\Models\Config\LinkedServices setup: - linkService(beam, %remp.beam.web_addr%, album) - linkService(campaign, %remp.campaign.web_addr%, trending-up) - linkService(mailer, /, email) - - setParam(locale, %locale%) - - setParam(max_result_count, %max_result_count%) - - setParam(template_editor, %template_editor%) + + searchConfig: + factory: Remp\MailerModule\Models\Config\SearchConfig + setup: + - setMaxResultCount(beam, %max_result_count%) + + editorConfig: + factory: Remp\MailerModule\Models\Config\EditorConfig + setup: + - setTemplateEditor(%template_editor%) localizationConfig: factory: Remp\MailerModule\Models\Config\LocalizationConfig(@environmentConfig::get('LOCALE'))