Form.php 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Newsletter\Block\Adminhtml\Queue\Edit;
  7. /**
  8. * Newsletter queue edit form
  9. *
  10. * @author Magento Core Team <core@magentocommerce.com>
  11. */
  12. class Form extends \Magento\Backend\Block\Widget\Form\Generic
  13. {
  14. /**
  15. * @var \Magento\Cms\Model\Wysiwyg\Config
  16. */
  17. protected $_wysiwygConfig;
  18. /**
  19. * @var \Magento\Store\Model\System\Store
  20. */
  21. protected $_systemStore;
  22. /**
  23. * @var \Magento\Newsletter\Model\QueueFactory
  24. */
  25. protected $_queueFactory;
  26. /**
  27. * @param \Magento\Backend\Block\Template\Context $context
  28. * @param \Magento\Framework\Registry $registry
  29. * @param \Magento\Framework\Data\FormFactory $formFactory
  30. * @param \Magento\Newsletter\Model\QueueFactory $queueFactory
  31. * @param \Magento\Store\Model\System\Store $systemStore
  32. * @param \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig
  33. * @param array $data
  34. */
  35. public function __construct(
  36. \Magento\Backend\Block\Template\Context $context,
  37. \Magento\Framework\Registry $registry,
  38. \Magento\Framework\Data\FormFactory $formFactory,
  39. \Magento\Newsletter\Model\QueueFactory $queueFactory,
  40. \Magento\Store\Model\System\Store $systemStore,
  41. \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig,
  42. array $data = []
  43. ) {
  44. $this->_wysiwygConfig = $wysiwygConfig;
  45. $this->_systemStore = $systemStore;
  46. $this->_queueFactory = $queueFactory;
  47. parent::__construct($context, $registry, $formFactory, $data);
  48. }
  49. /**
  50. * Prepare form for newsletter queue editing.
  51. * Form can be run from newsletter template grid by option "Queue newsletter"
  52. * or from newsletter queue grid by edit option.
  53. *
  54. * @return $this
  55. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  56. * @SuppressWarnings(PHPMD.NPathComplexity)
  57. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  58. */
  59. protected function _prepareForm()
  60. {
  61. /* @var $queue \Magento\Newsletter\Model\Queue */
  62. $queue = $this->getQueue();
  63. /** @var \Magento\Framework\Data\Form $form */
  64. $form = $this->_formFactory->create();
  65. $fieldset = $form->addFieldset(
  66. 'base_fieldset',
  67. ['legend' => __('Queue Information'), 'class' => 'fieldset-wide']
  68. );
  69. $dateFormat = $this->_localeDate->getDateFormat(
  70. \IntlDateFormatter::MEDIUM
  71. );
  72. $timeFormat = $this->_localeDate->getTimeFormat(
  73. \IntlDateFormatter::MEDIUM
  74. );
  75. if ($queue->getQueueStatus() == \Magento\Newsletter\Model\Queue::STATUS_NEVER) {
  76. $fieldset->addField(
  77. 'date',
  78. 'date',
  79. [
  80. 'name' => 'start_at',
  81. 'date_format' => $dateFormat,
  82. 'time_format' => $timeFormat,
  83. 'label' => __('Queue Date Start')
  84. ]
  85. );
  86. if (!$this->_storeManager->hasSingleStore()) {
  87. $fieldset->addField(
  88. 'stores',
  89. 'multiselect',
  90. [
  91. 'name' => 'stores[]',
  92. 'label' => __('Subscribers From'),
  93. 'values' => $this->_systemStore->getStoreValuesForForm(),
  94. 'value' => $queue->getStores()
  95. ]
  96. );
  97. } else {
  98. $fieldset->addField(
  99. 'stores',
  100. 'hidden',
  101. ['name' => 'stores[]', 'value' => $this->_storeManager->getStore(true)->getId()]
  102. );
  103. }
  104. } else {
  105. $fieldset->addField(
  106. 'date',
  107. 'date',
  108. [
  109. 'name' => 'start_at',
  110. 'disabled' => 'true',
  111. 'style' => 'width:38%;',
  112. 'date_format' => $dateFormat,
  113. 'time_format' => $timeFormat,
  114. 'label' => __('Queue Date Start')
  115. ]
  116. );
  117. if (!$this->_storeManager->hasSingleStore()) {
  118. $fieldset->addField(
  119. 'stores',
  120. 'multiselect',
  121. [
  122. 'name' => 'stores[]',
  123. 'label' => __('Subscribers From'),
  124. 'required' => true,
  125. 'values' => $this->_systemStore->getStoreValuesForForm(),
  126. 'value' => $queue->getStores()
  127. ]
  128. );
  129. } else {
  130. $fieldset->addField(
  131. 'stores',
  132. 'hidden',
  133. ['name' => 'stores[]', 'value' => $this->_storeManager->getStore(true)->getId()]
  134. );
  135. }
  136. }
  137. if ($queue->getQueueStartAt()) {
  138. $form->getElement(
  139. 'date'
  140. )->setValue(
  141. $this->_localeDate->date(new \DateTime($queue->getQueueStartAt()))
  142. );
  143. }
  144. $fieldset->addField(
  145. 'subject',
  146. 'text',
  147. [
  148. 'name' => 'subject',
  149. 'label' => __('Subject'),
  150. 'required' => true,
  151. 'value' => $queue->isNew() ? $queue
  152. ->getTemplate()
  153. ->getTemplateSubject() : $queue
  154. ->getNewsletterSubject()
  155. ]
  156. );
  157. $fieldset->addField(
  158. 'sender_name',
  159. 'text',
  160. [
  161. 'name' => 'sender_name',
  162. 'label' => __('Sender Name'),
  163. 'title' => __('Sender Name'),
  164. 'required' => true,
  165. 'value' => $queue->isNew() ? $queue
  166. ->getTemplate()
  167. ->getTemplateSenderName() : $queue
  168. ->getNewsletterSenderName()
  169. ]
  170. );
  171. $fieldset->addField(
  172. 'sender_email',
  173. 'text',
  174. [
  175. 'name' => 'sender_email',
  176. 'label' => __('Sender Email'),
  177. 'title' => __('Sender Email'),
  178. 'class' => 'validate-email',
  179. 'required' => true,
  180. 'value' => $queue->isNew() ? $queue
  181. ->getTemplate()
  182. ->getTemplateSenderEmail() : $queue
  183. ->getNewsletterSenderEmail()
  184. ]
  185. );
  186. $wysiwygConfig = $this->_wysiwygConfig->getConfig($this->getAdditionalWysiwygConfig());
  187. if ($queue->isNew()) {
  188. $fieldset->addField(
  189. 'text',
  190. 'editor',
  191. [
  192. 'name' => 'text',
  193. 'label' => __('Message'),
  194. 'state' => 'html',
  195. 'required' => true,
  196. 'value' => $queue->getTemplate()->getTemplateText(),
  197. 'style' => 'height: 600px;',
  198. 'config' => $wysiwygConfig
  199. ]
  200. );
  201. $fieldset->addField(
  202. 'styles',
  203. 'textarea',
  204. [
  205. 'name' => 'styles',
  206. 'label' => __('Newsletter Styles'),
  207. 'container_id' => 'field_newsletter_styles',
  208. 'value' => $queue->getTemplate()->getTemplateStyles()
  209. ]
  210. );
  211. } elseif (\Magento\Newsletter\Model\Queue::STATUS_NEVER != $queue->getQueueStatus()) {
  212. $fieldset->addField(
  213. 'text',
  214. 'textarea',
  215. ['name' => 'text', 'label' => __('Message'), 'value' => $queue->getNewsletterText()]
  216. );
  217. $fieldset->addField(
  218. 'styles',
  219. 'textarea',
  220. ['name' => 'styles', 'label' => __('Newsletter Styles'), 'value' => $queue->getNewsletterStyles()]
  221. );
  222. $form->getElement('text')->setDisabled('true')->setRequired(false);
  223. $form->getElement('styles')->setDisabled('true')->setRequired(false);
  224. $form->getElement('subject')->setDisabled('true')->setRequired(false);
  225. $form->getElement('sender_name')->setDisabled('true')->setRequired(false);
  226. $form->getElement('sender_email')->setDisabled('true')->setRequired(false);
  227. $form->getElement('stores')->setDisabled('true');
  228. } else {
  229. $fieldset->addField(
  230. 'text',
  231. 'editor',
  232. [
  233. 'name' => 'text',
  234. 'label' => __('Message'),
  235. 'state' => 'html',
  236. 'required' => true,
  237. 'value' => $queue->getNewsletterText(),
  238. 'style' => 'height: 600px;',
  239. 'config' => $wysiwygConfig
  240. ]
  241. );
  242. $fieldset->addField(
  243. 'styles',
  244. 'textarea',
  245. [
  246. 'name' => 'styles',
  247. 'label' => __('Newsletter Styles'),
  248. 'value' => $queue->getNewsletterStyles(),
  249. 'style' => 'height: 300px;'
  250. ]
  251. );
  252. }
  253. $this->setForm($form);
  254. return $this;
  255. }
  256. /**
  257. * This is extension point for customizing configuration of WYSIWYG
  258. * You can add afterGetAdditionalWysiwygConfig plugin
  259. * in order to extend current configuration
  260. *
  261. * @return array
  262. */
  263. public function getAdditionalWysiwygConfig()
  264. {
  265. return [
  266. 'widget_filers' => [
  267. 'is_email_compatible' => 1
  268. ]
  269. ];
  270. }
  271. /**
  272. * Retrieve queue object
  273. *
  274. * @return \Magento\Newsletter\Model\Queue
  275. */
  276. protected function getQueue()
  277. {
  278. $queue = $this->_coreRegistry->registry('current_queue');
  279. if (!$queue) {
  280. $queue = $this->_queueFactory->create();
  281. }
  282. return $queue;
  283. }
  284. }