5
5
*/
6
6
namespace Magento \Reports \Block \Adminhtml \Shopcart \Abandoned ;
7
7
8
+ use Magento \Framework \App \ObjectManager ;
9
+ use Magento \Framework \Stdlib \Parameters ;
10
+ use Magento \Framework \Url \DecoderInterface ;
11
+
8
12
/**
9
13
* Adminhtml abandoned shopping carts report grid block
10
14
*
15
19
*/
16
20
class Grid extends \Magento \Reports \Block \Adminhtml \Grid \Shopcart
17
21
{
22
+ /**
23
+ * @var DecoderInterface
24
+ */
25
+ private $ urlDecoder ;
26
+
27
+ /**
28
+ * @var Parameters
29
+ */
30
+ private $ parameters ;
31
+
18
32
/**
19
33
* @var \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory
20
34
*/
@@ -24,16 +38,22 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
24
38
* @param \Magento\Backend\Block\Template\Context $context
25
39
* @param \Magento\Backend\Helper\Data $backendHelper
26
40
* @param \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory $quotesFactory
41
+ * @param DecoderInterface|null $urlDecoder
42
+ * @param Parameters|null $parameters
27
43
* @param array $data
28
44
*/
29
45
public function __construct (
30
46
\Magento \Backend \Block \Template \Context $ context ,
31
47
\Magento \Backend \Helper \Data $ backendHelper ,
32
48
\Magento \Reports \Model \ResourceModel \Quote \CollectionFactory $ quotesFactory ,
49
+ DecoderInterface $ urlDecoder = null ,
50
+ Parameters $ parameters = null ,
33
51
array $ data = []
34
52
) {
35
53
$ this ->_quotesFactory = $ quotesFactory ;
36
54
parent ::__construct ($ context , $ backendHelper , $ data );
55
+ $ this ->urlDecoder = $ urlDecoder ?? ObjectManager::getInstance ()->get (DecoderInterface::class);
56
+ $ this ->parameters = $ parameters ?? ObjectManager::getInstance ()->get (Parameters::class);
37
57
}
38
58
39
59
/**
@@ -59,8 +79,13 @@ protected function _prepareCollection()
59
79
60
80
$ filter = $ this ->getParam ($ this ->getVarNameFilter (), []);
61
81
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 ();
64
89
}
65
90
66
91
if (!empty ($ data )) {
0 commit comments