/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $queueName = $input->getArgument('queue'); $transportName = $input->getArgument('transport'); $queue = $this->getContainer()->get($queueName); $transport = $this->getContainer()->get($transportName); if ($queue instanceof QueueInterface && $transport instanceof TransportInterface) { $messageLimit = (int) $input->getOption('message-limit'); $timeLimit = (int) $input->getOption('time-limit'); $config = new ExecutionConfig(); if ($messageLimit) { $config->setMessageLimit($messageLimit); } if ($timeLimit) { $config->setTimeLimit($timeLimit); } $statuses = $queue->execute($transport, $config); $tableData = array(); $successful = 0; $failed = 0; foreach ($statuses as $status) { $successful += $status->getSuccessfullySend(); $failed += count($status->getFailedRecipients()); $tableData[] = array($status->getMessage()->getSubject(), $status->getSuccessfullySend(), count($status->getFailedRecipients())); } if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { $tableData[] = array(); $tableData[] = array('Total:', $successful, $failed); /** @var TableHelper $table */ $table = $this->getApplication()->getHelperSet()->get('table'); $table->setHeaders(array('Message', 'Successful', 'Failed')); $table->setRows($tableData); $table->render($output); } else { if ($failed) { $output->writeln(sprintf('spooled %d emails, %d failed', $successful, $failed)); } else { $output->writeln(sprintf('spooled %d emails', $successful)); } } } }
/** * Execute the queue. * * @param Request $request The request. * @param Queue $queueData The queue data. * @param \BackendUser $user The user. * * @return JsonResponse * * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function execute(Request $request, Queue $queueData, \BackendUser $user) { global $container; if (!$queueData->getAllowManualSending()) { $response = new JsonResponse(array('error' => 'manual sending is forbidden'), 403); $response->prepare($request); return $response; } $serviceName = sprintf('avisota.queue.%s', $queueData->getId()); /** @var QueueInterface $queue */ $queue = $container[$serviceName]; $transportServiceName = sprintf('avisota.transport.%s', $queueData->getTransport()->getId()); $transport = $container[$transportServiceName]; $config = new ExecutionConfig(); if ($queueData->getMaxSendTime() > 0) { $config->setTimeLimit($queueData->getMaxSendTime()); } if ($queueData->getMaxSendCount() > 0) { $config->setMessageLimit($queueData->getMaxSendCount()); } $event = new PreQueueExecuteEvent($queue, $transport, $config); /** @var EventDispatcher $eventDispatcher */ $eventDispatcher = $GLOBALS['container']['event-dispatcher']; $eventDispatcher->dispatch(PreQueueExecuteEvent::NAME, $event); $queue = $event->getQueue(); $transport = $event->getTransport(); $config = $event->getConfig(); $status = $queue->execute($transport, $config); $jsonData = array('success' => 0, 'failed' => 0); foreach ($status as $stat) { $jsonData['success'] += $stat->getSuccessfullySend(); $jsonData['failed'] += count($stat->getFailedRecipients()); } $response = new JsonResponse($jsonData); $response->prepare($request); return $response; }
public function testSingleTransportDeciderAllow() { $queue = $this->createQueue(); $transport = $this->transportProvider->createTransport(); $imapConnection = $this->imapConnectionProvider->createImapConnection(); if (!$transport) { $this->markTestSkipped('Transport unavailable!'); return; } $message = new TestMessage(); $queue->enqueue($message); $decider = new TestQueueExecutionDecider(true); $config = new ExecutionConfig(); $config->setDecider($decider); $queue->execute($transport, $config); $this->assertEquals(0, $queue->length()); $this->assertEquals(1, $decider->getHits()); if (!$imapConnection) { $this->markTestIncomplete('Cannot check send messages, because imap connection is not available.'); return; } $this->assertEquals(1, $this->checkMessagesInMailbox($imapConnection, array($message))); }
/** * @param ExecutionConfig $config * * @return \array[] */ protected function selectRecords(ExecutionConfig $config = null) { $queryBuilder = $this->connection->createQueryBuilder(); $queryBuilder->select('q.*')->from($this->tableName, 'q'); if ($config) { if ($config->getMessageLimit() > 0) { $queryBuilder->setMaxResults($config->getMessageLimit()); } } /** @var Statement $statement */ $statement = $queryBuilder->execute(); $resultSet = $statement->fetchAll(); return $resultSet; }