/** * Check that QR-code is valid, and register ticket * * @param Ticket $ticket Ticket * @param string $hash Hash * * @return Response * * @Route("/ticket/{ticket}/check/{hash}", name="event_ticket_registration") */ public function registrationAction(Ticket $ticket, $hash) { //bag fix test ticket.feature:27 // сверяем хеш билета и хеш из урла if ($ticket->getHash() != $hash) { return new Response('<h1 style="color:red">Невалидный хеш для билета №' . $ticket->getId() . '</h1>', 403); } //bag fix test ticket.feature:33 // любопытных пользователей перенаправляем на страницу события if (!$this->get('security.authorization_checker')->isGranted('ROLE_VOLUNTEER')) { return $this->redirect($this->generateUrl('event_show', array('event_slug' => $ticket->getEvent()->getSlug()))); } // проверяем существует ли оплата if ($ticket->getPayment() instanceof Payment) { // проверяем оплачен ли билет if ($ticket->getPayment()->isPaid()) { // проверяем или билет ещё не отмечен как использованный if ($ticket->isUsed()) { $timeNow = new \DateTime(); $timeDiff = $timeNow->diff($ticket->getUpdatedAt()); return new Response('<h1 style="color:orange">Билет №' . $ticket->getId() . ' был использован ' . $timeDiff->format('%i мин. назад') . '</h1>', 409); } } else { return new Response('<h1 style="color:orange">Билет №' . $ticket->getId() . ' не оплачен' . '</h1>'); } } else { return new Response('<h1 style="color:orange">Билет №' . $ticket->getId() . ' оплата не существует' . '</h1>'); } // отмечаем билет как использованный $em = $this->getDoctrine()->getManager(); $ticket->setUsed(true); $em->flush(); return new Response('<h1 style="color:green">Все ок. Билет №' . $ticket->getId() . ' отмечаем как использованный</h1>'); }
/** * @param \Doctrine\Common\Persistence\ObjectManager $manager */ public function load(ObjectManager $manager) { /** * @var \Application\Bundle\UserBundle\Entity\User $userDefault * @var \Application\Bundle\UserBundle\Entity\User $userDefault2 * @var \Application\Bundle\UserBundle\Entity\User $userDefault3 * @var \Application\Bundle\UserBundle\Entity\User $userAdmin */ $userDefault = $manager->merge($this->getReference('user-default')); $userDefault2 = $manager->merge($this->getReference('user-default2')); $userDefault3 = $manager->merge($this->getReference('user-default3')); $userAdmin = $manager->merge($this->getReference('user-admin')); $eventZfDay = $this->getReference('event-zfday'); $eventPHPDay = $this->getReference('event-phpday'); $eventNotActive = $this->getReference('event-not-active'); // Ticket 1 $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventZfDay)); $ticket->setAmountWithoutDiscount($eventZfDay->getCost()); $ticket->setAmount($eventZfDay->getCost()); $ticket->setUser($userDefault); $ticket->setPayment($manager->merge($this->getReference('payment'))); $manager->persist($ticket); $this->addReference('ticket-1', $ticket); // Ticket 2 $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventPHPDay)); $ticket->setUser($userDefault); $ticket->setAmountWithoutDiscount($eventPHPDay->getCost()); $ticket->setAmount($eventPHPDay->getCost()); $ticket->setPayment($manager->merge($this->getReference('pending'))); $manager->persist($ticket); $this->addReference('ticket-2', $ticket); // Ticket 3 $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventNotActive)); $ticket->setUser($userAdmin); $ticket->setAmountWithoutDiscount($eventNotActive->getCost()); $ticket->setAmount($eventNotActive->getCost()); $manager->persist($ticket); $this->addReference('ticket-3', $ticket); // Ticket 4: not used without payment $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventPHPDay)); $ticket->setUser($userDefault2); $ticket->setAmountWithoutDiscount($eventPHPDay->getCost()); $ticket->setAmount($eventPHPDay->getCost()); $ticket->setCreatedAt(new \DateTime('2012-12-12 00:00:00')); $ticket->setUsed(false); $manager->persist($ticket); // Ticket 5: not used with paid payment $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventPHPDay)); $ticket->setUser($userDefault2); $ticket->setAmountWithoutDiscount($eventPHPDay->getCost()); $ticket->setAmount($eventPHPDay->getCost()); $ticket->setCreatedAt(new \DateTime('2012-12-12 00:00:00')); $ticket->setUsed(false); $ticket->setPayment($manager->merge($this->getReference('payment2'))); $manager->persist($ticket); // Ticket 6: used with pending payment $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventPHPDay)); $ticket->setUser($userDefault2); $ticket->setAmountWithoutDiscount($eventPHPDay->getCost()); $ticket->setAmount($eventPHPDay->getCost()); $ticket->setCreatedAt(new \DateTime('2012-12-12 00:00:00')); $ticket->setUsed(true); $ticket->setPayment($manager->merge($this->getReference('pending2'))); $manager->persist($ticket); // Ticket 7: used with paid payment $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventPHPDay)); $ticket->setUser($userDefault2); $ticket->setAmountWithoutDiscount($eventPHPDay->getCost()); $ticket->setAmount($eventPHPDay->getCost()); $ticket->setCreatedAt(new \DateTime('2012-12-12 00:00:00')); $ticket->setUsed(true); $ticket->setPayment($manager->merge($this->getReference('payment2'))); $manager->persist($ticket); // Ticket 8: not used without payment $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventZfDay)); $ticket->setUser($userDefault3); $ticket->setAmountWithoutDiscount($eventZfDay->getCost()); $ticket->setAmount($eventZfDay->getCost()); $ticket->setCreatedAt(new \DateTime('2012-12-12 00:00:00')); $ticket->setUsed(false); $manager->persist($ticket); for ($i = 1; $i <= 100; $i++) { $ticket = new Ticket(); $ticket->setEvent($manager->merge($eventZfDay)); $ticket->setAmountWithoutDiscount($eventZfDay->getCost()); $ticket->setAmount($eventZfDay->getCost()); $ticket->setUser($manager->merge($this->getReference('user-default-' . $i))); $ticket->setPayment($manager->merge($this->getReference('payment'))); $manager->persist($ticket); $this->addReference('ticket-' . ($i + 3), $ticket); } $manager->flush(); }
/** * Check that QR-code is valid, and register ticket * * @param Ticket $ticket Ticket * @param string $hash Hash * * @return Response * * @Route("/ticket/{ticket}/check/{hash}", name="event_ticket_check") */ public function checkAction(Ticket $ticket, $hash) { // @todo ця вся (майже вся) логіка чудно виноситься в вьюшку // проверяем хеш if ($ticket->getHash() != $hash) { // не совпадает хеш билета и хеш в урле return new Response('<h1 style="color:red">Невалидный хеш для билета №' . $ticket->getId() . '</h1>', 403); } if (!$this->get('security.context')->isGranted('ROLE_VOLUNTEER')) { return $this->redirect($this->generateUrl('event_show', array('event_slug' => $ticket->getEvent()->getSlug()))); } // проверяем существует ли оплата if ($ticket->getPayment() instanceof Payment) { // проверяем оплачен ли билет if ($ticket->getPayment()->isPaid()) { // проверяем или билет ещё не отмечен как использованный if ($ticket->isUsed()) { $timeNow = new \DateTime(); $timeDiff = $timeNow->diff($ticket->getUpdatedAt()); return new Response('<h1 style="color:orange">Билет №' . $ticket->getId() . ' был использован ' . $timeDiff->format('%i мин. назад') . '</h1>', 409); } } else { return new Response('<h1 style="color:orange">Билет №' . $ticket->getId() . ' не оплачен' . '</h1>'); } } else { return new Response('<h1 style="color:orange">Билет №' . $ticket->getId() . ' оплата не существует' . '</h1>'); } $em = $this->getDoctrine()->getManager(); // отмечаем билет как использованный $ticket->setUsed(true); $em->flush(); return new Response('<h1 style="color:green">Все ок. Билет №' . $ticket->getId() . ' отмечаем как использованный</h1>'); }