From 0025b075d0fd0019c3f6b60731bb2003a2bd524d Mon Sep 17 00:00:00 2001 From: Peter Dulacka Date: Fri, 12 Nov 2021 10:16:39 +0100 Subject: [PATCH] Fix improbable redirects pointing to non-existing presenter and button redraw remp/crm#2115 --- src/Components/MailSettings/MailSettings.php | 66 +++--- .../MailSettings/mail_settings.latte | 193 +++++++++--------- .../MailUserSubscriptionsRepository.php | 1 + src/lang/remp_mailer.cs_CZ.neon | 1 + src/lang/remp_mailer.en_US.neon | 1 + src/lang/remp_mailer.sk_SK.neon | 1 + 6 files changed, 136 insertions(+), 127 deletions(-) diff --git a/src/Components/MailSettings/MailSettings.php b/src/Components/MailSettings/MailSettings.php index 8d56319..f8d172e 100644 --- a/src/Components/MailSettings/MailSettings.php +++ b/src/Components/MailSettings/MailSettings.php @@ -9,6 +9,7 @@ use Crm\RempMailerModule\Repositories\MailUserSubscriptionsRepository; use Crm\UsersModule\Auth\UserManager; use Nette\Application\UI\Control; +use Nette\Localization\ITranslator; /** * @property FrontendPresenter $presenter @@ -26,13 +27,16 @@ class MailSettings extends Control private $mailTypesRepository; private $userManager; + + private $translator; public function __construct( EmailSettingsFormFactory $emailSettingsFormFactory, MailUserSubscriptionsRepository $mailUserSubscriptionsRepository, MailTypeCategoriesRepository $mailTypeCategoriesRepository, MailTypesRepository $mailTypesRepository, - UserManager $userManager + UserManager $userManager, + ITranslator $translator ) { parent::__construct(); $this->emailSettingsFormFactory = $emailSettingsFormFactory; @@ -40,6 +44,7 @@ public function __construct( $this->mailTypesRepository = $mailTypesRepository; $this->mailTypeCategoriesRepository = $mailTypeCategoriesRepository; $this->userManager = $userManager; + $this->translator = $translator; } public function render() @@ -47,8 +52,13 @@ public function render() $categories = $this->mailTypeCategoriesRepository->all(); $this->template->categories = $categories; - $types = $this->mailTypesRepository->all(true); - $this->template->types = $types; + $mailTypes = $this->mailTypesRepository->all(true); + $this->template->types = $mailTypes; + + $mappedMailTypes = []; + foreach ($mailTypes as $mailType) { + $mappedMailTypes[$mailType->id] = $mailType; + } $userSubscriptions = []; if ($this->presenter->getUser()->isLoggedIn()) { @@ -57,29 +67,25 @@ public function render() $this->template->notLogged = true; } - $showUnsubsribeAll = false; + $showUnsubscribeAll = false; $showSubscribeAll = false; - foreach ($userSubscriptions as $typeId => $userSubscription) { - foreach ($types as $type) { - if ($type->id == $typeId && $type->locked) { - continue 2; - } - } - if (!$userSubscription['is_subscribed']) { - $showSubscribeAll = true; + foreach ($userSubscriptions as $mailTypeId => $userSubscription) { + if (isset($mappedMailTypes[$mailTypeId]) && $mappedMailTypes[$mailTypeId]->locked) { + continue; } + if ($userSubscription['is_subscribed']) { - $showUnsubsribeAll = true; + $showUnsubscribeAll = true; + } else { + $showSubscribeAll = true; } } - $this->template->showUnsubsribeAll = $showUnsubsribeAll; + $this->template->showUnsubscribeAll = $showUnsubscribeAll; $this->template->showSubscribeAll = $showSubscribeAll; - $this->template->userSubscriptions = $userSubscriptions; - $this->template->setFile(__DIR__ . '/' . $this->view); $this->template->render(); } @@ -87,11 +93,10 @@ public function render() public function handleSubscribe($id, $variantId = null) { - if (!$this->presenter->getUser()->isLoggedIn()) { - $this->presenter->redirect(':Mailer:Register:email', $id, $variantId); - } + $this->getPresenter()->onlyLoggedIn(); + $this->mailUserSubscriptionsRepository->subscribeUser($this->presenter->getUser()->getIdentity(), $id, $variantId, $this->presenter->rtmParams()); - $this->flashMessage($this->presenter->translator->translate('remp_mailer.frontend.mail_settings.subscribe_success')); + $this->flashMessage($this->translator->translate('remp_mailer.frontend.mail_settings.subscribe_success')); $this->template->changedId = (int)$id; if ($this->presenter->isAjax()) { @@ -106,8 +111,9 @@ public function handleSubscribe($id, $variantId = null) public function handleUnSubscribe($id) { $this->getPresenter()->onlyLoggedIn(); + $this->mailUserSubscriptionsRepository->unSubscribeUser($this->presenter->getUser()->getIdentity(), $id, $this->presenter->rtmParams()); - $this->flashMessage($this->presenter->translator->translate('remp_mailer.frontend.mail_settings.unsubscribe_success')); + $this->flashMessage($this->translator->translate('remp_mailer.frontend.mail_settings.unsubscribe_success')); $this->template->changedId = (int)$id; if ($this->presenter->isAjax()) { @@ -121,18 +127,17 @@ public function handleUnSubscribe($id) public function handleAllSubscribe() { - if (!$this->presenter->getUser()->isLoggedIn()) { - $this->presenter->redirect(':Mailer:Register:email'); - } + $this->getPresenter()->onlyLoggedIn(); $user = $this->userManager->loadUser($this->presenter->user); $this->mailUserSubscriptionsRepository->subscribeUserAll($user); - $this->flashMessage($this->presenter->translator->translate('remp_mailer.frontend.mail_settings.subscribe_success')); + $this->flashMessage($this->translator->translate('remp_mailer.frontend.mail_settings.subscribe_success')); if ($this->presenter->isAjax()) { $this->redrawControl('data-wrapper'); + $this->redrawControl('buttons'); } else { - $this->presenter->redirect(':Mailer:MailSettings:mailSettings'); + $this->presenter->redirect(':RempMailer:MailSettings:mailSettings'); } } @@ -143,11 +148,12 @@ public function handleAllUnSubscribe() $this->mailUserSubscriptionsRepository->unsubscribeUserAll($user); - $this->flashMessage($this->presenter->translator->translate('remp_mailer.frontend.mail_settings.unsubscribe_success')); + $this->flashMessage($this->translator->translate('remp_mailer.frontend.mail_settings.unsubscribe_success')); if ($this->presenter->isAjax()) { $this->redrawControl('data-wrapper'); + $this->redrawControl('buttons'); } else { - $this->presenter->redirect(':Mailer:MailSettings:mailSettings'); + $this->presenter->redirect(':RempMailer:MailSettings:mailSettings'); } } @@ -156,8 +162,8 @@ public function createComponentEmailSettingsForm() $form = $this->emailSettingsFormFactory->create($this->presenter->getUser()->getId()); $this->emailSettingsFormFactory->onUpdate = function () { - $this->flashMessage('Nastavenia boli aktualizované'); - $this->presenter->redirect(':Mailer:MailSettings:mailSettings'); + $this->flashMessage($this->translator->translate('remp_mailer.frontend.mail_settings.actualized_message')); + $this->presenter->redirect(':RempMailer:MailSettings:mailSettings'); }; return $form; diff --git a/src/Components/MailSettings/mail_settings.latte b/src/Components/MailSettings/mail_settings.latte index 9fc8be9..f04e31a 100644 --- a/src/Components/MailSettings/mail_settings.latte +++ b/src/Components/MailSettings/mail_settings.latte @@ -2,6 +2,8 @@ {/block} +{snippetArea data} +