コード例 #1
0
 /**
  * {@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));
             }
         }
     }
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
ファイル: AbstractQueueTest.php プロジェクト: avisota/core
 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)));
 }
コード例 #4
0
ファイル: SimpleDatabaseQueue.php プロジェクト: avisota/core
 /**
  * @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;
 }