src/Calendar/Controller/CalendarController.php line 143

Open in your IDE?
  1. <?php
  2. namespace App\Calendar\Controller;
  3. use App\Auction\Manager\AuctionManager;
  4. use App\Calendar\Calendar;
  5. use App\Calendar\Form\Type\CalendarFilterType;
  6. use App\EventMap\EventMap;
  7. use App\Profile\Model\Profile;
  8. use App\Race\Manager\RaceManager;
  9. use Carbon\CarbonImmutable;
  10. use Doctrine\DBAL\Query\QueryBuilder;
  11. use Pimcore\Controller\FrontendController;
  12. use Pimcore\Model\DataObject\Raceday;
  13. use Pimcore\Model\DataObject\Racingtrack;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. class CalendarController extends FrontendController
  17. {
  18.   /**
  19.    * Calendar Page.
  20.    *
  21.    * @return Response
  22.    */
  23.   public function detail(
  24.     Request $request,
  25.     Calendar $calendar,
  26.     AuctionManager $auctionManager,
  27.     RaceManager $raceManager,
  28.     EventMap $eventMap
  29.   ) {
  30.     // Setup Options from Request
  31.     $date $request->query->get('date');
  32.     $year $date['year'] ?? date('Y');
  33.     $month $date['month'] ?? date('m');
  34.     $topic $request->get('topic''auctions');
  35.     $selectedMonth CarbonImmutable::create($year$month);
  36.     $race $request->get('race'null);
  37.     $period CarbonImmutable::create($year$month) > CarbonImmutable::now() ? 'future' 'past';
  38.     $country $race $race['country'] : null;
  39.     $surface $race $race['surface'] : null;
  40.     $direction $race $race['direction'] : null;
  41.     $racingtrack $race $race['racingtrack'] : null;
  42.     $auction $request->get('auction'null);
  43.     $auctionhouse $auction $auction['auctionhouse'] : null;
  44.     $auctionType $auction $auction['type'] : null;
  45.     // Generate Events from Auctions & Races
  46.     $events = [];
  47.     if ('racedays' == $topic) {
  48.       // $events = $raceManager->getRacesByMonthGroupedByDate($selectedMonth);
  49.       $events Raceday::getList();
  50.       $events->setCondition(
  51.         '(date BETWEEN :firstDay AND :lastDay)',
  52.         [
  53.           'firstDay' => $selectedMonth->firstOfMonth(),
  54.           'lastDay' => $selectedMonth->lastOfMonth(),
  55.         ]
  56.       );
  57.       $events->setOrderKey('date');
  58.       $racetracks Profile::getList();
  59.       $racetracks->onCreateQueryBuilder(function (QueryBuilder $queryBuilder) {
  60.         $queryBuilder->join('object_profile''object_brick_query_RacetrackProfile_profile''racingtrack''object_profile.oo_id = racingtrack.o_id');
  61.       });
  62.       if ($racingtrack) {
  63.         $racetracks->addConditionParam('oo_id = :id', ['id' => $racingtrack]);
  64.       }
  65.       if ($surface) {
  66.         $racetracks->addConditionParam('surface = :surface', ['surface' => $surface]);
  67.       }
  68.       if ($direction) {
  69.         $racetracks->addConditionParam('direction = :direction', ['direction' => $direction]);
  70.       }
  71.       if ($country) {
  72.         $racetracks->addConditionParam('country = :country', ['country' => $country]);
  73.       }
  74.       $events->addConditionParam('racingtrack__id IN (:id)', ['id' => $racetracks->loadIdList()]);
  75.       $events $events->load();
  76.     } elseif ('races' === $topic) {
  77.       $events $raceManager->getRacesByMonthGroupedByDate($selectedMonth);
  78.       // $events = array_filter($events, function($race) {
  79.       //   return $race->getCountry() == $country && $race->getSurface() == $surface && $race->getDirection() == $direction && $race->getRacetrack() == $racetrack;
  80.       // } );
  81.       $racetracks Racingtrack::getList();
  82.       if ($racingtrack) {
  83.         $racetracks->addConditionParam('oo_id = :id', ['id' => $racingtrack]);
  84.       }
  85.       if ($surface) {
  86.         $racetracks->addConditionParam('surface = :surface', ['surface' => $surface]);
  87.       }
  88.       if ($direction) {
  89.         $racetracks->addConditionParam('direction = :direction', ['direction' => $direction]);
  90.       }
  91.       if ($country) {
  92.         $racetracks->addConditionParam('country = :country', ['country' => $country]);
  93.       }
  94.       $events->addConditionParam('racingtrack__id IN (:id)', ['id' => $racetracks->loadIdList()]);
  95.       $events $events->load();
  96.     } elseif ('auctions' === $topic) {
  97.       $events $auctionManager->getAuctionsByMonth($selectedMonth);
  98.       if ($auctionhouse) {
  99.         $events->addConditionParam('auctionhouse__id = :id', ['id' => $auctionhouse]);
  100.         // dd([$auctionhouse, $events, $events->load()]);
  101.       }
  102.       if ($auctionType) {
  103.         $events->addConditionParam('auctionType = :type', ['type' => $auctionType]);
  104.       }
  105.       $events $events->load();
  106.     }
  107.     // Setup Calendar
  108.     $calendar->setMonth($selectedMonth);
  109.     $calendar->generateEvents($events);
  110.     $weeks $calendar->getWeeksWithEvents();
  111.     $days $calendar->getDaysWithEvents();
  112.     // Create Filter for Calendar & Map
  113.     $filter $this->createForm(CalendarFilterType::class, [
  114.       'date' => $selectedMonth,
  115.       'topic' => $topic,
  116.     ], [
  117.       'method' => 'GET',
  118.       'period' => $period,
  119.       'surface' => $surface,
  120.       'direction' => $direction,
  121.       'country' => $country,
  122.       'racingtrack' => $racingtrack,
  123.       'auctionhouse' => $auctionhouse,
  124.       'auctionType' => $auctionType,
  125.     ]);
  126.     // Generate Marker for Events
  127.     $marker $eventMap->generateMarker($events);
  128.     return $this->renderForm('document/calendar.html.twig', [
  129.       'topic' => $topic,
  130.       'month' => $selectedMonth,
  131.       'weeks' => $weeks,
  132.       'days' => $days,
  133.       'filter' => $filter,
  134.       'marker' => $marker,
  135.     ]);
  136.   }
  137. }