/** * Get data * * @param NodeInterface $node The node that is currently edited (optional) * @param array $arguments Additional arguments (key / value) * @return mixed JSON serializable data * @api */ public function getData(NodeInterface $node = NULL, array $arguments) { $result = array(); $result[''] = array('label' => 'Please select a receiver group'); foreach ($this->receiverGroupRepository->findAll() as $receiverGroup) { /* @var $receiverGroup \Sandstorm\Newsletter\Domain\Model\ReceiverGroup */ $result[$this->persistenceManager->getIdentifierByObject($receiverGroup)] = array('label' => $receiverGroup->getFullLabel()); } return $result; }
private function sendNewsletter(NodeInterface $node, $previewEmail = NULL, $languageKey = NULL, array $languageConfiguration = NULL) { // The Receiver Group association is specified in each individual node dimension, // but as the user submitted it in a certain Node Dimension, we're using *exactly* this // $receiverGroup which the user has submitted. /* @var $receiverGroup \Sandstorm\Newsletter\Domain\Model\ReceiverGroup */ $receiverGroup = $this->receiverGroupRepository->findByIdentifier($node->getProperty('receiverGroup')); if ($receiverGroup == NULL) { // TODO: log! return; } $context = ['workspaceName' => 'live']; if ($languageKey) { $context['dimensions'] = array('language' => $languageConfiguration['values']); $context['targetDimensions'] = array('language' => reset($languageConfiguration['values'])); } /* @var $nodeInCorrectDimension NodeInterface */ $nodeInCorrectDimension = (new FlowQuery(array($node)))->context($context)->get(0); if ($nodeInCorrectDimension == NULL) { // Skip un-existing nodes return; } $this->newsletterRenderingView->assign('value', $nodeInCorrectDimension); $html = $this->newsletterRenderingView->render(); $html = $this->styleInliningService->inlineStyles($html); $newsletter = new Newsletter(); $newsletterIdentifier = $node->getIdentifier(); if ($languageKey) { $newsletterIdentifier .= '_' . $languageKey; } if ($previewEmail) { $newsletterIdentifier .= uniqid('__', true); } $newsletter->setIdentifier($newsletterIdentifier); $newsletter->setHtmlContent($html); $newsletter->setSubject($nodeInCorrectDimension->getProperty('subjectTemplate')); if ($previewEmail !== NULL) { $newsletter->setReceiverEmailTemplate($previewEmail); $newsletter->setReceiverGroup($receiverGroup->singlePersonReceiverGroup()); } else { $newsletter->setReceiverEmailTemplate($nodeInCorrectDimension->getProperty('receiverEmailTemplate')); $newsletter->setReceiverGroup($receiverGroup); } $newsletter->setReceiverNameTemplate($nodeInCorrectDimension->getProperty('receiverNameTemplate')); $newsletter->setSenderEmailTemplate($nodeInCorrectDimension->getProperty('senderEmailTemplate')); $newsletter->setSenderNameTemplate($nodeInCorrectDimension->getProperty('senderNameTemplate')); $newsletter->setReplyToEmailTemplate($nodeInCorrectDimension->getProperty('replyToEmailTemplate')); $newsletter->setNewsletterLink($this->linkingService->createNodeUri($this->getControllerContext(), $nodeInCorrectDimension, NULL, NULL, TRUE)); $unsubscribeListIdentifier = null; if ($receiverGroup->getUnsubscribeList()) { $unsubscribeListIdentifier = $this->persistenceManager->getIdentifierByObject($receiverGroup->getUnsubscribeList()); } $newsletter->setUnsubscribeLink($this->uriBuilder->reset()->setCreateAbsoluteUri(TRUE)->uriFor('unsubscribe', array('unsubscribeList' => $unsubscribeListIdentifier), 'Unsubscribe', 'Sandstorm.Newsletter')); $this->newsletterSendingService->sendNewsletter($newsletter, $languageKey); }
public function findNumberOfRecipientsForGroup($identifier) { if (!$identifier) { return array(); } $receiverGroup = $this->receiverGroupRepository->findByIdentifier($identifier); /* @var $receiverGroup ReceiverGroup */ if (!$receiverGroup) { return array(); } $presets = $this->contentDimensionPresetSource->getAllPresets(); $result = array(); if (!isset($presets['language']['presets'])) { $result['all'] = $receiverGroup->getNumberOfReceivers(NULL); } else { foreach ($presets['language']['presets'] as $languageKey => $languageConfiguration) { $result[$languageKey] = $receiverGroup->getNumberOfReceivers($languageKey); } } return $result; }
/** * @param ReceiverGroup $receiverGroup * @throws \TYPO3\Flow\Persistence\Exception\IllegalObjectTypeException */ public function deleteReceiverGroupAction(ReceiverGroup $receiverGroup) { $this->receiverGroupRepository->remove($receiverGroup); $this->redirect('index'); }