Passed
Push — master ( 5a03eb...1fdf24 )
by Christian
11:41 queued 11s
created

WishlistController::index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 7
rs 10
1
<?php declare(strict_types=1);
2
3
namespace Shopware\Storefront\Controller;
4
5
use Shopware\Core\Checkout\Customer\SalesChannel\AbstractRemoveWishlistProductRoute;
6
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
7
use Shopware\Core\Framework\Routing\Annotation\Since;
8
use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
9
use Shopware\Core\System\SalesChannel\SalesChannelContext;
10
use Shopware\Storefront\Page\Wishlist\WishlistPageLoader;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\HttpFoundation\Response;
13
use Symfony\Component\Routing\Annotation\Route;
14
15
/**
16
 * @RouteScope(scopes={"storefront"})
17
 */
18
class WishlistController extends StorefrontController
19
{
20
    /**
21
     * @var WishlistPageLoader
22
     */
23
    private $wishlistPageLoader;
24
25
    /**
26
     * @var AbstractRemoveWishlistProductRoute
27
     */
28
    private $removeWishlistProductRoute;
29
30
    public function __construct(
31
        WishlistPageLoader $wishlistPageLoader,
32
        AbstractRemoveWishlistProductRoute $removeWishlistProductRoute
33
    ) {
34
        $this->wishlistPageLoader = $wishlistPageLoader;
35
        $this->removeWishlistProductRoute = $removeWishlistProductRoute;
36
    }
37
38
    /**
39
     * @Since("6.4.0.0")
40
     * @Route("/wishlist", name="frontend.wishlist.page", methods={"GET"})
41
     */
42
    public function index(Request $request, SalesChannelContext $context): Response
43
    {
44
        $this->denyAccessUnlessLoggedIn();
45
46
        $page = $this->wishlistPageLoader->load($request, $context);
47
48
        return $this->renderStorefront('@Storefront/storefront/page/wishlist/index.html.twig', ['page' => $page]);
49
    }
50
51
    /**
52
     * @Since("6.4.0.0")
53
     * @Route("/widgets/wishlist", name="widgets.wishlist.pagelet", methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true})
54
     */
55
    public function ajaxPagination(Request $request, SalesChannelContext $context): Response
56
    {
57
        $this->denyAccessUnlessLoggedIn();
58
59
        $request->request->set('no-aggregations', true);
60
61
        $page = $this->wishlistPageLoader->load($request, $context);
62
63
        return $this->renderStorefront('@Storefront/storefront/page/wishlist/index.html.twig', ['page' => $page]);
64
    }
65
66
    /**
67
     * @Since("6.4.0.0")
68
     * @Route("/wishlist/product/delete/{id}", name="frontend.wishlist.product.delete", methods={"POST", "DELETE"}, defaults={"XmlHttpRequest"=true})
69
     */
70
    public function remove(string $id, Request $request, SalesChannelContext $context): Response
71
    {
72
        $this->denyAccessUnlessLoggedIn();
73
74
        if (!$id) {
75
            throw new MissingRequestParameterException('Parameter id missing');
76
        }
77
78
        try {
79
            $this->removeWishlistProductRoute->delete($id, $context);
80
81
            $this->addFlash('success', $this->trans('wishlist.itemDeleteSuccess'));
82
        } catch (\Throwable $exception) {
83
            $this->addFlash('danger', $this->trans('error.message-default'));
84
        }
85
86
        return $this->createActionResponse($request);
87
    }
88
}
89