diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php index 9cd66815ecf3e0b9307fe5732a92c968d894ad54..6ff14589e82ebfbe5435bbeef8a50cb03e45a0ae 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php @@ -93,7 +93,7 @@ class Form extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory 'onclick' => "categoryDelete('" . $this->getUrl( 'catalog/*/delete', ['_current' => true] - ) . "', true, {$categoryId})", + ) . "')", 'class' => 'delete' ] ); diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php index f5b053679733a438d0da357db58fc75858db8c7a..e50c9d38b9c070fee9a5d81b6d7f432e80d850b0 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php @@ -18,13 +18,13 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Category $resultRedirect = $this->resultRedirectFactory->create(); $categoryId = (int)$this->getRequest()->getParam('id'); + $parentId = null; if ($categoryId) { try { $category = $this->_objectManager->create('Magento\Catalog\Model\Category')->load($categoryId); + $parentId = $category->getParentId(); $this->_eventManager->dispatch('catalog_controller_category_delete', ['category' => $category]); - $this->_objectManager->get('Magento\Backend\Model\Auth\Session')->setDeletedPath($category->getPath()); - $category->delete(); $this->messageManager->addSuccess(__('You deleted the category.')); } catch (\Magento\Framework\Model\Exception $e) { @@ -35,6 +35,6 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Category return $resultRedirect->setPath('catalog/*/edit', ['_current' => true]); } } - return $resultRedirect->setPath('catalog/*/', ['_current' => true, 'id' => null]); + return $resultRedirect->setPath('catalog/*/', ['_current' => true, 'id' => $parentId]); } } diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php index f17bfc3abd5c1630e0e93082724eb30a8f6e1b1a..7f6dde5cb3ee101c0d2ed9f1dc3b2c1c19cf213a 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php @@ -97,6 +97,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Category . $resultPage->getLayout()->getBlock('category.tree') ->getBreadcrumbsJavascript($breadcrumbsPath, 'editingCategoryBreadcrumbs'), 'messages' => $resultPage->getLayout()->getMessagesBlock()->getGroupedHtml(), + 'toolbar' => $resultPage->getLayout()->getBlock('page.actions.toolbar')->toHtml() ]); $this->_eventManager->dispatch( 'category_prepare_ajax_response', diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml index 75b59da8d09aa3b5da4483c7fe22493056038a6d..d1d3ec2b11497fd593f8e7346144b79f4e321a0b 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml @@ -34,21 +34,16 @@ require([ * This routine get categoryId explicitly, so even if currently selected tree node is out of sync * with this form, we surely delete same category in the tree and at backend */ - function categoryDelete(url, useAjax, categoryId) { + function categoryDelete(url) { if (confirm('<?php echo __('Are you sure you want to delete this category?') ?>')){ - if (useAjax){ - tree.nodeForDelete = categoryId; - updateContent(url, {}, true, true); - } else { - location.href = url; - } + location.href = url; } } /** * Update category content area */ - function updateContent(url, params, refreshTree, deleteAction) { + function updateContent(url, params, refreshTree) { var node = tree.getNodeById(tree.currentNodeId), parentNode = node && node.parentNode, parentId, @@ -64,23 +59,15 @@ require([ } (function($){ - var $categoryContainer = $('#category-edit-container'); + var $categoryContainer = $('#category-edit-container'), + messagesContainer = $('.messages'); + messagesContainer.html(''); $.ajax({ url: url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), data: params, context: $('body'), showLoader: true }).done(function(data){ - if (deleteAction && parentNode) { - parentId = parentNode.id; - - redirectUrl = !parentNode.isRoot ? - tree.buildUrl(parentId) : - tree.getBaseUrl(); - - location.href = redirectUrl; - } - if (data.content) { $('.page-actions').floatingHeader('destroy'); try { @@ -111,7 +98,10 @@ require([ } if (data.messages && data.messages.length > 0) { - $('.messages').html(data.messages); + messagesContainer.html(data.messages); + } + if (data.toolbar) { + $('[data-ui-id="page-actions-toolbar-content-header"]').replaceWith(data.toolbar) } }); })(jQuery); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Category/DeleteTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Category/DeleteTest.php new file mode 100644 index 0000000000000000000000000000000000000000..34b69eeaddef32fcd690ee77896c266fe734ff1c --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Category/DeleteTest.php @@ -0,0 +1,43 @@ +<?php +/** + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + */ +namespace Magento\Catalog\Controller\Adminhtml\Category; + +use Magento\Framework\Message\MessageInterface; + +class DeleteTest extends \Magento\Backend\Utility\Controller +{ + /** + * @magentoDataFixture Magento/Catalog/_files/categories.php + */ + public function testDeleteById() + { + $categoryId = 4; + $parentId = 3; + $this->getRequest()->setParam('id', $categoryId); + + $this->dispatch('backend/catalog/category/delete/'); + + $this->assertNull($this->getCategoryById($categoryId)); + $this->assertSessionMessages( + $this->equalTo(['You deleted the category.']), + MessageInterface::TYPE_SUCCESS + ); + $this->assertRedirect($this->stringContains('catalog/category/index/id/' . $parentId)); + } + + /** + * Retrieve attribute set based on given name. + * + * @param int $categoryId + * @return \Magento\Catalog\Model\Category|null + */ + protected function getCategoryById($categoryId) + { + $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + 'Magento\Catalog\Model\Category' + )->load($categoryId); + return $category->getId() === null ? null : $category; + } +}