Save.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace Dotdigitalgroup\Email\Controller\Adminhtml\Rules;
  3. class Save extends \Magento\Backend\App\AbstractAction
  4. {
  5. /**
  6. * Authorization level of a basic admin session
  7. *
  8. * @see _isAllowed()
  9. */
  10. const ADMIN_RESOURCE = 'Dotdigitalgroup_Email::exclusion_rules';
  11. /**
  12. * @var \Dotdigitalgroup\Email\Model\ResourceModel\Rules
  13. */
  14. private $rulesResource;
  15. /**
  16. * @var \Magento\Store\Model\StoreManagerInterface
  17. */
  18. private $storeManager;
  19. /**
  20. * @var \Dotdigitalgroup\Email\Model\RulesFactory
  21. */
  22. private $ruleFactory;
  23. /**
  24. * @var \Magento\Framework\Escaper
  25. */
  26. private $escaper;
  27. /**
  28. * Save constructor.
  29. *
  30. * @param \Dotdigitalgroup\Email\Model\ResourceModel\Rules $rulesResource
  31. * @param \Magento\Backend\App\Action\Context $context
  32. * @param \Dotdigitalgroup\Email\Model\RulesFactory $rulesFactory
  33. * @param \Magento\Store\Model\StoreManagerInterface $storeManagerInterface
  34. * @param \Magento\Framework\Escaper $escaper
  35. */
  36. public function __construct(
  37. \Dotdigitalgroup\Email\Model\ResourceModel\Rules $rulesResource,
  38. \Magento\Backend\App\Action\Context $context,
  39. \Dotdigitalgroup\Email\Model\RulesFactory $rulesFactory,
  40. \Magento\Store\Model\StoreManagerInterface $storeManagerInterface,
  41. \Magento\Framework\Escaper $escaper
  42. ) {
  43. parent::__construct($context);
  44. $this->rulesResource = $rulesResource;
  45. $this->ruleFactory = $rulesFactory;
  46. $this->storeManager = $storeManagerInterface;
  47. $this->escaper = $escaper;
  48. }
  49. /**
  50. * Execute method.
  51. *
  52. * @return \Magento\Framework\App\ResponseInterface
  53. */
  54. public function execute()
  55. {
  56. if ($this->getRequest()->getParams()) {
  57. $data = $this->getRequest()->getParams();
  58. $id = $this->getRequest()->getParam('id');
  59. try {
  60. $ruleModel = $this->ruleFactory->create();
  61. if ($data['website_ids']) {
  62. foreach ($data['website_ids'] as $websiteId) {
  63. $result = $ruleModel->checkWebsiteBeforeSave(
  64. $websiteId,
  65. $data['type'],
  66. $id
  67. );
  68. if (!$result) {
  69. $websiteName = $this->storeManager->getWebsite(
  70. $websiteId
  71. )->getName();
  72. $this->messageManager->addErrorMessage(
  73. __(
  74. 'Rule already exist for website '
  75. . $websiteName
  76. . '. You can only have one rule per website.'
  77. )
  78. );
  79. return $this->_redirect(
  80. '*/*/edit',
  81. [
  82. 'id' => $id
  83. ]
  84. );
  85. }
  86. }
  87. }
  88. $this->rulesResource->load($ruleModel, $id);
  89. if ($id != $ruleModel->getId()) {
  90. $this->messageManager->addErrorMessage('Wrong rule specified.');
  91. return $this->_redirect('*/*/');
  92. }
  93. $ruleModel = $this->evaluateRequestParams($data, $ruleModel);
  94. $this->rulesResource->save($ruleModel);
  95. $this->messageManager->addSuccessMessage(
  96. __('The rule has been saved.')
  97. );
  98. $this->_getSession()->setPageData(false);
  99. if ($this->getRequest()->getParam('back')) {
  100. return $this->_redirect(
  101. '*/*/edit',
  102. ['id' => $ruleModel->getId()]
  103. );
  104. }
  105. } catch (\Exception $e) {
  106. $this->messageManager->addErrorMessage($e->getMessage());
  107. }
  108. }
  109. return $this->_redirect('*/*/');
  110. }
  111. /**
  112. * @param array $data
  113. * @param \Dotdigitalgroup\Email\Model\Rules $ruleModel
  114. *
  115. * @return null
  116. */
  117. private function evaluateRequestParams($data, $ruleModel)
  118. {
  119. foreach ($data as $key => $value) {
  120. if ($key !== 'form_key' && $key !== 'key' && $key !== 'active_tab') {
  121. if ($key == 'condition') {
  122. if (is_array($value)) {
  123. unset($value['__empty']);
  124. }
  125. $ruleModel->setData('conditions', $value);
  126. } else {
  127. $ruleModel->setData($key, $value);
  128. }
  129. }
  130. }
  131. return $ruleModel;
  132. }
  133. }