/** * Create HTML template for ticket invitation * * @param Ticket $ticket * * @return string */ public function generateHTML(Ticket $ticket) { $twig = $this->templating; $url = $this->router->generate('event_ticket_check', array('ticket' => $ticket->getId(), 'hash' => $ticket->getHash()), true); $this->qrCode->setText($url); $this->qrCode->setSize(105); $this->qrCode->setPadding(0); $qrCodeBase64 = base64_encode($this->qrCode->get()); $templateContent = $twig->loadTemplate('StfalconEventBundle:Ticket:show_pdf.html.twig'); $body = $templateContent->render(array('ticket' => $ticket, 'qrCodeBase64' => $qrCodeBase64, 'path' => realpath($this->kernel->getRootDir() . '/../web') . '/')); return $body; }
/** * 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>'); }
/** * 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>'); }