From 3da7c76af8bd0c518e31bff67768672c496c94fc Mon Sep 17 00:00:00 2001 From: Aditya Yadav Date: Sun, 3 Feb 2019 10:12:04 +0530 Subject: [PATCH 1/8] Added Changes of Data Persistance for issue - #20888 --- .../SalesRule/Controller/Adminhtml/Promo/Quote/Save.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php index 388679e6d9eff..d600a9c14022c 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php @@ -8,6 +8,7 @@ use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; +use \Magento\Framework\App\Request\DataPersistorInterface; /** * SalesRule save controller @@ -20,6 +21,11 @@ class Save extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote implement * @var TimezoneInterface */ private $timezone; + + /** + * @var DataPersistorInterface + */ + protected $dataPersistor; /** * @param \Magento\Backend\App\Action\Context $context @@ -27,6 +33,7 @@ class Save extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote implement * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter * @param TimezoneInterface $timezone + * @param DataPersistorInterface $dataPersistor */ public function __construct( \Magento\Backend\App\Action\Context $context, @@ -39,6 +46,7 @@ public function __construct( $this->timezone = $timezone ?? \Magento\Framework\App\ObjectManager::getInstance()->get( TimezoneInterface::class ); + $this->dataPersistor = $dataPersistor; } /** @@ -89,6 +97,7 @@ public function execute() $this->messageManager->addErrorMessage($errorMessage); } $session->setPageData($data); + $this->dataPersistor->set('sale_rule', $data); $this->_redirect('sales_rule/*/edit', ['id' => $model->getId()]); return; } From d697ea68c237ca77fd8e935bf1f5a514d7947b5b Mon Sep 17 00:00:00 2001 From: Aditya Yadav Date: Sun, 3 Feb 2019 10:19:53 +0530 Subject: [PATCH 2/8] Changes in support of Issue 20888 Added Consideration of Data Persistance incase of Failed Submission of form. --- .../SalesRule/Model/Rule/DataProvider.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php index 916825776373d..f7daf7a1017de 100644 --- a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php +++ b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php @@ -8,6 +8,7 @@ use Magento\SalesRule\Model\ResourceModel\Rule\Collection; use Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory; use Magento\SalesRule\Model\Rule; +use Magento\Framework\App\Request\DataPersistorInterface; /** * Class DataProvider @@ -35,6 +36,11 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider * @var \Magento\SalesRule\Model\Rule\Metadata\ValueProvider */ protected $metadataValueProvider; + + /** + * @var DataPersistorInterface + */ + protected $dataPersistor; /** * Initialize dependencies. @@ -45,6 +51,7 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider * @param CollectionFactory $collectionFactory * @param \Magento\Framework\Registry $registry * @param Metadata\ValueProvider $metadataValueProvider + * @param DataPersistorInterface $dataPersistor * @param array $meta * @param array $data */ @@ -55,6 +62,7 @@ public function __construct( CollectionFactory $collectionFactory, \Magento\Framework\Registry $registry, \Magento\SalesRule\Model\Rule\Metadata\ValueProvider $metadataValueProvider, + DataPersistorInterface $dataPersistor, array $meta = [], array $data = [] ) { @@ -62,6 +70,7 @@ public function __construct( $this->coreRegistry = $registry; $this->metadataValueProvider = $metadataValueProvider; $meta = array_replace_recursive($this->getMetadataValues(), $meta); + $this->dataPersistor = $dataPersistor; parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data); } @@ -93,6 +102,13 @@ public function getData() $this->loadedData[$rule->getId()] = $rule->getData(); } + $data = $this->dataPersistor->get('sale_rule'); + if (!empty($data)) { + $rule = $this->collection->getNewEmptyItem(); + $rule->setData($data); + $this->loadedData[$rule->getId()] = $rule->getData(); + $this->dataPersistor->clear('sale_rule'); + } return $this->loadedData; } From 8faf8e98c3bc047f5cf0e5cb08d9ba6ebfcc5342 Mon Sep 17 00:00:00 2001 From: Aditya Yadav Date: Sun, 3 Feb 2019 14:54:17 +0530 Subject: [PATCH 3/8] Update Save.php Added Constructor Arguments. --- .../SalesRule/Controller/Adminhtml/Promo/Quote/Save.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php index d600a9c14022c..1a398d98af594 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php @@ -40,13 +40,15 @@ public function __construct( \Magento\Framework\Registry $coreRegistry, \Magento\Framework\App\Response\Http\FileFactory $fileFactory, \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter, - TimezoneInterface $timezone = null + TimezoneInterface $timezone = null, + DataPersistorInterface $dataPersistor = null ) { parent::__construct($context, $coreRegistry, $fileFactory, $dateFilter); $this->timezone = $timezone ?? \Magento\Framework\App\ObjectManager::getInstance()->get( TimezoneInterface::class ); - $this->dataPersistor = $dataPersistor; + $this->dataPersistor = $dataPersistor ?? \Magento\Framework\App\ObjectManager::getInstance()->get( + DataPersistorInterface::class; } /** From e5abf956600086e6de8fa6486f1326850f031659 Mon Sep 17 00:00:00 2001 From: Aditya Yadav Date: Sun, 3 Feb 2019 17:07:44 +0530 Subject: [PATCH 4/8] Updated Variable acess modifier to private --- app/code/Magento/SalesRule/Model/Rule/DataProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php index f7daf7a1017de..cd04e35c698f4 100644 --- a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php +++ b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php @@ -40,7 +40,7 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider /** * @var DataPersistorInterface */ - protected $dataPersistor; + private $dataPersistor; /** * Initialize dependencies. From 811a7bf2331d6ba8df3326c86c5ea9da4140c40b Mon Sep 17 00:00:00 2001 From: Aditya Yadav Date: Sun, 3 Feb 2019 17:10:50 +0530 Subject: [PATCH 5/8] Changed Variable Access to Private. --- .../Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php index 1a398d98af594..63ff4abb4b391 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php @@ -25,7 +25,7 @@ class Save extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote implement /** * @var DataPersistorInterface */ - protected $dataPersistor; + private $dataPersistor; /** * @param \Magento\Backend\App\Action\Context $context From 89a572835bd3e35e8e511539c20e22d33b04dac8 Mon Sep 17 00:00:00 2001 From: Sergii Ivashchenko Date: Wed, 6 Feb 2019 11:46:04 +0000 Subject: [PATCH 6/8] magento/magento2#20895: added missing closing bracket --- .../SalesRule/Controller/Adminhtml/Promo/Quote/Save.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php index 63ff4abb4b391..c1f540eb57d27 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php @@ -8,7 +8,7 @@ use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; -use \Magento\Framework\App\Request\DataPersistorInterface; +use Magento\Framework\App\Request\DataPersistorInterface; /** * SalesRule save controller @@ -48,7 +48,8 @@ public function __construct( TimezoneInterface::class ); $this->dataPersistor = $dataPersistor ?? \Magento\Framework\App\ObjectManager::getInstance()->get( - DataPersistorInterface::class; + DataPersistorInterface::class + ); } /** From 1a69d431194ba1f524487cad7f134114d95fc9ea Mon Sep 17 00:00:00 2001 From: Aditya Yadav Date: Thu, 7 Feb 2019 10:03:45 +0530 Subject: [PATCH 7/8] Changes to support backward compatibility --- app/code/Magento/SalesRule/Model/Rule/DataProvider.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php index cd04e35c698f4..a336f62207d5c 100644 --- a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php +++ b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php @@ -62,7 +62,7 @@ public function __construct( CollectionFactory $collectionFactory, \Magento\Framework\Registry $registry, \Magento\SalesRule\Model\Rule\Metadata\ValueProvider $metadataValueProvider, - DataPersistorInterface $dataPersistor, + DataPersistorInterface $dataPersistor = null, array $meta = [], array $data = [] ) { @@ -70,7 +70,9 @@ public function __construct( $this->coreRegistry = $registry; $this->metadataValueProvider = $metadataValueProvider; $meta = array_replace_recursive($this->getMetadataValues(), $meta); - $this->dataPersistor = $dataPersistor; + $this->dataPersistor = $dataPersistor ?? \Magento\Framework\App\ObjectManager::getInstance()->get( + DataPersistorInterface::class + ); parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data); } From bc92929a2d0835767b98a5a026463bea38011464 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Tue, 12 Feb 2019 17:22:01 +0200 Subject: [PATCH 8/8] ENGCOM-4215: Static test fix. --- .../Controller/Adminhtml/Promo/Quote/Save.php | 28 ++++++++++++++----- .../SalesRule/Model/Rule/DataProvider.php | 12 ++++---- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php index c1f540eb57d27..7d55d18b770e2 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php @@ -7,8 +7,8 @@ namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote; use Magento\Framework\App\Action\HttpPostActionInterface; -use Magento\Framework\Stdlib\DateTime\TimezoneInterface; use Magento\Framework\App\Request\DataPersistorInterface; +use Magento\Framework\Stdlib\DateTime\TimezoneInterface; /** * SalesRule save controller @@ -84,12 +84,8 @@ public function execute() $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.')); - } + if (!$this->checkRuleExists($model)) { + throw new \Magento\Framework\Exception\LocalizedException(__('The wrong rule is specified.')); } $session = $this->_objectManager->get(\Magento\Backend\Model\Session::class); @@ -159,4 +155,22 @@ public function execute() } $this->_redirect('sales_rule/*/'); } + + /** + * Check if Cart Price Rule with provided id exists. + * + * @param \Magento\SalesRule\Model\Rule $model + * @return bool + */ + private function checkRuleExists(\Magento\SalesRule\Model\Rule $model): bool + { + $id = $this->getRequest()->getParam('rule_id'); + if ($id) { + $model->load($id); + if ($model->getId() != $id) { + return false; + } + } + return true; + } } diff --git a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php index a336f62207d5c..25f0ef91eae68 100644 --- a/app/code/Magento/SalesRule/Model/Rule/DataProvider.php +++ b/app/code/Magento/SalesRule/Model/Rule/DataProvider.php @@ -5,10 +5,10 @@ */ namespace Magento\SalesRule\Model\Rule; +use Magento\Framework\App\Request\DataPersistorInterface; use Magento\SalesRule\Model\ResourceModel\Rule\Collection; use Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory; use Magento\SalesRule\Model\Rule; -use Magento\Framework\App\Request\DataPersistorInterface; /** * Class DataProvider @@ -36,7 +36,7 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider * @var \Magento\SalesRule\Model\Rule\Metadata\ValueProvider */ protected $metadataValueProvider; - + /** * @var DataPersistorInterface */ @@ -51,9 +51,9 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider * @param CollectionFactory $collectionFactory * @param \Magento\Framework\Registry $registry * @param Metadata\ValueProvider $metadataValueProvider - * @param DataPersistorInterface $dataPersistor * @param array $meta * @param array $data + * @param DataPersistorInterface $dataPersistor */ public function __construct( $name, @@ -62,9 +62,9 @@ public function __construct( CollectionFactory $collectionFactory, \Magento\Framework\Registry $registry, \Magento\SalesRule\Model\Rule\Metadata\ValueProvider $metadataValueProvider, - DataPersistorInterface $dataPersistor = null, array $meta = [], - array $data = [] + array $data = [], + DataPersistorInterface $dataPersistor = null ) { $this->collection = $collectionFactory->create(); $this->coreRegistry = $registry; @@ -88,7 +88,7 @@ protected function getMetadataValues() } /** - * {@inheritdoc} + * @inheritdoc */ public function getData() {