Passed
Pull Request — master (#81)
by
unknown
15:22
created

setWishlistCookieToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 2
c 1
b 1
f 0
nc 1
nop 2
dl 0
loc 5
rs 10
1
<?php
2
3
/*
4
 * This file was created by developers working at BitBag
5
 * Do you need more information about us and what we do? Visit our https://bitbag.io website!
6
 * We are hiring developers from all over the world. Join us and start your new, exciting adventure and become part of us: https://bitbag.io/career
7
*/
8
9
declare(strict_types=1);
10
11
namespace BitBag\SyliusWishlistPlugin\EventListener;
12
13
use BitBag\SyliusWishlistPlugin\Command\Wishlist\CreateNewWishlist;
14
use BitBag\SyliusWishlistPlugin\Entity\WishlistInterface;
15
use BitBag\SyliusWishlistPlugin\Resolver\WishlistsResolverInterface;
16
use Symfony\Component\HttpFoundation\Cookie;
17
use Symfony\Component\HttpFoundation\RequestStack;
18
use Symfony\Component\HttpFoundation\Response;
19
use Symfony\Component\HttpKernel\Event\ResponseEvent;
20
use Symfony\Component\Messenger\HandleTrait;
21
use Symfony\Component\Messenger\MessageBusInterface;
22
23
final class CreateNewWishlistListener
24
{
25
    use HandleTrait;
26
27
    private RequestStack $requestStack;
28
29
    private string $wishlistCookieToken;
30
31
    private WishlistsResolverInterface $wishlistsResolver;
32
33
    public function __construct(
34
        RequestStack $requestStack,
35
        string $wishlistCookieToken,
36
        WishlistsResolverInterface $wishlistsResolver,
37
        MessageBusInterface $messageBus
38
    ) {
39
        $this->requestStack = $requestStack;
40
        $this->wishlistCookieToken = $wishlistCookieToken;
41
        $this->wishlistsResolver = $wishlistsResolver;
42
        $this->messageBus = $messageBus;
43
    }
44
45
    public function onKernelResponse(ResponseEvent $event): void
46
    {
47
        if (!$event->isMasterRequest()) {
48
            return;
49
        }
50
        $request = $event->getRequest();
51
52
        if (!$request->cookies->has($this->wishlistCookieToken)) {
53
            return;
54
        }
55
56
        $wishlists = $this->wishlistsResolver->resolve();
57
58
        if (empty($wishlists)) {
59
            $response = $event->getResponse();
60
            $this->createNewWishlist($response);
61
        }
62
    }
63
64
    private function createNewWishlist(Response $response): void
65
    {
66
        $createNewWishlist = new CreateNewWishlist();
67
68
        /** @var WishlistInterface $wishlist */
69
        $wishlist = $this->handle($createNewWishlist);
70
71
        $this->setWishlistCookieToken($response, $wishlist);
72
    }
73
74
    private function setWishlistCookieToken(Response $response, WishlistInterface $wishlist): void
75
    {
76
        $cookie = new Cookie($this->wishlistCookieToken, $wishlist->getToken(), strtotime('+1 year'));
77
78
        $response->headers->setCookie($cookie);
79
    }
80
}
81