Files
kupshop/bundles/KupShop/UserBundle/Util/UserConsent.php
2025-08-02 16:30:27 +02:00

131 lines
3.8 KiB
PHP

<?php
namespace KupShop\UserBundle\Util;
use KupShop\IncomakerBundle\Util\IncomakerUtil;
use KupShop\KupShopBundle\Email\NewsletterSubscribeEmail;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\MailerLiteBundle\MailerLite;
use KupShop\UserBundle\Event\UserNewsletterEvent;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Contracts\Service\Attribute\Required;
class UserConsent
{
protected $mailerlite;
protected $incomaker;
#[Required]
public EventDispatcherInterface $eventDispatcher;
/** @var SessionInterface */
private $session;
/**
* @required
*/
public function setSession(SessionInterface $session): void
{
$this->session = $session;
}
/**
* @required
*/
public function setMailerlite(?MailerLite $mailerlite)
{
$this->mailerlite = $mailerlite;
}
/**
* @required
*/
public function setIncomaker(?IncomakerUtil $incomakerUtil)
{
$this->incomaker = $incomakerUtil;
}
public function updateNewsletter($userId, $newsletter = 'N', $new_user = true, $confirmed = false)
{
$user = \User::createFromId($userId);
if ($new_user && $this->incomaker) {
$this->incomaker->addUser($user, $newsletter);
}
if (($newsletter == 'Y') && ($user->get_news == 'N') && !$confirmed) {
if (is_null($user->date_subscribe)) {
return $this->sendConfirmationEmail($user->email);
}
}
$get_news = $user->get_news;
if ($new_user || ($get_news != $newsletter)) {
$qb = sqlQueryBuilder()->update('users')
->set('get_news', ':news')->setParameter('news', $newsletter)
->set('date_updated', 'NOW()')
->where('id = :id')->setParameter('id', $userId);
if ($newsletter == 'Y') {
$qb->set('date_subscribe', 'NOW()');
}
if ($newsletter == 'N') {
$qb->set('date_unsubscribe', 'NOW()');
}
$this->eventDispatcher->dispatch(
new UserNewsletterEvent($user->email),
$newsletter == 'Y' ? UserNewsletterEvent::SUBSCRIBED : UserNewsletterEvent::UNSUBSCRIBED
);
$qb->execute();
}
$result = true;
if ($newsletter == 'N') {
if ($new_user || ($get_news == $newsletter)) {
return $result;
}
}
if (findModule(\Modules::MAILERLITE)) {
if ($this->mailerlite->error) {
$result = false;
} else {
$mailerlite_update = $this->mailerlite->updateUser($user, $newsletter);
$result = $mailerlite_update;
}
}
if (findModule(\Modules::INCOMAKER)) {
if ($new_user || ($get_news != $newsletter)) {
$incomaker_update = $this->incomaker->updateUser($user, $newsletter);
$result &= $incomaker_update;
}
}
return $result;
}
public function sendConfirmationEmail($email)
{
$today = new \DateTime();
$today = $today->format('d.m.Y');
$code = md5($email.'-'.$today);
$emailService = ServiceContainer::getService(NewsletterSubscribeEmail::class);
$message = $emailService->getEmail([
'OVEROVACI_ADRESA' => path('kupshop_content_newsletter_subscribe', ['code' => $code, 'email' => $email], 0),
'EMAIL_UZIVATELE' => $email,
]);
$message['to'] = $email;
$emailService->sendEmail($message);
if (!isAdministration()) {
addUserMessage(translate('emailSuccessSent', 'newsletter'), 'success');
}
return true;
}
}