<?php
namespace Bidcoz\Bundle\FrontendBundle\Controller\Auction;
use Bidcoz\Bundle\CoreBundle\Controller\CoreController;
use Bidcoz\Bundle\CoreBundle\Entity\Auction\Auction;
use Bidcoz\Bundle\CoreBundle\Entity\Auction\Item;
use Bidcoz\Bundle\CoreBundle\Entity\Campaign;
use Bidcoz\Bundle\CoreBundle\Entity\Organization;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/{orgSlug}/{campaignSlug}/auction/watchlist")
* @IsGranted("VIEW", subject="organization")
* @IsGranted("FRONT_END", subject="campaign")
*/
class WatchlistController extends CoreController
{
/**
* @Route("", name="auction_watchlist", methods={"GET"})
*/
public function indexAction(Organization $organization, Campaign $campaign, Auction $auction)
{
$user = $this->getUser();
if (!$user) {
$this->messageAccessDeniedException('You must login or create an account to view wishlist');
}
$watchListItems = $this->getWatchListManager()->getUserWatchlistItemsForCampaign($user, $campaign);
$availableItems = $unavailableItems = $upcomingItems = [];
foreach ($watchListItems as $watchListItem) {
$item = $watchListItem->getItem();
if ($item->isItemUpcoming()) {
array_push($upcomingItems, $item);
} else {
$this->getItemManager()->isItemAvailable($item, $user)
? array_push($availableItems, $item)
: array_push($unavailableItems, $item);
}
}
return $this->render('@BidcozFrontend/Auction/watchlist.html.twig', [
'organization' => $organization,
'campaign' => $campaign,
'auction' => $auction,
'availableItems' => $availableItems,
'upcomingItems' => $upcomingItems,
'unavailableItems' => $unavailableItems,
]);
}
/**
* @Route("/add/{itemId}", name="auction_watchlist_add_item", methods={"POST"})
* @ParamConverter("item", class="Bidcoz\Bundle\CoreBundle\Entity\Auction\Item", options={"id" = "itemId"})
*/
public function addItemAction(Request $request, Organization $organization, Campaign $campaign, Auction $auction, Item $item)
{
$user = $this->getUser();
if (!$user) {
$this->messageAccessDeniedException('You must login or create an account to add to wishlist');
}
$this->getWatchListManager()->add($user, $item);
$this->getEntityManager()->flush();
if ($request->isXmlHttpRequest()) {
return $this->redirectToRoute('auction_item', [
'orgSlug' => $organization->getSlug(),
'campaignSlug' => $campaign->getSlug(),
'itemId' => $item->getId(),
]);
} else {
return $this->redirectToRoute('auction_watchlist', [
'orgSlug' => $organization->getSlug(),
'campaignSlug' => $campaign->getSlug(),
]);
}
}
/**
* @Route("/remove/{itemId}", name="auction_watchlist_remove_item", methods={"POST"})
* @ParamConverter("item", class="Bidcoz\Bundle\CoreBundle\Entity\Auction\Item", options={"id" = "itemId"})
*/
public function removeItemAction(Request $request, Organization $organization, Campaign $campaign, Auction $auction, Item $item)
{
$user = $this->getUser();
if (!$user) {
$this->messageAccessDeniedException('You must login or create an account to remove from wishlist');
}
$this->getWatchListManager()->remove($user, $item);
$this->getEntityManager()->flush();
if ($request->isXmlHttpRequest()) {
return $this->redirectToRoute('auction_item', [
'orgSlug' => $organization->getSlug(),
'campaignSlug' => $campaign->getSlug(),
'itemId' => $item->getId(),
]);
} else {
return $this->redirectToRoute('auction_watchlist', [
'orgSlug' => $organization->getSlug(),
'campaignSlug' => $campaign->getSlug(),
]);
}
}
}