public function postUpdate(LifecycleEventArgs $args) { $entity = $args->getEntity(); $this->mailer = $this->container->get('mailer'); $this->mailerHelper = $this->container->get('stfalcon_event.mailer_helper'); $this->pdfGeneratorHelper = $this->container->get('stfalcon_event.pdf_generator.helper'); if ($entity instanceof Payment) { if ($entity->getStatus() === Payment::STATUS_PAID) { $tickets = $this->container->get('doctrine')->getManager()->getRepository('StfalconEventBundle:Ticket')->getAllTicketsByPayment($entity); /** @var Ticket $ticket */ foreach ($tickets as $ticket) { /** @var $user User */ $user = $ticket->getUser(); /** @var Event $event */ $event = $ticket->getEvent(); $successPaymentTemplateContent = $this->mailerHelper->renderTwigTemplate('StfalconEventBundle:Interkassa:_mail.html.twig', ['user' => $user, 'event' => $event]); $mail = new Mail(); $mail->addEvent($event); $mail->setText($successPaymentTemplateContent); $html = $this->pdfGeneratorHelper->generateHTML($ticket); $message = $this->mailerHelper->formatMessage($user, $mail); $message->setSubject($event->getName())->attach(\Swift_Attachment::newInstance($this->pdfGeneratorHelper->generatePdfFile($ticket, $html), $ticket->generatePdfFilename())); $this->mailer->send($message); } } } }
/** * Format message * * @param User $user * @param Mail $mail * * @return \Swift_Mime_MimePart */ public function formatMessage(User $user, Mail $mail) { // Get base template for email $templateContent = $this->twig->loadTemplate('StfalconEventBundle::email.html.twig'); $text = $mail->replace(array('%fullname%' => $user->getFullname(), '%user_id%' => $user->getId())); $body = $templateContent->render(array('text' => $text, 'mail' => $mail)); $message = \Swift_Message::newInstance()->setSubject($mail->getTitle())->setFrom('*****@*****.**', 'Frameworks Days')->setTo($user->getEmail())->setBody($body, 'text/html'); return $message; }
/** * Start mail action * * @param Request $request Request * @param Mail $mail Mail * @param int $value Value * * @return JsonResponse * * @Route("/mail/{id}/start/{value}", name="admin_start_mail") */ public function startMailAction(Request $request, Mail $mail, $value) { if (!$request->isXmlHttpRequest()) { throw new NotFoundHttpException(); } $em = $this->getDoctrine()->getManager(); $mail->setStart((bool) $value); $em->persist($mail); $em->flush(); return new JsonResponse(['status' => true, 'value' => $value]); }
/** * Format message * * @param User $user User * @param Mail $mail Mail * @param bool $isTestMessage Test message (needed for admin mails) * * @return \Swift_Mime_MimePart */ public function formatMessage(User $user, Mail $mail, $isTestMessage = false) { $text = $mail->replace(array('%fullname%' => $user->getFullname(), '%user_id%' => $user->getId())); $unsubscribeLink = $this->router->generate('unsubscribe', ['hash' => $user->getSalt(), 'userId' => $user->getId()], true); $body = $this->renderTwigTemplate('StfalconEventBundle::email.html.twig', ['text' => $text, 'mail' => $mail, 'unsubscribeLink' => $unsubscribeLink]); $title = $mail->getTitle(); // Модифицируем заголовок, если рассылка является для админов, т.е. тестовой if ($isTestMessage) { // Тестовая рассылка $title = 'Тестовая рассылка для админов! ' . $title; } return $this->createMessage($title, $user->getEmail(), $body); }
/** * @param Mail $mail * * @return mixed|void */ public function postPersist($mail) { $container = $this->getConfigurationPool()->getContainer(); /** @var \Doctrine\ORM\EntityManager $em */ $em = $container->get('doctrine')->getManager(); /** @var $users \Application\Bundle\UserBundle\Entity\User[] */ if ($mail->getEvents()->count() > 0 || $mail->getPaymentStatus()) { $users = $em->getRepository('StfalconEventBundle:Ticket')->findUsersByEventsAndStatus($mail->getEvents(), $mail->getPaymentStatus()); } else { $users = $em->getRepository('ApplicationUserBundle:User')->findAll(); } if (isset($users)) { $countSubscribers = 0; foreach ($users as $user) { if (!$user->isSubscribe() && !$mail->getPaymentStatus()) { continue; } $mailQueue = new MailQueue(); $mailQueue->setUser($user); $mailQueue->setMail($mail); $em->persist($mailQueue); $countSubscribers++; } $mail->setTotalMessages($countSubscribers); } $em->persist($mail); $em->flush(); return true; }
/** * Здесь мы получаем уведомления о статусе платежа и отмечаем платеж как успешный (или не отмечаем) * Также рассылаем письма и билеты всем, кто был привязан к платежу * * @Route("/payment/interaction", name="payment_interaction") * @Template() * * @param Request $request * * @return array */ public function interactionAction(Request $request) { /** @var Payment $payment */ $payment = $this->getDoctrine()->getRepository('StfalconPaymentBundle:Payment')->findOneBy(array('id' => $request->get('ik_pm_no'))); if (!$payment) { throw new Exception('Платеж №' . $request->get('ik_pm_no') . ' не найден!'); } // @var InterkassaService $interkassa $interkassa = $this->container->get('stfalcon_event.interkassa.service'); if ($payment->isPending() && 1) { //$interkassa->checkPayment($payment, $request)) { $payment->markedAsPaid(); $em = $this->getDoctrine()->getManager(); $em->flush(); /** @var Ticket $ticket */ foreach ($payment->getTickets() as $ticket) { // розсилка квитків // @todo тут має смикатись сервіс який розсилає мильники про успішну оплату квитків + пдф в аттачі $user = $ticket->getUser(); $event = $ticket->getEvent(); $twig = $this->get('twig'); // @todo ачуметь.. екшн в одному бандлі. вьюшка в іншому $successPaymentTemplateContent = $twig->loadTemplate('StfalconEventBundle:Interkassa:success_payment.html.twig')->render(array('event_slug' => $event->getSlug())); $mail = new Mail(); $mail->addEvent($event); $mail->setText($successPaymentTemplateContent); // Get base template for email $emailTemplateContent = $twig->loadTemplate('StfalconEventBundle::email.html.twig'); $dateFormatter = new \IntlDateFormatter('ru-RU', \IntlDateFormatter::NONE, \IntlDateFormatter::NONE, date_default_timezone_get(), \IntlDateFormatter::GREGORIAN, 'd MMMM Y'); $text = $mail->replace(array('%fullname%' => $user->getFullName(), '%event%' => $event->getName(), '%date%' => $dateFormatter->format($event->getDate()), '%place%' => $event->getPlace())); $body = $emailTemplateContent->render(array('text' => $text, 'mail' => $mail, 'add_bottom_padding' => true)); /** @var $pdfGen \Stfalcon\Bundle\EventBundle\Helper\PdfGeneratorHelper */ $pdfGen = $this->get('stfalcon_event.pdf_generator.helper'); $html = $pdfGen->generateHTML($ticket); $outputFile = 'ticket-' . $event->getSlug() . '.pdf'; $message = \Swift_Message::newInstance()->setSubject($event->getName())->setFrom('*****@*****.**', 'Frameworks Days')->setTo($user->getEmail())->setBody($body, 'text/html')->attach(\Swift_Attachment::newInstance($pdfGen->generatePdfFile($html, $outputFile), $outputFile)); $this->get('mailer')->send($message); } return new Response('SUCCESS', 200); } return new Response('FAIL', 400); }
/** * @param ObjectManager $manager */ public function load(ObjectManager $manager) { $userDefault = $manager->merge($this->getReference('user-default')); $mail = new Mail(); $mail->setTitle('test'); $mail->setText('test'); $mail->setPaymentStatus($manager->merge($this->getReference('payment'))); $mail->addEvent($manager->merge($this->getReference('event-zfday'))); $manager->persist($mail); $mq = new MailQueue(); $mq->setMail($mail); $mq->setUser($userDefault); $manager->persist($mq); $manager->flush(); $this->addReference('mail_queue', $mq); }