Template.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Newsletter\Model;
  7. /**
  8. * Template model
  9. *
  10. * @method string getTemplateCode()
  11. * @method \Magento\Newsletter\Model\Template setTemplateCode(string $value)
  12. * @method \Magento\Newsletter\Model\Template setTemplateText(string $value)
  13. * @method \Magento\Newsletter\Model\Template setTemplateTextPreprocessed(string $value)
  14. * @method string getTemplateStyles()
  15. * @method \Magento\Newsletter\Model\Template setTemplateStyles(string $value)
  16. * @method int getTemplateType()
  17. * @method \Magento\Newsletter\Model\Template setTemplateType(int $value)
  18. * @method string getTemplateSubject()
  19. * @method \Magento\Newsletter\Model\Template setTemplateSubject(string $value)
  20. * @method string getTemplateSenderName()
  21. * @method \Magento\Newsletter\Model\Template setTemplateSenderName(string $value)
  22. * @method string getTemplateSenderEmail()
  23. * @method \Magento\Newsletter\Model\Template setTemplateSenderEmail(string $value)
  24. * @method int getTemplateActual()
  25. * @method \Magento\Newsletter\Model\Template setTemplateActual(int $value)
  26. * @method string getAddedAt()
  27. * @method \Magento\Newsletter\Model\Template setAddedAt(string $value)
  28. * @method string getModifiedAt()
  29. * @method \Magento\Newsletter\Model\Template setModifiedAt(string $value)
  30. *
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  33. *
  34. * @api
  35. * @since 100.0.2
  36. */
  37. class Template extends \Magento\Email\Model\AbstractTemplate
  38. {
  39. /**
  40. * Mail object
  41. *
  42. * @deprecated 100.3.0 Unused property
  43. *
  44. */
  45. protected $_mail;
  46. /**
  47. * Store manager to emulate design
  48. *
  49. * @var \Magento\Store\Model\StoreManagerInterface
  50. */
  51. protected $_storeManager;
  52. /**
  53. * Http-request, used to determine current store in multi-store mode
  54. *
  55. * @var \Magento\Framework\App\RequestInterface
  56. */
  57. protected $_request;
  58. /**
  59. * Filter factory
  60. *
  61. * @var \Magento\Newsletter\Model\Template\FilterFactory
  62. */
  63. protected $_filterFactory;
  64. /**
  65. * @param \Magento\Framework\Model\Context $context
  66. * @param \Magento\Framework\View\DesignInterface $design
  67. * @param \Magento\Framework\Registry $registry
  68. * @param \Magento\Store\Model\App\Emulation $appEmulation
  69. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  70. * @param \Magento\Framework\View\Asset\Repository $assetRepo
  71. * @param \Magento\Framework\Filesystem $filesystem
  72. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  73. * @param \Magento\Email\Model\Template\Config $emailConfig
  74. * @param \Magento\Email\Model\TemplateFactory $templateFactory The template directive requires an email
  75. * template model, not newsletter model, as templates overridden in backend are loaded from email table.
  76. * @param \Magento\Framework\Filter\FilterManager $filterManager
  77. * @param \Magento\Framework\Url|\Magento\Framework\UrlInterface $urlModel
  78. * @param \Magento\Framework\App\RequestInterface $request
  79. * @param \Magento\Newsletter\Model\Template\FilterFactory $filterFactory ,
  80. * @param array $data
  81. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  82. */
  83. public function __construct(
  84. \Magento\Framework\Model\Context $context,
  85. \Magento\Framework\View\DesignInterface $design,
  86. \Magento\Framework\Registry $registry,
  87. \Magento\Store\Model\App\Emulation $appEmulation,
  88. \Magento\Store\Model\StoreManagerInterface $storeManager,
  89. \Magento\Framework\View\Asset\Repository $assetRepo,
  90. \Magento\Framework\Filesystem $filesystem,
  91. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  92. \Magento\Email\Model\Template\Config $emailConfig,
  93. \Magento\Email\Model\TemplateFactory $templateFactory,
  94. \Magento\Framework\Filter\FilterManager $filterManager,
  95. \Magento\Framework\UrlInterface $urlModel,
  96. \Magento\Framework\App\RequestInterface $request,
  97. \Magento\Newsletter\Model\Template\FilterFactory $filterFactory,
  98. array $data = []
  99. ) {
  100. parent::__construct(
  101. $context,
  102. $design,
  103. $registry,
  104. $appEmulation,
  105. $storeManager,
  106. $assetRepo,
  107. $filesystem,
  108. $scopeConfig,
  109. $emailConfig,
  110. $templateFactory,
  111. $filterManager,
  112. $urlModel,
  113. $data
  114. );
  115. $this->_storeManager = $storeManager;
  116. $this->_request = $request;
  117. $this->_filterFactory = $filterFactory;
  118. }
  119. /**
  120. * Initialize resource model
  121. *
  122. * @return void
  123. */
  124. protected function _construct()
  125. {
  126. $this->_init(\Magento\Newsletter\Model\ResourceModel\Template::class);
  127. }
  128. /**
  129. * Validate Newsletter template
  130. *
  131. * @return void
  132. * @throws \Magento\Framework\Exception\LocalizedException
  133. */
  134. public function validate()
  135. {
  136. $validators = [
  137. 'template_code' => [\Zend_Filter_Input::ALLOW_EMPTY => false],
  138. 'template_type' => 'Int',
  139. 'template_sender_email' => 'EmailAddress',
  140. 'template_sender_name' => [\Zend_Filter_Input::ALLOW_EMPTY => false],
  141. ];
  142. $data = [];
  143. foreach (array_keys($validators) as $validateField) {
  144. $data[$validateField] = $this->getDataUsingMethod($validateField);
  145. }
  146. $validateInput = new \Zend_Filter_Input([], $validators, $data);
  147. if (!$validateInput->isValid()) {
  148. $errorMessages = [];
  149. foreach ($validateInput->getMessages() as $messages) {
  150. if (is_array($messages)) {
  151. foreach ($messages as $message) {
  152. $errorMessages[] = $message;
  153. }
  154. } else {
  155. $errorMessages[] = $messages;
  156. }
  157. }
  158. throw new \Magento\Framework\Exception\LocalizedException(__(join("\n", $errorMessages)));
  159. }
  160. }
  161. /**
  162. * Processing object before save data
  163. *
  164. * @return $this
  165. */
  166. public function beforeSave()
  167. {
  168. $this->validate();
  169. parent::beforeSave();
  170. return $this;
  171. }
  172. /**
  173. * Getter for template type
  174. *
  175. * @return int|string
  176. */
  177. public function getType()
  178. {
  179. return $this->getTemplateType();
  180. }
  181. /**
  182. * Retrieve processed template subject
  183. *
  184. * @param array $variables
  185. * @return string
  186. */
  187. public function getProcessedTemplateSubject(array $variables)
  188. {
  189. $variables['this'] = $this;
  190. return $this->getTemplateFilter()
  191. ->setVariables($variables)
  192. ->filter($this->getTemplateSubject());
  193. }
  194. /**
  195. * Retrieve template text wrapper
  196. *
  197. * @return string
  198. */
  199. public function getTemplateText()
  200. {
  201. if (!$this->getData('template_text') && !$this->getId()) {
  202. $this->setData(
  203. 'template_text',
  204. __(
  205. 'Follow this link to unsubscribe <!-- This tag is for unsubscribe link -->' .
  206. '<a href="{{var subscriber.getUnsubscriptionLink()}}">{{var subscriber.getUnsubscriptionLink()}}' .
  207. '</a>'
  208. )
  209. );
  210. }
  211. return $this->getData('template_text');
  212. }
  213. /**
  214. * @return \Magento\Newsletter\Model\Template\FilterFactory
  215. */
  216. protected function getFilterFactory()
  217. {
  218. return $this->_filterFactory;
  219. }
  220. /**
  221. * Check if template can be added to newsletter queue
  222. *
  223. * @return boolean
  224. */
  225. public function isValidForSend()
  226. {
  227. return $this->getTemplateSenderName() && $this->getTemplateSenderEmail() && $this->getTemplateSubject();
  228. }
  229. }