Skip to content

Commit de0e8ce

Browse files
committed
Merge branch 'MAGETWO-43102' of https://github.corp.magento.com/magento-troll/magento2ce into MAGETWO-43102
2 parents 87b7c0e + 5f4b221 commit de0e8ce

File tree

6 files changed

+92
-38
lines changed

6 files changed

+92
-38
lines changed

app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public function execute()
100100

101101
$refreshTree = false;
102102
$data['general'] = $this->getRequest()->getPostValue();
103-
$data = $this->stringToBoolConverting($this->stringToBoolInputs, $data);
103+
$data = $this->stringToBoolConverting($data);
104104
$data = $this->imagePreprocessing($data);
105105
$storeId = isset($data['general']['store_id']) ? $data['general']['store_id'] : null;
106106
if ($data) {
@@ -258,17 +258,20 @@ public function imagePreprocessing($data)
258258
/**
259259
* Converting inputs from string to boolean
260260
*
261-
* @param array $stringToBoolInputs
262261
* @param array $data
262+
* @param array $stringToBoolInputs
263263
*
264264
* @return array
265265
*/
266-
public function stringToBoolConverting($stringToBoolInputs, $data)
266+
public function stringToBoolConverting($data, $stringToBoolInputs = null)
267267
{
268+
if (null === $stringToBoolInputs) {
269+
$stringToBoolInputs = $this->stringToBoolInputs;
270+
}
268271
foreach ($stringToBoolInputs as $key => $value) {
269272
if (is_array($value)) {
270273
if (isset($data[$key])) {
271-
$data[$key] = $this->stringToBoolConverting($value, $data[$key]);
274+
$data[$key] = $this->stringToBoolConverting($data[$key], $value);
272275
}
273276
} else {
274277
if (isset($data[$value])) {

app/code/Magento/Catalog/Model/Category/DataProvider.php

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
use Magento\Store\Model\StoreManagerInterface;
1616
use Magento\Ui\Component\Form\Field;
1717
use Magento\Ui\DataProvider\EavValidationRules;
18-
use Magento\Catalog\Api\CategoryRepositoryInterface;
18+
use Magento\Catalog\Model\CategoryFactory;
19+
use Magento\Framework\Exception\NoSuchEntityException;
1920

2021
/**
2122
* Class DataProvider
@@ -107,9 +108,9 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
107108
private $storeManager;
108109

109110
/**
110-
* @var CategoryRepositoryInterface
111+
* @var CategoryFactory
111112
*/
112-
private $categoryRepository;
113+
private $categoryFactory;
113114

114115
/**
115116
* DataProvider constructor
@@ -123,7 +124,7 @@ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
123124
* @param \Magento\Framework\Registry $registry
124125
* @param Config $eavConfig
125126
* @param \Magento\Framework\App\RequestInterface $request
126-
* @param CategoryRepositoryInterface $categoryRepository
127+
* @param CategoryFactory $categoryFactory
127128
* @param array $meta
128129
* @param array $data
129130
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -138,7 +139,7 @@ public function __construct(
138139
\Magento\Framework\Registry $registry,
139140
Config $eavConfig,
140141
\Magento\Framework\App\RequestInterface $request,
141-
CategoryRepositoryInterface $categoryRepository,
142+
CategoryFactory $categoryFactory,
142143
array $meta = [],
143144
array $data = []
144145
) {
@@ -149,7 +150,7 @@ public function __construct(
149150
$this->registry = $registry;
150151
$this->storeManager = $storeManager;
151152
$this->request = $request;
152-
$this->categoryRepository = $categoryRepository;
153+
$this->categoryFactory = $categoryFactory;
153154
parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
154155
$this->meta = $this->prepareMeta($this->meta);
155156
}
@@ -310,6 +311,7 @@ protected function addUseDefaultSettings($category, $categoryData)
310311
* Get current category
311312
*
312313
* @return Category
314+
* @throws NoSuchEntityException
313315
*/
314316
public function getCurrentCategory()
315317
{
@@ -320,7 +322,12 @@ public function getCurrentCategory()
320322
$requestId = $this->request->getParam($this->requestFieldName);
321323
$requestScope = $this->request->getParam($this->requestScopeFieldName, Store::DEFAULT_STORE_ID);
322324
if ($requestId) {
323-
$category = $this->categoryRepository->get($requestId, $requestScope);
325+
$category = $this->categoryFactory->create();
326+
$category->setStoreId($requestScope);
327+
$category->load($requestId);
328+
if (!$category->getId()) {
329+
throw NoSuchEntityException::singleField('id', $requestId);
330+
}
324331
}
325332
return $category;
326333
}

app/code/Magento/Catalog/Model/ResourceModel/Category.php

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -173,33 +173,6 @@ protected function _getTree()
173173
return $this->_tree;
174174
}
175175

176-
/**
177-
* Process category data before delete
178-
* update children count for parent category
179-
* delete child categories
180-
*
181-
* @param \Magento\Framework\DataObject $object
182-
* @return $this
183-
*/
184-
protected function _beforeDelete(\Magento\Framework\DataObject $object)
185-
{
186-
parent::_beforeDelete($object);
187-
188-
/**
189-
* Update children count for all parent categories
190-
*/
191-
$parentIds = $object->getParentIds();
192-
if ($parentIds) {
193-
$childDecrease = $object->getChildrenCount() + 1;
194-
// +1 is itself
195-
$data = ['children_count' => new \Zend_Db_Expr('children_count - ' . $childDecrease)];
196-
$where = ['entity_id IN(?)' => $parentIds];
197-
$this->getConnection()->update($this->getEntityTable(), $data, $where);
198-
}
199-
$this->deleteChildren($object);
200-
return $this;
201-
}
202-
203176
/**
204177
* Delete children categories of specific category
205178
*
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Catalog\Observer;
7+
8+
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Framework\Event\Observer;
10+
use Magento\Catalog\Model\Category;
11+
12+
class CatalogCategoryDeleteChildren implements ObserverInterface
13+
{
14+
/**
15+
* Delete children of category
16+
*
17+
* @param Observer $observer
18+
* @return void
19+
*/
20+
public function execute(Observer $observer)
21+
{
22+
/** @var \Magento\Catalog\Model\Category $category */
23+
$category = $observer->getEvent()->getData('category');
24+
/** @var \Magento\Catalog\Model\ResourceModel\Category $resourceModel */
25+
$resourceModel = $category->getResource();
26+
$resourceModel->deleteChildren($category);
27+
}
28+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Catalog\Observer;
7+
8+
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Framework\Event\Observer;
10+
use Magento\Catalog\Model\Category;
11+
12+
class CatalogCategoryRecalculateChildrenCount implements ObserverInterface
13+
{
14+
/**
15+
* Recalculate children count for category
16+
*
17+
* @param Observer $observer
18+
* @return void
19+
*/
20+
public function execute(Observer $observer)
21+
{
22+
/** @var \Magento\Catalog\Model\Category $category */
23+
$category = $observer->getEvent()->getData('category');
24+
25+
/** @var \Magento\Catalog\Model\ResourceModel\Category $resourceModel */
26+
$resourceModel = $category->getResource();
27+
/**
28+
* Update children count for all parent categories
29+
*/
30+
$parentIds = $category->getParentIds();
31+
if ($parentIds) {
32+
$childDecrease = $category->getChildrenCount() + 1;
33+
// +1 is itself
34+
$data = ['children_count' => new \Zend_Db_Expr('children_count - ' . $childDecrease)];
35+
$where = ['entity_id IN(?)' => $parentIds];
36+
$resourceModel->getConnection()->update($resourceModel->getEntityTable(), $data, $where);
37+
}
38+
}
39+
}

app/code/Magento/Catalog/etc/adminhtml/events.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@
99
<event name="cms_wysiwyg_images_static_urls_allowed">
1010
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver" />
1111
</event>
12+
<event name="catalog_category_delete_before">
13+
<observer name="catalog_category_recalculate_children_count" instance="Magento\Catalog\Observer\CatalogCategoryRecalculateChildrenCount" />
14+
<observer name="catalog_category_delete_children" instance="Magento\Catalog\Observer\CatalogCategoryDeleteChildren" />
15+
</event>
1216
</config>

0 commit comments

Comments
 (0)