Files
kupshop/bundles/KupShop/EcomailBundle/Controller/EcomailController.php
2025-08-02 16:30:27 +02:00

51 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\EcomailBundle\Controller;
use KupShop\UserBundle\Util\UserConsent;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class EcomailController extends AbstractController
{
#[Route('/_ecomail/unsubscribe', methods: ['POST'])]
public function unsubscribe(Request $request, UserConsent $userConsent): Response
{
return $this->updateContact($request, $userConsent);
}
#[Route('/_ecomail/update_contact', methods: ['POST'])]
public function updateContact(Request $request, UserConsent $userConsent): Response
{
$content = $request->getContent();
if (empty($content)) {
return new Response('No content', 400);
}
$data = json_decode($content, true);
if (!isset($data['payload'])) {
return new Response('No payload', 400);
}
if (!isset($data['payload']['status'])) {
return new Response('No status', 400);
}
if (!in_array($data['payload']['status'], ['SUBSCRIBED', 'UNSUBSCRIBED'])) {
return new Response('Nothing to do with status '.$data['payload']['status'], 200);
}
$user = \User::createFromLogin($data['payload']['email']);
if (!$user) {
return new Response("User {$data['payload']['email']} doesn't exist", 400);
}
$newsletter = ($data['payload']['status'] == 'SUBSCRIBED' ? 'Y' : 'N');
$result = $userConsent->updateNewsletter($user->id, $newsletter, false);
return new Response((string) $result, 200);
}
}