vendor/bitbag/wishlist-plugin/src/Resolver/WishlistsResolver.php line 95

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file was created by developers working at BitBag
  4.  * Do you need more information about us and what we do? Visit our https://bitbag.io website!
  5.  * 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
  6. */
  7. declare(strict_types=1);
  8. namespace BitBag\SyliusWishlistPlugin\Resolver;
  9. use BitBag\SyliusWishlistPlugin\Command\Wishlist\CreateNewWishlist;
  10. use BitBag\SyliusWishlistPlugin\Command\Wishlist\CreateWishlist;
  11. use BitBag\SyliusWishlistPlugin\Entity\WishlistInterface;
  12. use BitBag\SyliusWishlistPlugin\Repository\WishlistRepositoryInterface;
  13. use Sylius\Component\Channel\Context\ChannelContextInterface;
  14. use Sylius\Component\Channel\Context\ChannelNotFoundException;
  15. use Sylius\Component\Core\Model\ChannelInterface;
  16. use Sylius\Component\Core\Model\ShopUserInterface;
  17. use Sylius\Component\User\Model\UserInterface;
  18. use Symfony\Component\Messenger\HandleTrait;
  19. use Symfony\Component\Messenger\MessageBusInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  21. final class WishlistsResolver implements WishlistsResolverInterface
  22. {
  23.     use HandleTrait;
  24.     private WishlistRepositoryInterface $wishlistRepository;
  25.     private TokenStorageInterface $tokenStorage;
  26.     private WishlistCookieTokenResolverInterface $wishlistCookieTokenResolver;
  27.     private ChannelContextInterface $channelContext;
  28.     private TokenUserResolverInterface $tokenUserResolver;
  29.     public function __construct(
  30.         WishlistRepositoryInterface $wishlistRepository,
  31.         TokenStorageInterface $tokenStorage,
  32.         WishlistCookieTokenResolverInterface $wishlistCookieTokenResolver,
  33.         ChannelContextInterface $channelContext,
  34.         MessageBusInterface $messageBus,
  35.         TokenUserResolverInterface $tokenUserResolver,
  36.     ) {
  37.         $this->wishlistRepository $wishlistRepository;
  38.         $this->tokenStorage $tokenStorage;
  39.         $this->wishlistCookieTokenResolver $wishlistCookieTokenResolver;
  40.         $this->channelContext $channelContext;
  41.         $this->messageBus $messageBus;
  42.         $this->tokenUserResolver $tokenUserResolver;
  43.     }
  44.     public function resolve(): array
  45.     {
  46.         $token $this->tokenStorage->getToken();
  47.         $user $this->tokenUserResolver->resolve($token);
  48.         $wishlistCookieToken $this->wishlistCookieTokenResolver->resolve();
  49.         try {
  50.             $channel $this->channelContext->getChannel();
  51.         } catch (ChannelNotFoundException $foundException) {
  52.             $channel null;
  53.         }
  54.         if ($user instanceof ShopUserInterface) {
  55.             return $this->wishlistRepository->findAllByShopUserAndToken($user->getId(), $wishlistCookieToken);
  56.         }
  57.         if ($channel instanceof ChannelInterface) {
  58.             return $this->wishlistRepository->findAllByAnonymousAndChannel($wishlistCookieToken$channel);
  59.         }
  60.         return $this->wishlistRepository->findAllByAnonymous($wishlistCookieToken);
  61.     }
  62.     public function resolveAndCreate(): array
  63.     {
  64.         $wishlists $this->resolve();
  65.         $wishlistCookieToken $this->wishlistCookieTokenResolver->resolve();
  66.         try {
  67.             $channel $this->channelContext->getChannel();
  68.         } catch (ChannelNotFoundException $foundException) {
  69.             $channel null;
  70.         }
  71.         if (=== count($wishlists)) {
  72.             $createWishlist = new CreateWishlist($wishlistCookieToken$channel?->getCode());
  73.             /** @var WishlistInterface $wishlist */
  74.             $wishlist $this->handle($createWishlist);
  75.             $wishlists = [$wishlist];
  76.         }
  77.         return $wishlists;
  78.     }
  79. }