src/Bidcoz/Bundle/FrontendBundle/Controller/Auction/WatchlistController.php line 27

Open in your IDE?
  1. <?php
  2. namespace Bidcoz\Bundle\FrontendBundle\Controller\Auction;
  3. use Bidcoz\Bundle\CoreBundle\Controller\CoreController;
  4. use Bidcoz\Bundle\CoreBundle\Entity\Auction\Auction;
  5. use Bidcoz\Bundle\CoreBundle\Entity\Auction\Item;
  6. use Bidcoz\Bundle\CoreBundle\Entity\Campaign;
  7. use Bidcoz\Bundle\CoreBundle\Entity\Organization;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. /**
  15.  * @Route("/{orgSlug}/{campaignSlug}/auction/watchlist")
  16.  * @IsGranted("VIEW", subject="organization")
  17.  * @IsGranted("FRONT_END", subject="campaign")
  18.  */
  19. class WatchlistController extends CoreController
  20. {
  21.     /**
  22.      * @Route("", name="auction_watchlist", methods={"GET"})
  23.      */
  24.     public function indexAction(Organization $organizationCampaign $campaignAuction $auction)
  25.     {
  26.         $user $this->getUser();
  27.         if (!$user) {
  28.             $this->messageAccessDeniedException('You must login or create an account to view wishlist');
  29.         }
  30.         $watchListItems $this->getWatchListManager()->getUserWatchlistItemsForCampaign($user$campaign);
  31.         $availableItems $unavailableItems $upcomingItems = [];
  32.         foreach ($watchListItems as $watchListItem) {
  33.             $item $watchListItem->getItem();
  34.             if ($item->isItemUpcoming()) {
  35.                 array_push($upcomingItems$item);
  36.             } else {
  37.                 $this->getItemManager()->isItemAvailable($item$user)
  38.                     ? array_push($availableItems$item)
  39.                     : array_push($unavailableItems$item);
  40.             }
  41.         }
  42.         return $this->render('@BidcozFrontend/Auction/watchlist.html.twig', [
  43.             'organization'     => $organization,
  44.             'campaign'         => $campaign,
  45.             'auction'          => $auction,
  46.             'availableItems'   => $availableItems,
  47.             'upcomingItems'    => $upcomingItems,
  48.             'unavailableItems' => $unavailableItems,
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("/add/{itemId}", name="auction_watchlist_add_item", methods={"POST"})
  53.      * @ParamConverter("item", class="Bidcoz\Bundle\CoreBundle\Entity\Auction\Item", options={"id" = "itemId"})
  54.      */
  55.     public function addItemAction(Request $requestOrganization $organizationCampaign $campaignAuction $auctionItem $item)
  56.     {
  57.         $user $this->getUser();
  58.         if (!$user) {
  59.             $this->messageAccessDeniedException('You must login or create an account to add to wishlist');
  60.         }
  61.         $this->getWatchListManager()->add($user$item);
  62.         $this->getEntityManager()->flush();
  63.         // CAU-341: the card watchlist heart toggles in place via fetch, so an XHR
  64.         // request gets JSON describing the new state instead of a redirect. The
  65.         // non-XHR path (the legacy form POST) keeps redirecting as before.
  66.         if ($request->isXmlHttpRequest()) {
  67.             return new JsonResponse(['watching' => true'itemId' => $item->getId()]);
  68.         }
  69.         return $this->redirectToRoute('auction_watchlist', [
  70.             'orgSlug'      => $organization->getSlug(),
  71.             'campaignSlug' => $campaign->getSlug(),
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/remove/{itemId}", name="auction_watchlist_remove_item", methods={"POST"})
  76.      * @ParamConverter("item", class="Bidcoz\Bundle\CoreBundle\Entity\Auction\Item", options={"id" = "itemId"})
  77.      */
  78.     public function removeItemAction(Request $requestOrganization $organizationCampaign $campaignAuction $auctionItem $item)
  79.     {
  80.         $user $this->getUser();
  81.         if (!$user) {
  82.             $this->messageAccessDeniedException('You must login or create an account to remove from wishlist');
  83.         }
  84.         $this->getWatchListManager()->remove($user$item);
  85.         $this->getEntityManager()->flush();
  86.         // CAU-341: JSON for the in-place card heart on XHR; legacy redirect otherwise.
  87.         if ($request->isXmlHttpRequest()) {
  88.             return new JsonResponse(['watching' => false'itemId' => $item->getId()]);
  89.         }
  90.         return $this->redirectToRoute('auction_watchlist', [
  91.             'orgSlug'      => $organization->getSlug(),
  92.             'campaignSlug' => $campaign->getSlug(),
  93.         ]);
  94.     }
  95. }