Skip to content

Commit 8e752f1

Browse files
Merge pull request #746 from magento-troll/MAGETWO-58600
Story: - MAGETWO-58600: Remove uses of unserialize in \Magento\UrlRewrite\Model\UrlRewrite attribute metadata
2 parents 3140ec6 + 5418f4e commit 8e752f1

File tree

17 files changed

+524
-83
lines changed

17 files changed

+524
-83
lines changed

app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Remove.php

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,55 @@
55
*/
66
namespace Magento\CatalogUrlRewrite\Model\Category\Plugin\Category;
77

8-
use Magento\Catalog\Api\Data\CategoryInterface;
9-
use Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider;
10-
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
11-
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
12-
use Magento\UrlRewrite\Model\UrlPersistInterface;
138
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
149

1510
class Remove
1611
{
17-
/** @var UrlPersistInterface */
12+
/** @var \Magento\UrlRewrite\Model\UrlPersistInterface */
1813
protected $urlPersist;
1914

20-
/** @var ProductUrlRewriteGenerator */
15+
/** @var \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator */
2116
protected $productUrlRewriteGenerator;
2217

23-
/** @var ChildrenCategoriesProvider */
18+
/** @var \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider */
2419
protected $childrenCategoriesProvider;
2520

21+
/** @var \Magento\Framework\Serialize\Serializer\Json */
22+
private $serializer;
23+
2624
/**
27-
* @param UrlPersistInterface $urlPersist
28-
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
29-
* @param ChildrenCategoriesProvider $childrenCategoriesProvider
25+
* @param \Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist
26+
* @param \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $productUrlRewriteGenerator
27+
* @param \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider
28+
* @param \Magento\Framework\Serialize\Serializer\Json|null $serializer
3029
*/
3130
public function __construct(
32-
UrlPersistInterface $urlPersist,
33-
ProductUrlRewriteGenerator $productUrlRewriteGenerator,
34-
ChildrenCategoriesProvider $childrenCategoriesProvider
31+
\Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist,
32+
\Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $productUrlRewriteGenerator,
33+
\Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider,
34+
\Magento\Framework\Serialize\Serializer\Json $serializer = null
3535
) {
3636
$this->urlPersist = $urlPersist;
3737
$this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
3838
$this->childrenCategoriesProvider = $childrenCategoriesProvider;
39+
$this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()->get(
40+
\Magento\Framework\Serialize\Serializer\Json::class
41+
);
3942
}
4043

4144
/**
4245
* Remove product urls from storage
4346
*
4447
* @param \Magento\Catalog\Model\ResourceModel\Category $subject
45-
* @param callable $proceed
46-
* @param CategoryInterface $category
48+
* @param \Closure $proceed
49+
* @param \Magento\Catalog\Api\Data\CategoryInterface $category
4750
* @return mixed
4851
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4952
*/
5053
public function aroundDelete(
5154
\Magento\Catalog\Model\ResourceModel\Category $subject,
5255
\Closure $proceed,
53-
CategoryInterface $category
56+
\Magento\Catalog\Api\Data\CategoryInterface $category
5457
) {
5558
$categoryIds = $this->childrenCategoriesProvider->getChildrenIds($category, true);
5659
$categoryIds[] = $category->getId();
@@ -72,13 +75,13 @@ protected function deleteRewritesForCategory($categoryId)
7275
$this->urlPersist->deleteByData(
7376
[
7477
UrlRewrite::ENTITY_ID => $categoryId,
75-
UrlRewrite::ENTITY_TYPE => CategoryUrlRewriteGenerator::ENTITY_TYPE,
78+
UrlRewrite::ENTITY_TYPE => \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator::ENTITY_TYPE,
7679
]
7780
);
7881
$this->urlPersist->deleteByData(
7982
[
80-
UrlRewrite::METADATA => serialize(['category_id' => $categoryId]),
81-
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
83+
UrlRewrite::METADATA => $this->serializer->serialize(['category_id' => $categoryId]),
84+
UrlRewrite::ENTITY_TYPE => \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator::ENTITY_TYPE,
8285
]
8386
);
8487
}

app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,18 @@
55
*/
66
namespace Magento\CatalogUrlRewrite\Observer;
77

8-
use Magento\Catalog\Model\Category;
9-
use Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator;
10-
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
11-
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
12-
use Magento\Framework\App\ObjectManager;
13-
use Magento\Framework\Event\Observer as EventObserver;
14-
use Magento\UrlRewrite\Model\UrlPersistInterface;
15-
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
16-
use Magento\UrlRewrite\Model\MergeDataProviderFactory;
17-
188
class UrlRewriteHandler
199
{
2010
/** @var \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider */
2111
protected $childrenCategoriesProvider;
2212

23-
/** @var CategoryUrlRewriteGenerator */
13+
/** @var \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator */
2414
protected $categoryUrlRewriteGenerator;
2515

26-
/** @var ProductUrlRewriteGenerator */
16+
/** @var \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator */
2717
protected $productUrlRewriteGenerator;
2818

29-
/** @var UrlPersistInterface */
19+
/** @var \Magento\UrlRewrite\Model\UrlPersistInterface */
3020
protected $urlPersist;
3121

3222
/** @var array */
@@ -35,48 +25,59 @@ class UrlRewriteHandler
3525
/** @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */
3626
protected $productCollectionFactory;
3727

38-
/**
39-
* @var CategoryBasedProductRewriteGenerator
40-
*/
28+
/** @var \Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator */
4129
private $categoryBasedProductRewriteGenerator;
4230

4331
/** @var \Magento\UrlRewrite\Model\MergeDataProvider */
4432
private $mergeDataProviderPrototype;
4533

34+
/** @var \Magento\Framework\Serialize\Serializer\Json */
35+
private $serializer;
36+
4637
/**
4738
* @param \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider
48-
* @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator
49-
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
50-
* @param UrlPersistInterface $urlPersist
39+
* @param \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator
40+
* @param \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $productUrlRewriteGenerator
41+
* @param \Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist
5142
* @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
5243
* @param \Magento\UrlRewrite\Model\MergeDataProviderFactory|null $mergeDataProviderFactory
44+
* @param \Magento\Framework\Serialize\Serializer\Json|null $serializer
5345
*/
5446
public function __construct(
5547
\Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider,
56-
CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator,
57-
ProductUrlRewriteGenerator $productUrlRewriteGenerator,
58-
UrlPersistInterface $urlPersist,
48+
\Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator,
49+
\Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $productUrlRewriteGenerator,
50+
\Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist,
5951
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
60-
MergeDataProviderFactory $mergeDataProviderFactory = null
52+
\Magento\UrlRewrite\Model\MergeDataProviderFactory $mergeDataProviderFactory = null,
53+
\Magento\Framework\Serialize\Serializer\Json $serializer = null
6154
) {
6255
$this->childrenCategoriesProvider = $childrenCategoriesProvider;
6356
$this->categoryUrlRewriteGenerator = $categoryUrlRewriteGenerator;
6457
$this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
6558
$this->urlPersist = $urlPersist;
6659
$this->productCollectionFactory = $productCollectionFactory;
60+
6761
if (!isset($mergeDataProviderFactory)) {
68-
$mergeDataProviderFactory = ObjectManager::getInstance()->get(MergeDataProviderFactory::class);
62+
$mergeDataProviderFactory = \Magento\Framework\App\ObjectManager::getInstance()->get(
63+
\Magento\UrlRewrite\Model\MergeDataProviderFactory::class
64+
);
6965
}
66+
7067
$this->mergeDataProviderPrototype = $mergeDataProviderFactory->create();
68+
69+
$this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()->get(
70+
\Magento\Framework\Serialize\Serializer\Json::class
71+
);
7172
}
7273

7374
/**
7475
* Generate url rewrites for products assigned to category
7576
*
76-
* @param Category $category
77+
* @param \Magento\Catalog\Model\Category $category
7778
* @return array
7879
*/
79-
public function generateProductUrlRewrites(Category $category)
80+
public function generateProductUrlRewrites(\Magento\Catalog\Model\Category $category)
8081
{
8182
$mergeDataProvider = clone $this->mergeDataProviderPrototype;
8283
$this->isSkippedProduct = [];
@@ -123,14 +124,14 @@ public function generateProductUrlRewrites(Category $category)
123124
}
124125

125126
/**
126-
* @param Category $category
127+
* @param \Magento\Catalog\Model\Category $category
127128
* @param int $storeId
128129
* @param bool $saveRewriteHistory
129130
* @param int|null $rootCategoryId
130-
* @return UrlRewrite[]
131+
* @return array
131132
*/
132133
public function getCategoryProductsUrlRewrites(
133-
Category $category,
134+
\Magento\Catalog\Model\Category $category,
134135
$storeId,
135136
$saveRewriteHistory,
136137
$rootCategoryId = null
@@ -161,37 +162,41 @@ public function getCategoryProductsUrlRewrites(
161162
* Retrieve generator, which use single category for different products
162163
*
163164
* @deprecated
164-
* @return CategoryBasedProductRewriteGenerator|mixed
165+
* @return \Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator|mixed
165166
*/
166167
private function getCategoryBasedProductRewriteGenerator()
167168
{
168169
if (!$this->categoryBasedProductRewriteGenerator) {
169-
$this->categoryBasedProductRewriteGenerator = ObjectManager::getInstance()
170-
->get(CategoryBasedProductRewriteGenerator::class);
170+
$this->categoryBasedProductRewriteGenerator = \Magento\Framework\App\ObjectManager::getInstance()
171+
->get(\Magento\CatalogUrlRewrite\Model\CategoryBasedProductRewriteGenerator::class);
171172
}
172173

173174
return $this->categoryBasedProductRewriteGenerator;
174175
}
175176

176177
/**
177-
* @param Category $category
178+
* @param \Magento\Catalog\Model\Category $category
178179
* @return void
179180
*/
180-
public function deleteCategoryRewritesForChildren(Category $category)
181+
public function deleteCategoryRewritesForChildren(\Magento\Catalog\Model\Category $category)
181182
{
182183
$categoryIds = $this->childrenCategoriesProvider->getChildrenIds($category, true);
183184
$categoryIds[] = $category->getId();
184185
foreach ($categoryIds as $categoryId) {
185186
$this->urlPersist->deleteByData(
186187
[
187-
UrlRewrite::ENTITY_ID => $categoryId,
188-
UrlRewrite::ENTITY_TYPE => CategoryUrlRewriteGenerator::ENTITY_TYPE,
188+
\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::ENTITY_ID =>
189+
$categoryId,
190+
\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::ENTITY_TYPE =>
191+
\Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator::ENTITY_TYPE,
189192
]
190193
);
191194
$this->urlPersist->deleteByData(
192195
[
193-
UrlRewrite::METADATA => serialize(['category_id' => $categoryId]),
194-
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
196+
\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::METADATA =>
197+
$this->serializer->serialize(['category_id' => $categoryId]),
198+
\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::ENTITY_TYPE =>
199+
\Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator::ENTITY_TYPE,
195200
]
196201
);
197202
}

app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/ChildrenUrlRewriteGeneratorTest.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\CatalogUrlRewrite\Test\Unit\Model\Category;
77

88
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
9+
use Magento\Framework\Serialize\Serializer\Json;
910

1011
class ChildrenUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
1112
{
@@ -27,8 +28,14 @@ class ChildrenUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
2728
/** @var \PHPUnit_Framework_MockObject_MockObject */
2829
private $mergeDataProvider;
2930

31+
/** @var \PHPUnit_Framework_MockObject_MockObject */
32+
private $serializerMock;
33+
3034
protected function setUp()
3135
{
36+
$this->serializerMock = $this->getMockBuilder(Json::class)
37+
->disableOriginalConstructor()
38+
->getMock();
3239
$this->childrenCategoriesProvider = $this->getMockBuilder(
3340
\Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider::class
3441
)->disableOriginalConstructor()->getMock();
@@ -84,13 +91,13 @@ public function testGenerate()
8491
->will($this->returnValue($saveRewritesHistory));
8592
$this->categoryUrlRewriteGeneratorFactory->expects($this->once())->method('create')
8693
->will($this->returnValue($this->categoryUrlRewriteGenerator));
87-
$url1 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
94+
$url1 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializerMock);
8895
$url1->setRequestPath('category-1')
8996
->setStoreId(1);
90-
$url2 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
97+
$url2 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializerMock);
9198
$url2->setRequestPath('category-2')
9299
->setStoreId(2);
93-
$url3 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite();
100+
$url3 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializerMock);
94101
$url3->setRequestPath('category-1')
95102
->setStoreId(1);
96103
$this->categoryUrlRewriteGenerator->expects($this->once())->method('generate')

app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/Plugin/Category/RemoveTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
3939
*/
4040
private $objectMock;
4141

42+
/** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */
43+
private $serializerMock;
44+
4245
protected function setUp()
4346
{
4447
$this->objectManager = new ObjectManager($this);
@@ -52,6 +55,7 @@ protected function setUp()
5255
$this->objectMock = $this->getMockBuilder(Category::class)
5356
->disableOriginalConstructor()
5457
->getMock();
58+
$this->serializerMock = $this->getMock(\Magento\Framework\Serialize\Serializer\Json::class, [], [], '', false);
5559
}
5660

5761
public function testAroundDelete()
@@ -64,7 +68,8 @@ public function testAroundDelete()
6468
CategoryRemovePlugin::class,
6569
[
6670
'urlPersist' => $this->urlPersistMock,
67-
'childrenCategoriesProvider' => $this->childrenCategoriesProviderMock
71+
'childrenCategoriesProvider' => $this->childrenCategoriesProviderMock,
72+
'serializer' => $this->serializerMock
6873
]
6974
);
7075
$this->childrenCategoriesProviderMock->expects($this->once())
@@ -76,6 +81,9 @@ public function testAroundDelete()
7681
->willReturn(1);
7782
$this->urlPersistMock->expects($this->exactly(2))
7883
->method('deleteByData');
84+
$this->serializerMock->expects($this->once())
85+
->method('serialize')
86+
->with(['category_id' => 1]);
7987
$this->assertSame(
8088
$this->subjectMock,
8189
$plugin->aroundDelete($this->subjectMock, $proceed, $this->objectMock)

0 commit comments

Comments
 (0)