55 */
66namespace Magento \Reports \Block \Adminhtml \Shopcart \Abandoned ;
77
8+ use Magento \Framework \App \ObjectManager ;
9+ use Magento \Framework \Stdlib \Parameters ;
10+ use Magento \Framework \Url \DecoderInterface ;
11+
812/**
913 * Adminhtml abandoned shopping carts report grid block
1014 *
1519 */
1620class Grid extends \Magento \Reports \Block \Adminhtml \Grid \Shopcart
1721{
22+ /**
23+ * @var DecoderInterface
24+ */
25+ private $ urlDecoder ;
26+
27+ /**
28+ * @var Parameters
29+ */
30+ private $ parameters ;
31+
1832 /**
1933 * @var \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory
2034 */
@@ -24,16 +38,22 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
2438 * @param \Magento\Backend\Block\Template\Context $context
2539 * @param \Magento\Backend\Helper\Data $backendHelper
2640 * @param \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory $quotesFactory
41+ * @param DecoderInterface|null $urlDecoder
42+ * @param Parameters|null $parameters
2743 * @param array $data
2844 */
2945 public function __construct (
3046 \Magento \Backend \Block \Template \Context $ context ,
3147 \Magento \Backend \Helper \Data $ backendHelper ,
3248 \Magento \Reports \Model \ResourceModel \Quote \CollectionFactory $ quotesFactory ,
49+ DecoderInterface $ urlDecoder = null ,
50+ Parameters $ parameters = null ,
3351 array $ data = []
3452 ) {
3553 $ this ->_quotesFactory = $ quotesFactory ;
3654 parent ::__construct ($ context , $ backendHelper , $ data );
55+ $ this ->urlDecoder = $ urlDecoder ?? ObjectManager::getInstance ()->get (DecoderInterface::class);
56+ $ this ->parameters = $ parameters ?? ObjectManager::getInstance ()->get (Parameters::class);
3757 }
3858
3959 /**
@@ -59,8 +79,13 @@ protected function _prepareCollection()
5979
6080 $ filter = $ this ->getParam ($ this ->getVarNameFilter (), []);
6181 if ($ filter ) {
62- $ filter = base64_decode ($ filter );
63- parse_str (($ filter ), $ data );
82+ // this is a replacement for base64_decode()
83+ $ filter = $ this ->urlDecoder ->decode ($ filter );
84+
85+ // this is a replacement for parse_str()
86+ // does not need urldecode() as double decoding will occur and '+' will be lost
87+ $ this ->parameters ->fromString ($ filter );
88+ $ data = $ this ->parameters ->toArray ();
6489 }
6590
6691 if (!empty ($ data )) {
0 commit comments