Skip to content

Commit 061229b

Browse files
author
Oleksandr Gorkun
committed
MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416
1 parent 4b57470 commit 061229b

File tree

2 files changed

+23
-45
lines changed

2 files changed

+23
-45
lines changed

app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,37 @@
1212
class DbStorage extends BaseDbStorage
1313
{
1414
/**
15-
* @param array $data
16-
* @return \Magento\Framework\DB\Select
15+
* {@inheritDoc}
1716
*/
1817
protected function prepareSelect(array $data)
1918
{
20-
if (!array_key_exists(UrlRewrite::ENTITY_ID, $data)
21-
|| !array_key_exists(UrlRewrite::ENTITY_TYPE, $data)
22-
|| !array_key_exists(UrlRewrite::STORE_ID, $data)
23-
) {
24-
throw new \InvalidArgumentException(
25-
UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE
26-
. ' and ' . UrlRewrite::STORE_ID . ' parameters are required.'
27-
);
19+
$metadata = [];
20+
if (array_key_exists(UrlRewrite::METADATA, $data)) {
21+
$metadata = $data[UrlRewrite::METADATA];
22+
unset($data[UrlRewrite::METADATA]);
2823
}
2924

3025
$select = $this->connection->select();
31-
$select->from(['url_rewrite' => $this->resource->getTableName('url_rewrite')])
32-
->joinLeft(
33-
['relation' => $this->resource->getTableName(Product::TABLE_NAME)],
34-
'url_rewrite.url_rewrite_id = relation.url_rewrite_id'
35-
)
36-
->where(
37-
'url_rewrite.entity_id IN (?)',
38-
$data[UrlRewrite::ENTITY_ID]
39-
)
40-
->where(
41-
'url_rewrite.entity_type = ?',
42-
$data[UrlRewrite::ENTITY_TYPE]
43-
)
44-
->where('url_rewrite.store_id IN (?)', $data[UrlRewrite::STORE_ID]);
45-
if (array_key_exists(UrlRewrite::REDIRECT_TYPE, $data)) {
46-
$select->where(
47-
'url_rewrite.redirect_type = ?',
48-
$data[UrlRewrite::REDIRECT_TYPE]
49-
);
26+
$select->from([
27+
'url_rewrite' => $this->resource->getTableName(self::TABLE_NAME)
28+
]);
29+
$select->joinLeft(
30+
['relation' => $this->resource->getTableName(Product::TABLE_NAME)],
31+
'url_rewrite.url_rewrite_id = relation.url_rewrite_id'
32+
);
33+
34+
foreach ($data as $column => $value) {
35+
$select->where('url_rewrite.' . $column . ' IN (?)', $value);
5036
}
51-
if (empty($data[UrlRewrite::METADATA]['category_id'])) {
37+
if (empty($metadata['category_id'])) {
5238
$select->where('relation.category_id IS NULL');
5339
} else {
54-
$select->where('relation.category_id = ?', $data[UrlRewrite::METADATA]['category_id']);
40+
$select->where(
41+
'relation.category_id = ?',
42+
$metadata['category_id']
43+
);
5544
}
45+
5646
return $select;
5747
}
5848
}

app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,6 @@ protected function setUp()
8989

9090
public function testPrepareSelect()
9191
{
92-
//Not passing requried parameters.
93-
try {
94-
$this->storage->findOneByData(['SomeOtherParam'=>42]);
95-
$this->fail('Didn\'t ask for required parameters');
96-
} catch (\InvalidArgumentException $exception) {
97-
$this->assertEquals(
98-
UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE
99-
. ' and ' . UrlRewrite::STORE_ID . ' parameters are required.',
100-
$exception->getMessage()
101-
);
102-
}
103-
10492
//Passing expected parameters, checking select built.
10593
$entityType = 'custom';
10694
$entityId= 42;
@@ -116,7 +104,7 @@ public function testPrepareSelect()
116104
$this->select
117105
->expects($this->at(3))
118106
->method('where')
119-
->with('url_rewrite.entity_type = ?', $entityType)
107+
->with('url_rewrite.entity_type IN (?)', $entityType)
120108
->willReturn($this->select);
121109
$this->select
122110
->expects($this->at(4))
@@ -126,7 +114,7 @@ public function testPrepareSelect()
126114
$this->select
127115
->expects($this->at(5))
128116
->method('where')
129-
->with('url_rewrite.redirect_type = ?', $redirectType)
117+
->with('url_rewrite.redirect_type IN (?)', $redirectType)
130118
->willReturn($this->select);
131119
$this->select
132120
->expects($this->at(6))

0 commit comments

Comments
 (0)