/** * @return ViewModel|Response */ public function updateAction() { $campaignId = $this->params('entityId'); /** @var Campaign $campaign */ $campaign = $this->campaignRepository->getOneById($campaignId); if (!$campaign) { return $this->redirect()->toRoute(static::BASE_ROUTE); } $message = $this->messageRepository->getSystemMessage($campaignId); if (!$message) { $message = $this->messageRepository->getNewEntity(); } try { if ($this->manager->handlePost($campaign, $message)) { $msg = $this->userText->getMessage(EntityName::CAMPAIGN, Message::UPDATE_SUCCESS); $this->flashMessenger()->addSuccessMessage($msg); $this->addSystemMessageMessages(); return $this->redirect()->toRoute(static::BASE_ROUTE); } } catch (Manager\Exception\Db $exc) { $campaignMsg = $this->userText->getMessage(EntityName::CAMPAIGN, Message::SAVE_FAILED); $messageMsg = $this->userText->getMessage(EntityName::MESSAGE, Message::SAVE_FAILED); $this->currentMessages[FeedbackType::DANGER][] = $campaignMsg; $this->currentMessages[FeedbackType::DANGER][] = $messageMsg; } $this->layout()->currentMessages = $this->currentMessages; return new ViewModel(['form' => $this->manager->getForm(), 'tinyMceLang' => $this->tinyMceLang]); }
/** * @param Message $message * * @return bool */ private function closeSentMessage(Message $message) { $queue = $message->getQueue(); if (empty($queue)) { return false; } $allSent = true; foreach ($queue as $queueItem) { if (null === $queueItem->getSentAt()) { $allSent = false; break; } } if ($this->isVerbose()) { $messageAsString = $this->messageToString($message, count($queue)); if ($allSent) { $this->logger->info('Message to be closed: ' . $messageAsString); } else { $this->logger->info('Message is still being sent: ' . $messageAsString); } } if ($allSent) { $this->messageRepository->closeMessage($message); return true; } return false; }
/** * @param Entity\Subscriber $subscriber * @param Entity\Campaign $campaign * * @return bool */ public function handlePost(Entity\Subscriber $subscriber, Entity\Campaign $campaign) { $form = $this->getForm(); if (!$this->request->isPost()) { return false; } $form->setData($this->request->getPost()); if (!$form->isValid()) { return false; } $subscriber->populate($form->getData()); if (!$subscriber->hasCampaign($campaign)) { $subscriber->addCampaign($campaign); } $systemMessage = $this->messageRepository->getSystemMessage($campaign->getId()); $this->queueMessage($subscriber, $systemMessage); return $this->saveEntity($subscriber); }
/** * @return array */ private function getReadyMessagesCount() { $count = $this->messageRepo->getReadyMessagesCount(); $kpiType = self::INFO; if ($count > 40) { $kpiType = self::DANGER; } elseif ($count > 8) { $kpiType = self::WARNING; } return [self::READY_MESSAGE_COUNT => [self::VALUE => $count, self::TYPE => $kpiType]]; }
/** * @covers DmMailer\Repository\QueueItem */ public function testQueueMessage() { $oldQueueSize = count($this->sut->findAll()); $campaign = $this->campaignRepo->findOneBy(['entityId' => 1]); $message = $this->messageRepo->getNewEntity(); $message->setSubject('Subject'); $message->setBody('Body'); $message->setCampaign($campaign); $this->sut->queueMessage($message); $newQueueSize = count($this->sut->findAll()); $this->assertGreaterThan($oldQueueSize, $newQueueSize); $this->assertEquals($oldQueueSize + count($campaign->getSubscribers()), $newQueueSize); }
/** * @return JsonModel */ public function toggleOnHaltAction() { /** @var EntityMessage $message */ $message = $this->messageRepository->getOneById($this->params('entityId')); if (!$message) { return $this->redirect()->toRoute(static::BASE_ROUTE); } $message->setOnHalt(!$message->isOnHalt()); $response = $this->getResponse(); try { if ($this->manager->saveEntity($message)) { $response->setContent('true'); return $response; } } catch (DbException $exc) { $msg = $this->userText->getMessage(EntityName::MESSAGE, DmCommonMessage::SAVE_FAILED); $this->flashMessenger()->addErrorMessage($msg); } $this->flashMessenger()->clearCurrentMessages(); $response->setContent('false'); return $response; }
/** * @covers DmMailer\Repository\Message */ public function testGetReadyMessagesCount() { $actualResult = $this->sut->getReadyMessagesCount(); $this->assertEquals(3, $actualResult); }