/** * 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; }
/** * Create queue. * * @param Queue $queue The queue. * * @return mixed * * @SuppressWarnings(PHPMD.Superglobals) */ public function createQueue(Queue $queue) { $queueFactoryClass = new \ReflectionClass($GLOBALS['AVISOTA_QUEUE'][$queue->getType()]); /** @var QueueFactoryInterface $queueFactory */ $queueFactory = $queueFactoryClass->newInstance(); return $queueFactory->createQueue($queue); }
/** * Create the simple queue database. * * @param Queue $queue * * @return SimpleDatabaseQueue */ public function createQueue(Queue $queue) { global $container; return new SimpleDatabaseQueue($container['doctrine.connection.default'], $queue->getSimpleDatabaseQueueTable(), true, $container['avisota.logger.queue'], $container['event-dispatcher']); }