Skip to content

Commit 1abca0b

Browse files
committed
ACP2E-1435: Abandoned Cart's Filter Function Doesn't Work With Email Addresses Contain A + Sign
1 parent 9fb9ed7 commit 1abca0b

File tree

1 file changed

+27
-2
lines changed
  • app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned

1 file changed

+27
-2
lines changed

app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
*/
66
namespace 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
*
@@ -15,6 +19,16 @@
1519
*/
1620
class 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

Comments
 (0)