Save.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote;
  8. use Magento\Framework\App\Action\HttpPostActionInterface;
  9. use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
  10. /**
  11. * SalesRule save controller
  12. *
  13. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  14. */
  15. class Save extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote implements HttpPostActionInterface
  16. {
  17. /**
  18. * @var TimezoneInterface
  19. */
  20. private $timezone;
  21. /**
  22. * @param \Magento\Backend\App\Action\Context $context
  23. * @param \Magento\Framework\Registry $coreRegistry
  24. * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
  25. * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
  26. * @param TimezoneInterface $timezone
  27. */
  28. public function __construct(
  29. \Magento\Backend\App\Action\Context $context,
  30. \Magento\Framework\Registry $coreRegistry,
  31. \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
  32. \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
  33. TimezoneInterface $timezone = null
  34. ) {
  35. parent::__construct($context, $coreRegistry, $fileFactory, $dateFilter);
  36. $this->timezone = $timezone ?? \Magento\Framework\App\ObjectManager::getInstance()->get(
  37. TimezoneInterface::class
  38. );
  39. }
  40. /**
  41. * Promo quote save action
  42. *
  43. * @return void
  44. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  45. * @SuppressWarnings(PHPMD.NPathComplexity)
  46. */
  47. public function execute()
  48. {
  49. if ($this->getRequest()->getPostValue()) {
  50. try {
  51. /** @var $model \Magento\SalesRule\Model\Rule */
  52. $model = $this->_objectManager->create(\Magento\SalesRule\Model\Rule::class);
  53. $this->_eventManager->dispatch(
  54. 'adminhtml_controller_salesrule_prepare_save',
  55. ['request' => $this->getRequest()]
  56. );
  57. $data = $this->getRequest()->getPostValue();
  58. if (empty($data['from_date'])) {
  59. $data['from_date'] = $this->timezone->formatDate();
  60. }
  61. $filterValues = ['from_date' => $this->_dateFilter];
  62. if ($this->getRequest()->getParam('to_date')) {
  63. $filterValues['to_date'] = $this->_dateFilter;
  64. }
  65. $inputFilter = new \Zend_Filter_Input(
  66. $filterValues,
  67. [],
  68. $data
  69. );
  70. $data = $inputFilter->getUnescaped();
  71. $id = $this->getRequest()->getParam('rule_id');
  72. if ($id) {
  73. $model->load($id);
  74. if ($id != $model->getId()) {
  75. throw new \Magento\Framework\Exception\LocalizedException(__('The wrong rule is specified.'));
  76. }
  77. }
  78. $session = $this->_objectManager->get(\Magento\Backend\Model\Session::class);
  79. $validateResult = $model->validateData(new \Magento\Framework\DataObject($data));
  80. if ($validateResult !== true) {
  81. foreach ($validateResult as $errorMessage) {
  82. $this->messageManager->addErrorMessage($errorMessage);
  83. }
  84. $session->setPageData($data);
  85. $this->_redirect('sales_rule/*/edit', ['id' => $model->getId()]);
  86. return;
  87. }
  88. if (isset(
  89. $data['simple_action']
  90. ) && $data['simple_action'] == 'by_percent' && isset(
  91. $data['discount_amount']
  92. )
  93. ) {
  94. $data['discount_amount'] = min(100, $data['discount_amount']);
  95. }
  96. if (isset($data['rule']['conditions'])) {
  97. $data['conditions'] = $data['rule']['conditions'];
  98. }
  99. if (isset($data['rule']['actions'])) {
  100. $data['actions'] = $data['rule']['actions'];
  101. }
  102. unset($data['rule']);
  103. $model->loadPost($data);
  104. $useAutoGeneration = (int)(
  105. !empty($data['use_auto_generation']) && $data['use_auto_generation'] !== 'false'
  106. );
  107. $model->setUseAutoGeneration($useAutoGeneration);
  108. $session->setPageData($model->getData());
  109. $model->save();
  110. $this->messageManager->addSuccessMessage(__('You saved the rule.'));
  111. $session->setPageData(false);
  112. if ($this->getRequest()->getParam('back')) {
  113. $this->_redirect('sales_rule/*/edit', ['id' => $model->getId()]);
  114. return;
  115. }
  116. $this->_redirect('sales_rule/*/');
  117. return;
  118. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  119. $this->messageManager->addErrorMessage($e->getMessage());
  120. $id = (int)$this->getRequest()->getParam('rule_id');
  121. if (!empty($id)) {
  122. $this->_redirect('sales_rule/*/edit', ['id' => $id]);
  123. } else {
  124. $this->_redirect('sales_rule/*/new');
  125. }
  126. return;
  127. } catch (\Exception $e) {
  128. $this->messageManager->addErrorMessage(
  129. __('Something went wrong while saving the rule data. Please review the error log.')
  130. );
  131. $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
  132. $this->_objectManager->get(\Magento\Backend\Model\Session::class)->setPageData($data);
  133. $this->_redirect('sales_rule/*/edit', ['id' => $this->getRequest()->getParam('rule_id')]);
  134. return;
  135. }
  136. }
  137. $this->_redirect('sales_rule/*/');
  138. }
  139. }