_templateFactory = $templateFactory; $this->_subscriberFactory = $subscriberFactory; parent::__construct($context, $data); } /** * Get html code * * @return string */ protected function _toHtml() { /* @var $template \Magento\Newsletter\Model\Template */ $template = $this->_templateFactory->create(); if ($id = (int)$this->getRequest()->getParam('id')) { $this->loadTemplate($template, $id); } else { $previewData = $this->getPreviewData(); $template->setTemplateType($previewData['type']); $template->setTemplateText($previewData['text']); $template->setTemplateStyles($previewData['styles']); } \Magento\Framework\Profiler::start($this->profilerName); $vars = []; $vars['subscriber'] = $this->_subscriberFactory->create(); if ($this->getRequest()->getParam('subscriber')) { $vars['subscriber']->load($this->getRequest()->getParam('subscriber')); } $template->emulateDesign($this->getStoreId()); $templateProcessed = $this->_appState->emulateAreaCode( \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA, [$template, 'getProcessedTemplate'], [$vars] ); $template->revertDesign(); if ($template->isPlain()) { $templateProcessed = "
" . htmlspecialchars($templateProcessed) . "
"; } \Magento\Framework\Profiler::stop($this->profilerName); return $templateProcessed; } /** * Return template preview data * * @return array */ private function getPreviewData() { $previewData = []; $previewParams = ['type', 'text', 'styles']; $sessionData = []; if ($this->_backendSession->hasPreviewData()) { $sessionData = $this->_backendSession->getPreviewData(); } foreach ($previewParams as $param) { if (isset($sessionData[$param])) { $previewData[$param] = $sessionData[$param]; } else { $previewData[$param] = $this->getRequest()->getParam($param); } } return $previewData; } /** * Get Store Id from request or default * * @return int|null */ protected function getStoreId() { $storeId = (int)$this->getRequest()->getParam('store'); if ($storeId) { return $storeId; } $defaultStore = $this->_storeManager->getDefaultStoreView(); if (!$defaultStore) { $allStores = $this->_storeManager->getStores(); if (isset($allStores[0])) { $defaultStore = $allStores[0]; } } return $defaultStore ? $defaultStore->getId() : null; } /** * @param \Magento\Newsletter\Model\Template $template * @param string $id * @return $this */ protected function loadTemplate(\Magento\Newsletter\Model\Template $template, $id) { $template->load($id); return $this; } }