123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?php
- /**
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote;
- use Magento\Framework\App\Action\HttpPostActionInterface;
- use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
- /**
- * SalesRule save controller
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Save extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote implements HttpPostActionInterface
- {
- /**
- * @var TimezoneInterface
- */
- private $timezone;
- /**
- * @param \Magento\Backend\App\Action\Context $context
- * @param \Magento\Framework\Registry $coreRegistry
- * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
- * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
- * @param TimezoneInterface $timezone
- */
- public function __construct(
- \Magento\Backend\App\Action\Context $context,
- \Magento\Framework\Registry $coreRegistry,
- \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
- \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
- TimezoneInterface $timezone = null
- ) {
- parent::__construct($context, $coreRegistry, $fileFactory, $dateFilter);
- $this->timezone = $timezone ?? \Magento\Framework\App\ObjectManager::getInstance()->get(
- TimezoneInterface::class
- );
- }
- /**
- * Promo quote save action
- *
- * @return void
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- * @SuppressWarnings(PHPMD.NPathComplexity)
- */
- public function execute()
- {
- if ($this->getRequest()->getPostValue()) {
- try {
- /** @var $model \Magento\SalesRule\Model\Rule */
- $model = $this->_objectManager->create(\Magento\SalesRule\Model\Rule::class);
- $this->_eventManager->dispatch(
- 'adminhtml_controller_salesrule_prepare_save',
- ['request' => $this->getRequest()]
- );
- $data = $this->getRequest()->getPostValue();
- if (empty($data['from_date'])) {
- $data['from_date'] = $this->timezone->formatDate();
- }
- $filterValues = ['from_date' => $this->_dateFilter];
- if ($this->getRequest()->getParam('to_date')) {
- $filterValues['to_date'] = $this->_dateFilter;
- }
- $inputFilter = new \Zend_Filter_Input(
- $filterValues,
- [],
- $data
- );
- $data = $inputFilter->getUnescaped();
- $id = $this->getRequest()->getParam('rule_id');
- if ($id) {
- $model->load($id);
- if ($id != $model->getId()) {
- throw new \Magento\Framework\Exception\LocalizedException(__('The wrong rule is specified.'));
- }
- }
- $session = $this->_objectManager->get(\Magento\Backend\Model\Session::class);
- $validateResult = $model->validateData(new \Magento\Framework\DataObject($data));
- if ($validateResult !== true) {
- foreach ($validateResult as $errorMessage) {
- $this->messageManager->addErrorMessage($errorMessage);
- }
- $session->setPageData($data);
- $this->_redirect('sales_rule/*/edit', ['id' => $model->getId()]);
- return;
- }
- if (isset(
- $data['simple_action']
- ) && $data['simple_action'] == 'by_percent' && isset(
- $data['discount_amount']
- )
- ) {
- $data['discount_amount'] = min(100, $data['discount_amount']);
- }
- if (isset($data['rule']['conditions'])) {
- $data['conditions'] = $data['rule']['conditions'];
- }
- if (isset($data['rule']['actions'])) {
- $data['actions'] = $data['rule']['actions'];
- }
- unset($data['rule']);
- $model->loadPost($data);
- $useAutoGeneration = (int)(
- !empty($data['use_auto_generation']) && $data['use_auto_generation'] !== 'false'
- );
- $model->setUseAutoGeneration($useAutoGeneration);
- $session->setPageData($model->getData());
- $model->save();
- $this->messageManager->addSuccessMessage(__('You saved the rule.'));
- $session->setPageData(false);
- if ($this->getRequest()->getParam('back')) {
- $this->_redirect('sales_rule/*/edit', ['id' => $model->getId()]);
- return;
- }
- $this->_redirect('sales_rule/*/');
- return;
- } catch (\Magento\Framework\Exception\LocalizedException $e) {
- $this->messageManager->addErrorMessage($e->getMessage());
- $id = (int)$this->getRequest()->getParam('rule_id');
- if (!empty($id)) {
- $this->_redirect('sales_rule/*/edit', ['id' => $id]);
- } else {
- $this->_redirect('sales_rule/*/new');
- }
- return;
- } catch (\Exception $e) {
- $this->messageManager->addErrorMessage(
- __('Something went wrong while saving the rule data. Please review the error log.')
- );
- $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
- $this->_objectManager->get(\Magento\Backend\Model\Session::class)->setPageData($data);
- $this->_redirect('sales_rule/*/edit', ['id' => $this->getRequest()->getParam('rule_id')]);
- return;
- }
- }
- $this->_redirect('sales_rule/*/');
- }
- }
|