public function run(Message $message) { global $container; /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_send_immediate')); $recipientSourceData = $message->getRecipients(); if ($recipientSourceData) { $serviceName = sprintf('avisota.recipientSource.%s', $recipientSourceData->getId()); /** @var RecipientSourceInterface $recipientSource */ $recipientSource = $container[$serviceName]; $template = new \TwigTemplate('avisota/send/send_immediate', 'html5'); return $template->parse(array('message' => $message, 'count' => $recipientSource->countRecipients())); } return ''; }
protected function execute(Message $message, \BackendUser $user) { global $container; $input = \Input::getInstance(); $environment = Environment::getInstance(); $eventDispatcher = $this->getEventDispatcher(); $entityManager = EntityHelper::getEntityManager(); $queueData = $message->getQueue(); $serviceName = sprintf('avisota.queue.%s', $queueData->getId()); $queue = $container[$serviceName]; $recipientSourceData = $message->getRecipients(); $serviceName = sprintf('avisota.recipientSource.%s', $recipientSourceData->getId()); /** @var \Avisota\RecipientSource\RecipientSourceInterface $recipientSource */ $recipientSource = $container[$serviceName]; /** @var \Avisota\Contao\Message\Core\Renderer\MessageRendererInterface $renderer */ $renderer = $container['avisota.message.renderer']; $messageTemplate = $renderer->renderMessage($message); $event = new LoadLanguageFileEvent('avisota_message'); $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event); $idSerializer = new IdSerializer(); $idSerializer->setDataProviderName('orm_avisota_message'); $idSerializer->setId($message->getId()); $pidSerializer = new IdSerializer(); $pidSerializer->setDataProviderName('orm_avisota_message_category'); $pidSerializer->setId($message->getCategory()->getId()); $viewOnlinePage = $message->getCategory()->getViewOnlinePage(); if ($viewOnlinePage) { $getPageDetailsEvent = new GetPageDetailsEvent($viewOnlinePage); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GET_PAGE_DETAILS, $getPageDetailsEvent); $pageDetails = $getPageDetailsEvent->getPageDetails(); $generateUrlEvent = new GenerateFrontendUrlEvent($pageDetails, '/' . $message->getAlias(), $pageDetails['language']); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GENERATE_FRONTEND_URL, $generateUrlEvent); $url = $generateUrlEvent->getUrl(); if (!preg_match('~^\\w+:~', $url)) { $url = $environment->base . $url; } $generateViewOnlineUrlEvent = new GenerateViewOnlineUrlEvent($message, $url); $eventDispatcher->dispatch(MessageEvents::GENERATE_VIEW_ONLINE_URL, $generateViewOnlineUrlEvent); $url = sprintf($GLOBALS['TL_LANG']['avisota_message']['viewOnline'], $generateViewOnlineUrlEvent->getUrl()); } else { $url = false; } // TODO fix view online link $additionalData = array('view_online_link' => $url); $turn = $input->get('turn'); if (!$turn) { $turn = 0; } $loop = $input->get('loop'); if (!$loop) { $loop = uniqid(); } $event = new \Avisota\Contao\Core\Event\PreSendImmediateEvent($message, $turn, $loop); $eventDispatcher->dispatch('avisota.pre-send-immediate', $event); $queueHelper = new \Avisota\Queue\QueueHelper(); $queueHelper->setEventDispatcher($GLOBALS['container']['event-dispatcher']); $queueHelper->setQueue($queue); $queueHelper->setRecipientSource($recipientSource); $queueHelper->setMessageTemplate($messageTemplate); $queueHelper->setNewsletterData($additionalData); $count = $queueHelper->enqueue(30, $turn * 30); $event = new \Avisota\Contao\Core\Event\PostSendImmediateEvent($count, $message, $turn, $loop); $eventDispatcher->dispatch('avisota.post-send-immediate', $event); if ($count || $turn * 30 + 30 < $recipientSource->countRecipients()) { $eventDispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, new LoadLanguageFileEvent('avisota_message_preview')); $_SESSION['TL_CONFIRM'][] = sprintf($GLOBALS['TL_LANG']['avisota_message_preview']['messagesEnqueued'], $count, $turn + 1); $parameters = array('id' => $message->getId(), 'turn' => $turn + 1, 'loop' => $loop); $url = sprintf('%ssystem/modules/avisota-message/web/send_immediate.php?%s', $environment->base, http_build_query($parameters)); $entityManager->flush(); } else { $parameters = array('do' => 'avisota_outbox', 'execute' => $queueData->getId()); $url = sprintf('%scontao/main.php?%s', $environment->base, http_build_query($parameters)); $message->setSendOn(new \DateTime()); $entityManager->persist($message); $entityManager->flush(); } echo '<html><head><meta http-equiv="refresh" content="0; URL=' . $url . '"></head><body>Still generating...</body></html>'; exit; }