188 lines
5.9 KiB
PHP
188 lines
5.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: ondra
|
|
* Date: 25.10.17
|
|
* Time: 8:55.
|
|
*/
|
|
|
|
namespace KupShop\ContentBundle\View;
|
|
|
|
use KupShop\ContentBundle\Util\Captcha;
|
|
use KupShop\ContentBundle\View\Exception\ValidationException;
|
|
use KupShop\KupShopBundle\Context\LanguageContext;
|
|
use KupShop\KupShopBundle\Email\NewsletterSubscribeEmail;
|
|
use KupShop\KupShopBundle\Exception\PermanentRedirectException;
|
|
use KupShop\KupShopBundle\Util\Mail\EmailCheck;
|
|
use KupShop\KupShopBundle\Views\Traits\RequestTrait;
|
|
use KupShop\KupShopBundle\Views\View;
|
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
|
use Symfony\Contracts\Service\Attribute\Required;
|
|
|
|
class NewsletterSubscribeView extends View
|
|
{
|
|
use \DatabaseCommunication;
|
|
use RequestTrait;
|
|
|
|
private $emailService;
|
|
private $emailCheck;
|
|
private $languageContext;
|
|
|
|
/** @var SessionInterface */
|
|
private $session;
|
|
|
|
private $hideSubscribeForm = false;
|
|
private $isNewlySubscibed = false;
|
|
|
|
protected $template = 'newsletter.subscribe.tpl';
|
|
|
|
public function __construct(NewsletterSubscribeEmail $emailService, EmailCheck $emailCheck, LanguageContext $languageContext)
|
|
{
|
|
$this->emailService = $emailService;
|
|
$this->emailCheck = $emailCheck;
|
|
$this->languageContext = $languageContext;
|
|
}
|
|
|
|
/**
|
|
* @required
|
|
*/
|
|
public function setSession(SessionInterface $session): void
|
|
{
|
|
$this->session = $session;
|
|
}
|
|
|
|
public function getTitle()
|
|
{
|
|
return translate('signUpTitle', 'newsletter');
|
|
}
|
|
|
|
public function getBreadcrumbs()
|
|
{
|
|
return getReturnNavigation(-1, 'NO_TYPE', ['Newsletter']);
|
|
}
|
|
|
|
public function getBodyVariables()
|
|
{
|
|
$vars = parent::getBodyVariables();
|
|
|
|
$return = $this->subscribe();
|
|
$vars['subscribed'] = $return;
|
|
$vars['act'] = 'subscribe';
|
|
$vars['email'] = $this->request->get('email');
|
|
$vars['hide_form'] = $this->session->get('hideSubscribeForm', $this->hideSubscribeForm);
|
|
$vars['new_subscriber'] = $this->session->get('isNewlySubscibed', $this->isNewlySubscibed);
|
|
|
|
$this->session->remove('hideSubscribeForm');
|
|
$this->session->remove('isNewlySubscibed');
|
|
|
|
return $vars;
|
|
}
|
|
|
|
public function subscribe()
|
|
{
|
|
$email = $this->request->get('email');
|
|
$code = $this->request->get('code');
|
|
$parameters = $this->request->get('parameters', []);
|
|
|
|
$today = new \DateTime();
|
|
$today = $today->format('d.m.Y');
|
|
|
|
if ($email && !$code) {
|
|
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
|
|
|
|
if (!$this->emailCheck->isEmailDomainValid($email)) {
|
|
addUserMessage(translate('errorInvalidEmail', 'newsletter'));
|
|
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
Captcha::checkCaptcha(null, 'shared');
|
|
} catch (ValidationException $e) {
|
|
addUserMessage($e->getMessage(), 'danger');
|
|
|
|
return false;
|
|
}
|
|
|
|
if (!$email) {
|
|
addUserMessage(translate('errorInvalidEmail', 'newsletter'));
|
|
} else {
|
|
if (!$this->checkAlreadySubscribed($email)) {
|
|
$code = md5($email.'-'.$today);
|
|
|
|
$message = $this->emailService->getEmail([
|
|
'OVEROVACI_ADRESA' => path('kupshop_content_newsletter_subscribe', ['code' => $code, 'email' => $email, 'parameters' => array_filter($this->getSubscribeParameters())], 0),
|
|
'EMAIL_UZIVATELE' => $email,
|
|
]);
|
|
$message['to'] = $email;
|
|
|
|
$this->emailService->sendEmail($message);
|
|
addUserMessage(translate('emailSuccessSent', 'newsletter'), 'success');
|
|
$this->hideSubscribeForm = true;
|
|
|
|
return true;
|
|
} else {
|
|
addUserMessage(translate('alreadySubscribed', 'newsletter'));
|
|
}
|
|
}
|
|
} elseif ($email && $code) {
|
|
$codeCheck = md5($email.'-'.$today);
|
|
$yesterday = (new \DateTime())->modify('-1 day')->format('d.m.Y');
|
|
$yesterdayCodeCheck = md5($email.'-'.$yesterday);
|
|
if ($code == $codeCheck || $code == $yesterdayCodeCheck) {
|
|
$fields = ['get_news' => 'Y', 'figure' => 'N'];
|
|
if (findModule(\Modules::TRANSLATIONS)) {
|
|
$fields['id_language'] = $this->languageContext->getActiveId();
|
|
}
|
|
|
|
$groups = ['Odběr novinek'];
|
|
if ($parameters['user_group'] ?? false) {
|
|
$groups = array_merge($groups, $parameters['user_group']);
|
|
}
|
|
|
|
addUserEmail($email, $groups, $fields, true);
|
|
addUserMessage(translate('newsletterSubscribeSuccess', 'newsletter'), 'success');
|
|
|
|
if (findModule(\Modules::COMPONENTS)) {
|
|
throw new PermanentRedirectException(
|
|
path('home')
|
|
);
|
|
}
|
|
|
|
$this->session->set('isNewlySubscibed', true);
|
|
$this->session->set('hideSubscribeForm', true);
|
|
|
|
throw new PermanentRedirectException(
|
|
path('kupshop_content_newsletter_subscribe')
|
|
);
|
|
} else {
|
|
addUserMessage(translate('linkExpirated', 'newsletter'));
|
|
|
|
throw new PermanentRedirectException(
|
|
path('kupshop_content_newsletter_subscribe')
|
|
);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function checkAlreadySubscribed($email)
|
|
{
|
|
$user = $this->selectSQL('users', ['email' => $email, 'get_news' => 'Y'])->fetch();
|
|
if ($user) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected function getSubscribeParameters(): array
|
|
{
|
|
return [
|
|
'user_group' => $this->request->get('user_group'),
|
|
];
|
|
}
|
|
}
|