Preview.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Newsletter\Block\Adminhtml\Template;
  7. /**
  8. * Newsletter template preview block
  9. *
  10. * @api
  11. * @since 100.0.2
  12. */
  13. class Preview extends \Magento\Backend\Block\Widget
  14. {
  15. /**
  16. * Name for profiler
  17. *
  18. * @var string
  19. */
  20. protected $profilerName = "newsletter_template_proccessing";
  21. /**
  22. * @var \Magento\Newsletter\Model\TemplateFactory
  23. */
  24. protected $_templateFactory;
  25. /**
  26. * @var \Magento\Newsletter\Model\SubscriberFactory
  27. */
  28. protected $_subscriberFactory;
  29. /**
  30. * @param \Magento\Backend\Block\Template\Context $context
  31. * @param \Magento\Newsletter\Model\TemplateFactory $templateFactory
  32. * @param \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory
  33. * @param array $data
  34. */
  35. public function __construct(
  36. \Magento\Backend\Block\Template\Context $context,
  37. \Magento\Newsletter\Model\TemplateFactory $templateFactory,
  38. \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory,
  39. array $data = []
  40. ) {
  41. $this->_templateFactory = $templateFactory;
  42. $this->_subscriberFactory = $subscriberFactory;
  43. parent::__construct($context, $data);
  44. }
  45. /**
  46. * Get html code
  47. *
  48. * @return string
  49. */
  50. protected function _toHtml()
  51. {
  52. /* @var $template \Magento\Newsletter\Model\Template */
  53. $template = $this->_templateFactory->create();
  54. if ($id = (int)$this->getRequest()->getParam('id')) {
  55. $this->loadTemplate($template, $id);
  56. } else {
  57. $previewData = $this->getPreviewData();
  58. $template->setTemplateType($previewData['type']);
  59. $template->setTemplateText($previewData['text']);
  60. $template->setTemplateStyles($previewData['styles']);
  61. }
  62. \Magento\Framework\Profiler::start($this->profilerName);
  63. $vars = [];
  64. $vars['subscriber'] = $this->_subscriberFactory->create();
  65. if ($this->getRequest()->getParam('subscriber')) {
  66. $vars['subscriber']->load($this->getRequest()->getParam('subscriber'));
  67. }
  68. $template->emulateDesign($this->getStoreId());
  69. $templateProcessed = $this->_appState->emulateAreaCode(
  70. \Magento\Newsletter\Model\Template::DEFAULT_DESIGN_AREA,
  71. [$template, 'getProcessedTemplate'],
  72. [$vars]
  73. );
  74. $template->revertDesign();
  75. if ($template->isPlain()) {
  76. $templateProcessed = "<pre>" . htmlspecialchars($templateProcessed) . "</pre>";
  77. }
  78. \Magento\Framework\Profiler::stop($this->profilerName);
  79. return $templateProcessed;
  80. }
  81. /**
  82. * Return template preview data
  83. *
  84. * @return array
  85. */
  86. private function getPreviewData()
  87. {
  88. $previewData = [];
  89. $previewParams = ['type', 'text', 'styles'];
  90. $sessionData = [];
  91. if ($this->_backendSession->hasPreviewData()) {
  92. $sessionData = $this->_backendSession->getPreviewData();
  93. }
  94. foreach ($previewParams as $param) {
  95. if (isset($sessionData[$param])) {
  96. $previewData[$param] = $sessionData[$param];
  97. } else {
  98. $previewData[$param] = $this->getRequest()->getParam($param);
  99. }
  100. }
  101. return $previewData;
  102. }
  103. /**
  104. * Get Store Id from request or default
  105. *
  106. * @return int|null
  107. */
  108. protected function getStoreId()
  109. {
  110. $storeId = (int)$this->getRequest()->getParam('store');
  111. if ($storeId) {
  112. return $storeId;
  113. }
  114. $defaultStore = $this->_storeManager->getDefaultStoreView();
  115. if (!$defaultStore) {
  116. $allStores = $this->_storeManager->getStores();
  117. if (isset($allStores[0])) {
  118. $defaultStore = $allStores[0];
  119. }
  120. }
  121. return $defaultStore ? $defaultStore->getId() : null;
  122. }
  123. /**
  124. * @param \Magento\Newsletter\Model\Template $template
  125. * @param string $id
  126. * @return $this
  127. */
  128. protected function loadTemplate(\Magento\Newsletter\Model\Template $template, $id)
  129. {
  130. $template->load($id);
  131. return $this;
  132. }
  133. }