Esempio n. 1
0
 /**
  * @param string  $slug
  * @param Payment $payment
  *
  * @return RedirectResponse
  *
  * @Route("/event/{slug}/payment/{id}/participants/add", name="add_participants_to_payment")
  */
 public function addParticipantsToPaymentAction($slug, Payment $payment)
 {
     // @todo це мало порефакторитись а не тупо перенести кусок гавнокоду з одного місця в інше
     $event = $this->getEventBySlug($slug);
     $em = $this->getDoctrine()->getManager();
     $request = $this->getRequest();
     $ticketForm = $this->createForm('stfalcon_event_ticket');
     $ticketForm->bind($request);
     $participants = $ticketForm->get('participants')->getData();
     $alreadyPaidTickets = array();
     foreach ($participants as $participant) {
         $user = $this->get('fos_user.user_manager')->findUserBy(array('email' => $participant['email']));
         // создаем нового пользователя
         if (!$user) {
             $user = $this->get('fos_user.user_manager')->createUser();
             $user->setEmail($participant['email']);
             $user->setFullname($participant['name']);
             // генерация временного пароля
             $password = substr(str_shuffle(md5(time())), 5, 8);
             $user->setPlainPassword($password);
             $user->setEnabled(true);
             $this->get('fos_user.user_manager')->updateUser($user);
             // отправляем сообщение о регистрации
             $text = "Приветствуем " . $user->getFullname() . "!\n\nВы были автоматически зарегистрированы на сайте Frameworks Days.\n\nВаш временный пароль: " . $password . "\nЕго можно сменить на странице " . $this->generateUrl('fos_user_change_password', array(), true) . "\n\n\n---\nС уважением,\nКоманда Frameworks Days";
             $message = \Swift_Message::newInstance()->setSubject("Регистрация на сайте Frameworks Days")->setFrom('*****@*****.**', 'Frameworks Days')->setTo($user->getEmail())->setBody($text);
             // @todo каждый вызов отнимает память
             $this->get('mailer')->send($message);
         }
         // проверяем или у него нет билетов на этот ивент
         /** @var Ticket $ticket */
         $ticket = $em->getRepository('StfalconEventBundle:Ticket')->findOneBy(array('event' => $event->getId(), 'user' => $user->getId()));
         if (!$ticket) {
             $ticket = $this->createTicket($event, $user);
         }
         if (!$ticket->isPaid()) {
             if ($promoCode = $payment->getPromoCodeFromTickets()) {
                 if (!$ticket->getHasDiscount()) {
                     $ticket->setPromoCode($promoCode);
                 }
             }
             $payment->addTicket($ticket);
         } else {
             $alreadyPaidTickets[] = $user->getFullname();
         }
         $em->persist($payment);
         $em->persist($ticket);
     }
     $em->flush();
     if (!empty($alreadyPaidTickets)) {
         $this->get('session')->getFlashBag()->add('already_paid_tickets', implode(', ', $alreadyPaidTickets));
     }
     return $this->redirect($this->generateUrl('event_pay', array('event_slug' => $event->getSlug())));
 }