public function previewAction() { $id = $this->params()->fromRoute('id', 0); $viewModel = new NewsletterModel(null, ['parse_images' => true]); $viewModel->setTemplate('template/' . $id); return $viewModel; }
/** * @param int $id * @return int * @throws UthandoException */ public function sendMessage($id) { $message = $this->getById($id); if ($message->isSent()) { throw new UthandoException('Cannot send message out again.'); } // we need to set the server url before add to mail queue $serverUrlHelper = $this->getService('ViewHelperManager')->get('ServerUrl'); $basePathUrlHelper = $this->getService('ViewHelperManager')->get('BasePath'); $serverUrl = $serverUrlHelper() . $basePathUrlHelper(); $iniReader = new IniReader(); $iniWriter = new IniWriter(); $params = $iniReader->fromString($message->getParams()); $params['server_url'] = $serverUrl; $message->setParams($iniWriter->toString($params)); $viewModel = new NewsletterModel(); $viewModel->setTemplate('message/' . $message->getMessageId()); /* @var $subscriptionMapper SubscriptionMapper */ $subscriptionMapper = $this->getService('UthandoNewsletterSubscription')->getMapper(); $subscriptions = $subscriptionMapper->getSubscriptionsByNewsletterId($message->getNewsletterId()); $subscriberIds = []; /* @var $subscription SubscriptionModel */ foreach ($subscriptions as $subscription) { $subscriberIds[] = $subscription->getSubscriberId(); } /* @var $subscriberMapper SubscriberMapper */ $subscriberMapper = $this->getService('UthandoNewsletterSubscriber')->getMapper(); $subscribers = $subscriberMapper->getSubscribersById($subscriberIds); $count = 0; /* @var $subscriber SubscriberModel */ foreach ($subscribers as $subscriber) { $this->getEventManager()->trigger('mail.queue', $this, ['recipient' => ['name' => $subscriber->getName(), 'address' => $subscriber->getEmail()], 'layout' => $viewModel, 'body' => null, 'subject' => $message->getSubject(), 'renderer' => 'ViewNewsletterRenderer', 'transport' => 'default']); $count++; } // set message as sent and save to database. $message->setDateSent(null)->setSent(true); $this->save($message); return $count; }