51 lines
1.7 KiB
PHP
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);
|
|
}
|
|
}
|