Skip to content

Commit 772cbf5

Browse files
committed
MC-33499: Grid Filter not working for Scheduled Export when selected any kind of Entity Type
1 parent af38483 commit 772cbf5

File tree

3 files changed

+111
-27
lines changed

3 files changed

+111
-27
lines changed

app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public function execute()
3434
/** @var $export \Magento\ImportExport\Model\Export */
3535
$export = $this->_objectManager->create(\Magento\ImportExport\Model\Export::class);
3636
$export->setData($data);
37-
$export->filterAttributeCollection(
38-
$attrFilterBlock->prepareCollection($export->getEntityAttributeCollection())
37+
$attrFilterBlock->prepareCollection(
38+
$export->filterAttributeCollection($export->getEntityAttributeCollection())
3939
);
4040
return $resultLayout;
4141
} catch (\Exception $e) {

app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
use Magento\Eav\Model\Entity\Attribute;
99
use Magento\Catalog\Api\Data\ProductAttributeInterface;
10+
use Magento\Framework\App\ObjectManager;
11+
use Magento\ImportExport\Model\ResourceModel\Export\AttributeGridCollectionFactory;
1012

1113
/**
1214
* Export filter block
@@ -40,20 +42,29 @@ class Filter extends \Magento\Backend\Block\Widget\Grid\Extended
4042
'updated_at' => \Magento\ImportExport\Model\Export::FILTER_TYPE_DATE,
4143
];
4244

45+
/**
46+
* @var AttributeGridCollectionFactory
47+
*/
48+
private $attributeGridCollectionFactory;
49+
4350
/**
4451
* @param \Magento\Backend\Block\Template\Context $context
4552
* @param \Magento\Backend\Helper\Data $backendHelper
4653
* @param \Magento\ImportExport\Helper\Data $importExportData
4754
* @param array $data
55+
* @param AttributeGridCollectionFactory|null $attributeGridCollectionFactory
4856
*/
4957
public function __construct(
5058
\Magento\Backend\Block\Template\Context $context,
5159
\Magento\Backend\Helper\Data $backendHelper,
5260
\Magento\ImportExport\Helper\Data $importExportData,
53-
array $data = []
61+
array $data = [],
62+
?AttributeGridCollectionFactory $attributeGridCollectionFactory = null
5463
) {
5564
$this->_importExportData = $importExportData;
5665
parent::__construct($context, $backendHelper, $data);
66+
$this->attributeGridCollectionFactory = $attributeGridCollectionFactory
67+
?: ObjectManager::getInstance()->get(AttributeGridCollectionFactory::class);
5768
}
5869

5970
/**
@@ -422,33 +433,13 @@ public function getRowUrl($row)
422433
* Prepare collection by setting page number, sorting etc..
423434
*
424435
* @param \Magento\Framework\Data\Collection $collection
425-
* @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
436+
* @return \Magento\Framework\Data\Collection|\Magento\ImportExport\Model\ResourceModel\Export\AttributeGridCollection
426437
*/
427438
public function prepareCollection(\Magento\Framework\Data\Collection $collection)
428439
{
429-
$this->setCollection($collection);
440+
$attributeGridCollection = $this->attributeGridCollectionFactory->create();
441+
$gridCollection = $attributeGridCollection->setItems($collection->getItems());
442+
$this->setCollection($gridCollection);
430443
return $this->getCollection();
431444
}
432-
433-
/**
434-
* @inheritDoc
435-
*
436-
* @param \Magento\Backend\Block\Widget\Grid\Column $column
437-
* @return $this
438-
*/
439-
protected function _addColumnFilterToCollection($column)
440-
{
441-
$collection = $this->getCollection();
442-
$field = $column->getFilterIndex() ?? $column->getIndex();
443-
$condition = $column->getFilter()->getData('value');
444-
if ($field && isset($condition)) {
445-
foreach ($this->getCollection() as $attribute) {
446-
if (stripos($attribute->getData($field), $condition) === false) {
447-
$collection->removeItemByKey($attribute->getId());
448-
}
449-
}
450-
}
451-
452-
return $this;
453-
}
454445
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\ImportExport\Model\ResourceModel\Export;
9+
10+
use Magento\Framework\Data\Collection;
11+
12+
/**
13+
* Class AttributeGridCollection
14+
*/
15+
class AttributeGridCollection extends Collection
16+
{
17+
18+
/**
19+
* Adding item to collection
20+
*
21+
* @param array $items
22+
* @return $this
23+
*/
24+
public function setItems(array $items): self
25+
{
26+
foreach ($items as $item) {
27+
$this->addItem($item);
28+
}
29+
30+
return $this;
31+
}
32+
33+
/**
34+
* @inheritDoc
35+
*
36+
* @return int
37+
*/
38+
public function getSize(): int
39+
{
40+
return count($this->getItems());
41+
}
42+
43+
/**
44+
* @inheritDoc
45+
*
46+
* @param string $field
47+
* @param array|int|string $condition
48+
* @return $this
49+
*/
50+
public function addFieldToFilter($field, $condition)
51+
{
52+
$value = (string)$condition['like'];
53+
$value = trim(trim($value, "'"), "%");
54+
foreach ($this->getItems() as $item) {
55+
if (stripos($item->getData($field), $value) === false) {
56+
$this->removeItemByKey($item->getId());
57+
}
58+
}
59+
60+
return $this;
61+
}
62+
63+
/**
64+
* Add select order
65+
*
66+
* @param string $field
67+
* @param string $direction
68+
* @return $this
69+
*/
70+
public function setOrder($field, $direction = self::SORT_ORDER_DESC)
71+
{
72+
$this->_orderField = $field;
73+
uasort($this->_items, [$this, 'compareAttributes']);
74+
75+
if ($direction == self::SORT_ORDER_DESC) {
76+
$this->_items = array_reverse($this->_items, true);
77+
}
78+
79+
return $this;
80+
}
81+
82+
/**
83+
* Compare two collection items
84+
*
85+
* @param \Magento\Framework\DataObject $a
86+
* @param \Magento\Framework\DataObject $b
87+
* @return int
88+
*/
89+
public function compareAttributes(\Magento\Framework\DataObject $a, \Magento\Framework\DataObject $b)
90+
{
91+
return strnatcmp($a->getData($this->_orderField), $b->getData($this->_orderField));
92+
}
93+
}

0 commit comments

Comments
 (0)