<?php
namespace App\EventSubscriber;
use App\Component\Piggy\Client\PiggyClient;
use App\Event\NewsletterEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PiggySubscriber implements EventSubscriberInterface
{
/**
* @var ParameterBagInterface
*/
protected $parameterBag;
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var PiggyClient
*/
private $piggyClient;
public function __construct(ParameterBagInterface $parameterBag, LoggerInterface $logger, PiggyClient $piggyClient)
{
$this->parameterBag = $parameterBag;
$this->logger = $logger;
$this->piggyClient = $piggyClient;
}
public static function getSubscribedEvents(): array
{
return [
NewsletterEvent::SUBSCRIBED => 'onNewsletterSubscription',
];
}
public function onNewsletterSubscription(NewsletterEvent $event)
{
$email = $event->getEmail();
if (!($contact = $this->piggyClient->findOrCreateByEmail($email)) || empty($contact['data']['uuid'])) {
$this->logger->error(
$this->logMessage('Newsletter: Piggy contact could not be found or created'),
['email' => $email]
);
return;
}
try {
$this->piggyClient->addSubscription($contact['data']['uuid']);
} catch (\Exception $exception) {
$this->logger->error($this->logMessage('Newsletter: Error adding subscription'), [
'email' => $email,
'contact_uuid' => $contact['data']['uuid'],
'message' => $exception->getMessage(),
]);
}
}
private function logMessage(string $message): string
{
return sprintf('[PiggySubscriber] %s', $message);
}
}