Skip to content

Commit 4f869e9

Browse files
committed
Merge pull request #606 from magento-troll/m2beta3bugfixes
[MX][Virtual Team] Bug fixes
2 parents b94eaed + 25fbbc5 commit 4f869e9

File tree

12 files changed

+191
-19
lines changed

12 files changed

+191
-19
lines changed

app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,44 @@
66
*/
77
namespace Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute;
88

9+
use Magento\Ui\Component\MassAction\Filter;
10+
use Magento\Catalog\Model\Resource\Product\CollectionFactory;
11+
912
class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
1013
{
1114
/**
1215
* @var \Magento\Framework\View\Result\PageFactory
1316
*/
1417
protected $resultPageFactory;
1518

19+
/**
20+
* MassActions filter
21+
*
22+
* @var Filter
23+
*/
24+
protected $filter;
25+
26+
/**
27+
* @var CollectionFactory
28+
*/
29+
protected $collectionFactory;
30+
1631
/**
1732
* @param \Magento\Backend\App\Action\Context $context
1833
* @param \Magento\Catalog\Helper\Product\Edit\Action\Attribute $attributeHelper
1934
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
35+
* @param Filter $filter
36+
* @param CollectionFactory $collectionFactory
2037
*/
2138
public function __construct(
2239
\Magento\Backend\App\Action\Context $context,
2340
\Magento\Catalog\Helper\Product\Edit\Action\Attribute $attributeHelper,
24-
\Magento\Framework\View\Result\PageFactory $resultPageFactory
41+
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
42+
Filter $filter,
43+
CollectionFactory $collectionFactory
2544
) {
45+
$this->filter = $filter;
46+
$this->collectionFactory = $collectionFactory;
2647
parent::__construct($context, $attributeHelper);
2748
$this->resultPageFactory = $resultPageFactory;
2849
}
@@ -32,6 +53,9 @@ public function __construct(
3253
*/
3354
public function execute()
3455
{
56+
$collection = $this->filter->getCollection($this->collectionFactory->create());
57+
$this->attributeHelper->setProductIds($collection->getAllIds());
58+
3559
if (!$this->_validateProducts()) {
3660
return $this->resultRedirectFactory->create()->setPath('catalog/product/', ['_current' => true]);
3761
}

app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
use Magento\Backend\App\Action;
1010
use Magento\Catalog\Controller\Adminhtml\Product;
1111
use Magento\Framework\Controller\ResultFactory;
12+
use Magento\Ui\Component\MassAction\Filter;
13+
use Magento\Catalog\Model\Resource\Product\CollectionFactory;
1214

1315
class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
1416
{
@@ -17,16 +19,34 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
1719
*/
1820
protected $_productPriceIndexerProcessor;
1921

22+
/**
23+
* MassActions filter
24+
*
25+
* @var Filter
26+
*/
27+
protected $filter;
28+
29+
/**
30+
* @var CollectionFactory
31+
*/
32+
protected $collectionFactory;
33+
2034
/**
2135
* @param Action\Context $context
2236
* @param Builder $productBuilder
2337
* @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor
38+
* @param Filter $filter
39+
* @param CollectionFactory $collectionFactory
2440
*/
2541
public function __construct(
2642
\Magento\Backend\App\Action\Context $context,
2743
Product\Builder $productBuilder,
28-
\Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor
44+
\Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor,
45+
Filter $filter,
46+
CollectionFactory $collectionFactory
2947
) {
48+
$this->filter = $filter;
49+
$this->collectionFactory = $collectionFactory;
3050
$this->_productPriceIndexerProcessor = $productPriceIndexerProcessor;
3151
parent::__construct($context, $productBuilder);
3252
}
@@ -57,7 +77,8 @@ public function _validateMassStatus(array $productIds, $status)
5777
*/
5878
public function execute()
5979
{
60-
$productIds = (array) $this->getRequest()->getParam('selected');
80+
$collection = $this->filter->getCollection($this->collectionFactory->create());
81+
$productIds = $collection->getAllIds();
6182
$storeId = (int) $this->getRequest()->getParam('store', 0);
6283
$status = (int) $this->getRequest()->getParam('status');
6384

app/code/Magento/Catalog/Helper/Product/Edit/Action/Attribute.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,17 +115,25 @@ public function getProducts()
115115
return $this->_products;
116116
}
117117

118+
/**
119+
* Set array of selected product
120+
*
121+
* @param array $productIds
122+
*
123+
* @return void
124+
*/
125+
public function setProductIds($productIds)
126+
{
127+
$this->_session->setProductIds($productIds);
128+
}
129+
118130
/**
119131
* Return array of selected product ids from post or session
120132
*
121133
* @return array|null
122134
*/
123135
public function getProductIds()
124136
{
125-
if ($this->_getRequest()->isPost() && $this->_getRequest()->getActionName() == 'edit') {
126-
$this->_session->setProductIds($this->_getRequest()->getParam('selected', null));
127-
}
128-
129137
return $this->_session->getProductIds();
130138
}
131139

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Catalog\Model\Product\Attribute;
7+
8+
use Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface;
9+
10+
/**
11+
* Product default attributes provider
12+
*
13+
* @codeCoverageIgnore
14+
*/
15+
class DefaultAttributes implements ProviderInterface
16+
{
17+
/**
18+
* Retrieve default entity static attributes
19+
*
20+
* @return string[]
21+
*/
22+
public function getDefaultAttributes()
23+
{
24+
return ['entity_id', 'attribute_set_id', 'type_id', 'created_at', 'updated_at', 'sku'];
25+
}
26+
}

app/code/Magento/Catalog/Model/Resource/Product.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ class Product extends AbstractResource
5656
*/
5757
protected $typeFactory;
5858

59+
/**
60+
* @var \Magento\Catalog\Model\Product\Attribute\DefaultAttributes
61+
*/
62+
protected $defaultAttributes;
63+
5964
/**
6065
* @param \Magento\Eav\Model\Entity\Context $context
6166
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -65,6 +70,7 @@ class Product extends AbstractResource
6570
* @param \Magento\Framework\Event\ManagerInterface $eventManager
6671
* @param \Magento\Eav\Model\Entity\Attribute\SetFactory $setFactory
6772
* @param \Magento\Eav\Model\Entity\TypeFactory $typeFactory
73+
* @param \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes
6874
* @param array $data
6975
*
7076
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -78,13 +84,15 @@ public function __construct(
7884
\Magento\Framework\Event\ManagerInterface $eventManager,
7985
\Magento\Eav\Model\Entity\Attribute\SetFactory $setFactory,
8086
\Magento\Eav\Model\Entity\TypeFactory $typeFactory,
87+
\Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes,
8188
$data = []
8289
) {
8390
$this->_categoryCollectionFactory = $categoryCollectionFactory;
8491
$this->_catalogCategory = $catalogCategory;
8592
$this->eventManager = $eventManager;
8693
$this->setFactory = $setFactory;
8794
$this->typeFactory = $typeFactory;
95+
$this->defaultAttributes = $defaultAttributes;
8896
parent::__construct(
8997
$context,
9098
$storeManager,
@@ -141,7 +149,7 @@ public function getProductCategoryTable()
141149
*/
142150
protected function _getDefaultAttributes()
143151
{
144-
return ['entity_id', 'attribute_set_id', 'type_id', 'created_at', 'updated_at'];
152+
return $this->defaultAttributes->getDefaultAttributes();
145153
}
146154

147155
/**

app/code/Magento/Catalog/Model/Resource/Product/Collection.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
2222
* @SuppressWarnings(PHPMD.NumberOfChildren)
2323
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
24+
*
25+
* @method \Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface getResource()
2426
*/
2527
class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractCollection
2628
{
@@ -561,7 +563,7 @@ protected function _initSelect()
561563
)->columns(
562564
['status' => new \Zend_Db_Expr(ProductStatus::STATUS_ENABLED)]
563565
);
564-
$this->addAttributeToSelect(['entity_id', 'type_id', 'attribute_set_id']);
566+
$this->addAttributeToSelect($this->getResource()->getDefaultAttributes());
565567
if ($this->_catalogProductFlatState->getFlatIndexerHelper()->isAddChildData()) {
566568
$this->getSelect()->where('e.is_child=?', 0);
567569
$this->addAttributeToSelect(['child_id', 'is_child']);

app/code/Magento/Catalog/Model/Resource/Product/Flat.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
namespace Magento\Catalog\Model\Resource\Product;
77

88
use Magento\Store\Model\Store;
9+
use Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider;
910

1011
/**
1112
* Catalog Product Flat resource model
1213
*
1314
* @author Magento Core Team <[email protected]>
1415
*/
15-
class Flat extends \Magento\Framework\Model\Resource\Db\AbstractDb
16+
class Flat extends \Magento\Framework\Model\Resource\Db\AbstractDb implements DefaultAttributesProvider
1617
{
1718
/**
1819
* Store scope Id
@@ -35,20 +36,28 @@ class Flat extends \Magento\Framework\Model\Resource\Db\AbstractDb
3536
*/
3637
protected $_storeManager;
3738

39+
/**
40+
* @var \Magento\Catalog\Model\Product\Attribute\DefaultAttributes
41+
*/
42+
protected $defaultAttributes;
43+
3844
/**
3945
* @param \Magento\Framework\Model\Resource\Db\Context $context
4046
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
4147
* @param \Magento\Catalog\Model\Config $catalogConfig
48+
* @param \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes
4249
* @param string $connectionName
4350
*/
4451
public function __construct(
4552
\Magento\Framework\Model\Resource\Db\Context $context,
4653
\Magento\Store\Model\StoreManagerInterface $storeManager,
4754
\Magento\Catalog\Model\Config $catalogConfig,
55+
\Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes,
4856
$connectionName = null
4957
) {
5058
$this->_storeManager = $storeManager;
5159
$this->_catalogConfig = $catalogConfig;
60+
$this->defaultAttributes = $defaultAttributes;
5261
parent::__construct($context, $connectionName);
5362
}
5463

@@ -231,4 +240,19 @@ public function getMainTable()
231240
{
232241
return $this->getFlatTableName($this->getStoreId());
233242
}
243+
244+
/**
245+
* Retrieve default entity static attributes
246+
*
247+
* @return string[]
248+
*/
249+
public function getDefaultAttributes()
250+
{
251+
return array_unique(
252+
array_merge(
253+
$this->defaultAttributes->getDefaultAttributes(),
254+
[$this->getEntityIdField()]
255+
)
256+
);
257+
}
234258
}

app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,37 @@ protected function setUp()
4343
->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
4444
->willReturn($this->resultRedirect);
4545

46+
$abstractDbMock = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
47+
->disableOriginalConstructor()
48+
->setMethods(['getAllIds', 'getResource'])
49+
->getMock();
50+
$abstractDbMock->expects($this->any())
51+
->method('getAllIds')
52+
->willReturn([]);
53+
54+
$filterMock = $this->getMockBuilder('Magento\Ui\Component\MassAction\Filter')
55+
->disableOriginalConstructor()
56+
->setMethods(['getCollection'])
57+
->getMock();
58+
$filterMock->expects($this->any())
59+
->method('getCollection')
60+
->willReturn($abstractDbMock);
61+
62+
$collectionFactoryMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\CollectionFactory')
63+
->disableOriginalConstructor()
64+
->setMethods(['create'])
65+
->getMock();
66+
$collectionFactoryMock->expects($this->any())
67+
->method('create')
68+
->willReturn($abstractDbMock);
69+
4670
$additionalParams = ['resultFactory' => $resultFactory];
4771
$this->action = new \Magento\Catalog\Controller\Adminhtml\Product\MassStatus(
4872
$this->initContext($additionalParams),
4973
$productBuilder,
50-
$this->priceProcessor
74+
$this->priceProcessor,
75+
$filterMock,
76+
$collectionFactoryMock
5177
);
5278
}
5379

app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/FlatTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ public function setUp()
4747
$this->_model = new \Magento\Catalog\Model\Resource\Product\Flat(
4848
$this->getMock('Magento\Framework\Model\Resource\Db\Context', [], [], '', false),
4949
$this->_storeManagerInterface,
50-
$this->getMock('Magento\Catalog\Model\Config', [], [], '', false)
50+
$this->getMock('Magento\Catalog\Model\Config', [], [], '', false),
51+
$this->getMock('Magento\Catalog\Model\Product\Attribute\DefaultAttributes')
5152
);
5253
}
5354

app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,11 +350,23 @@ protected function _loadSkuSuperAttributeValues($bunch, $newSku, $oldSku)
350350
/**
351351
* Array of SKU to array of super attribute values for all products.
352352
*
353+
* @param array $bunch
353354
* @return $this
354355
*/
355-
protected function _loadSkuSuperData()
356+
protected function _loadSkuSuperDataForBunch(array $bunch)
356357
{
357-
if (!$this->_skuSuperData) {
358+
$newSku = $this->_entityModel->getNewSku();
359+
$oldSku = $this->_entityModel->getOldSku();
360+
$productIds = [];
361+
foreach ($bunch as $rowData) {
362+
$sku = $rowData[ImportProduct::COL_SKU];
363+
$productData = isset($newSku[$sku]) ? $newSku[$sku] : $oldSku[$sku];
364+
$productIds[] = $productData['entity_id'];
365+
}
366+
367+
$this->_productSuperAttrs = [];
368+
$this->_skuSuperData = [];
369+
if (!empty($productIds)) {
358370
$mainTable = $this->_resource->getTableName('catalog_product_super_attribute');
359371
$optionTable = $this->_resource->getTableName('eav_attribute_option');
360372
$select = $this->_connection->select()->from(
@@ -368,6 +380,9 @@ protected function _loadSkuSuperData()
368380
'o.attribute_id'
369381
),
370382
['option_id']
383+
)->where(
384+
'product_id IN ( ? )',
385+
$productIds
371386
);
372387

373388
foreach ($this->_connection->fetchAll($select) as $row) {
@@ -703,11 +718,10 @@ public function saveData()
703718
$this->_productSuperData = [];
704719
$this->_productData = null;
705720

706-
if ($this->_entityModel->getBehavior() == \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND) {
707-
$this->_loadSkuSuperData();
708-
}
709-
710721
while ($bunch = $this->_entityModel->getNextBunch()) {
722+
if ($this->_entityModel->getBehavior() == \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND) {
723+
$this->_loadSkuSuperDataForBunch($bunch);
724+
}
711725
if (!$this->configurableInBunch($bunch)) {
712726
continue;
713727
}

0 commit comments

Comments
 (0)