src/Bidcoz/Bundle/FrontendBundle/Controller/Auction/FundANeedController.php line 28

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\FundANeed;
  5. use Bidcoz\Bundle\CoreBundle\Entity\Campaign;
  6. use Bidcoz\Bundle\CoreBundle\Entity\Organization;
  7. use Bidcoz\Bundle\FrontendBundle\Filter\ItemFilterType;
  8. use Bidcoz\Bundle\FrontendBundle\Filter\Order\ItemOrderType;
  9. use Doctrine\ORM\QueryBuilder;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  12. use Symfony\Component\Form\Form;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @Route("/{orgSlug}/{campaignSlug}/fund-a-need")
  17.  * @IsGranted("VIEW", subject="organization")
  18.  * @IsGranted("FRONT_END", subject="campaign")
  19.  */
  20. class FundANeedController extends CoreController
  21. {
  22.     /**
  23.      * @Route("/list", name="fund_a_need_catalog")
  24.      */
  25.     public function catalogAction(Request $requestOrganization $organizationCampaign $campaignFundANeed $fundANeed)
  26.     {
  27.         $qb $this->getRepository('Auction\Item')->getAuctionQueryBuilder($fundANeedtruefalse);
  28.         $filterForm $this->getItemFilterForm($fundANeed);
  29.         $hasFilter  $this->applyFilters($request$filterForm$qb);
  30.         $orderForm $this->getItemOrderForm($fundANeed);
  31.         $hasOrder  $this->applyOrder($request$orderForm$qb);
  32.         $items $this->getPagination($qb);
  33.         return $this->render('@BidcozFrontend/Auction/catalog.html.twig', [
  34.             'type'         => 'fund-a-need',
  35.             'title'        => $campaign->getFundANeedDisplayName().' Catalog',
  36.             'organization' => $organization,
  37.             'campaign'     => $campaign,
  38.             'auction'      => $fundANeed,
  39.             'filterForm'   => $filterForm->createView(),
  40.             'orderForm'    => $orderForm->createView(),
  41.             'items'        => $items,
  42.             'hasFilter'    => $hasFilter || $hasOrder,
  43.             'requireCC'    => !$this->isGranted('WITH_CC'$campaign),
  44.         ]);
  45.     }
  46.     protected function getItemFilterForm(FundANeed $fundANeed)
  47.     {
  48.         return $this->createForm(ItemFilterType::class, null, [
  49.             'auction'            => $fundANeed,
  50.             'permission_manager' => $this->getAuctionPermissionManager(),
  51.         ]);
  52.     }
  53.     protected function getItemOrderForm(FundANeed $fundANeed)
  54.     {
  55.         return $this->createForm(ItemOrderType::class);
  56.     }
  57.     protected function applyOrder(Request $requestForm $orderFormQueryBuilder $qb)
  58.     {
  59.         try {
  60.             if ($request->query->has($orderForm->getName())) {
  61.                 $orderForm->submit($request->query->get($orderForm->getName()));
  62.                 $sortKey        $orderForm->get('order')->getData();
  63.                 $orderQuery     ItemOrderType::getMap()[$sortKey];
  64.                 $fieldsAndOrder explode(','$orderQuery);
  65.                 foreach ($fieldsAndOrder as $idx => $fieldAndOrder) {
  66.                     [$field$order] = explode(':'$fieldAndOrder);
  67.                     if (=== $idx) {
  68.                         $qb->orderBy($field$order);
  69.                     } else {
  70.                         $qb->addorderBy($field$order);
  71.                     }
  72.                 }
  73.                 return true;
  74.             }
  75.         } catch (\Exception $e) {
  76.         }
  77.         return false;
  78.     }
  79. }