Skip to content

Commit 6132d84

Browse files
author
Oleksii Korshenko
authored
Merge pull request #452 from magento-okapis/okapis-2.0.11-pr
Fixed issue: - MAGETWO-57002: [Backport] - Admin user with access to only one website is unable to edit a product - for 2.0 - MAGETWO-57715: [Backport] - User with permissions restricted to a single store can view orders on all stores for 2.0.x
2 parents 7d0ed18 + 44c4cf0 commit 6132d84

File tree

5 files changed

+85
-12
lines changed

5 files changed

+85
-12
lines changed

app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ public function reindexByIds(array $ids)
152152
$this->doReindexByIds($ids);
153153
} catch (\Exception $e) {
154154
$this->critical($e);
155-
throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
155+
throw new \Magento\Framework\Exception\LocalizedException(
156+
__("Catalog rule indexing failed. See details in exception log.")
157+
);
156158
}
157159
}
158160

@@ -186,7 +188,9 @@ public function reindexFull()
186188
$this->doReindexFull();
187189
} catch (\Exception $e) {
188190
$this->critical($e);
189-
throw new \Magento\Framework\Exception\LocalizedException(__($e->getMessage()), $e);
191+
throw new \Magento\Framework\Exception\LocalizedException(
192+
__("Catalog rule indexing failed. See details in exception log.")
193+
);
190194
}
191195
}
192196

app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,18 @@ public function addWebsitesToResult($flag = null)
7474
*/
7575
public function addWebsiteFilter($websiteId)
7676
{
77-
$entityInfo = $this->_getAssociatedEntityInfo('website');
7877
if (!$this->getFlag('is_website_table_joined')) {
78+
$websiteIds = is_array($websiteId) ? $websiteId : [$websiteId];
79+
$entityInfo = $this->_getAssociatedEntityInfo('website');
7980
$this->setFlag('is_website_table_joined', true);
80-
if ($websiteId instanceof \Magento\Store\Model\Website) {
81-
$websiteId = $websiteId->getId();
81+
foreach ($websiteIds as $index => $website) {
82+
if ($website instanceof \Magento\Store\Model\Website) {
83+
$websiteIds[$index] = $website->getId();
84+
}
8285
}
8386
$this->getSelect()->join(
8487
['website' => $this->getTable($entityInfo['associations_table'])],
85-
$this->getConnection()->quoteInto('website.' . $entityInfo['entity_id_field'] . ' = ?', $websiteId)
88+
$this->getConnection()->quoteInto('website.' . $entityInfo['entity_id_field'] . ' IN (?)', $websiteIds)
8689
. ' AND main_table.' . $entityInfo['rule_id_field'] . ' = website.' . $entityInfo['rule_id_field'],
8790
[]
8891
);

app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
4545
*/
4646
protected $_db;
4747

48+
/**
49+
* @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
50+
*/
51+
private $connectionMock;
52+
53+
/**
54+
* @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject
55+
*/
56+
private $selectMock;
57+
4858
protected function setUp()
4959
{
5060
$this->_entityFactoryMock = $this->getMock('Magento\Framework\Data\Collection\EntityFactoryInterface');
@@ -152,6 +162,30 @@ public function testAddWebsiteFilter()
152162
);
153163
}
154164

165+
public function testAddWebsiteFilterArray()
166+
{
167+
$this->selectMock = $this->getMockBuilder(\Magento\Framework\DB\Select::class)
168+
->disableOriginalConstructor()
169+
->getMock();
170+
171+
$this->connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\AdapterInterface::class)
172+
->disableOriginalConstructor()
173+
->getMockForAbstractClass();
174+
$this->connectionMock->expects($this->atLeastOnce())
175+
->method('quoteInto')
176+
->with($this->equalTo('website. IN (?)'), $this->equalTo(['2', '3']))
177+
->willReturn(true);
178+
179+
$this->abstractCollection->expects($this->atLeastOnce())->method('getSelect')->willReturn($this->selectMock);
180+
$this->abstractCollection->expects($this->atLeastOnce())->method('getConnection')
181+
->willReturn($this->connectionMock);
182+
183+
$this->assertInstanceOf(
184+
\Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection::class,
185+
$this->abstractCollection->addWebsiteFilter(['2', '3'])
186+
);
187+
}
188+
155189
public function testAddFieldToFilter()
156190
{
157191
$this->_prepareAddFilterStubs();
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Sales\Model\ResourceModel\Order\Grid;
7+
8+
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
9+
use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
10+
use Magento\Framework\Event\ManagerInterface as EventManager;
11+
use Psr\Log\LoggerInterface as Logger;
12+
13+
/**
14+
* Order grid collection
15+
*/
16+
class Collection extends \Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult
17+
{
18+
/**
19+
* Initialize dependencies.
20+
*
21+
* @param EntityFactory $entityFactory
22+
* @param Logger $logger
23+
* @param FetchStrategy $fetchStrategy
24+
* @param EventManager $eventManager
25+
* @param string $mainTable
26+
* @param string $resourceModel
27+
*/
28+
public function __construct(
29+
EntityFactory $entityFactory,
30+
Logger $logger,
31+
FetchStrategy $fetchStrategy,
32+
EventManager $eventManager,
33+
$mainTable = 'sales_order_grid',
34+
$resourceModel = '\Magento\Sales\Model\ResourceModel\Order'
35+
) {
36+
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $mainTable, $resourceModel);
37+
}
38+
}

app/code/Magento/Sales/etc/di.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -798,12 +798,6 @@
798798
<argument name="state" xsi:type="object">Magento\Framework\App\State\Proxy</argument>
799799
</arguments>
800800
</type>
801-
<virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
802-
<arguments>
803-
<argument name="mainTable" xsi:type="string">sales_order_grid</argument>
804-
<argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order</argument>
805-
</arguments>
806-
</virtualType>
807801
<virtualType name="Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
808802
<arguments>
809803
<argument name="mainTable" xsi:type="string">sales_invoice_grid</argument>

0 commit comments

Comments
 (0)