Skip to content

Commit

Permalink
Merge pull request #18 from magento-goinc/MAGETWO-32346
Browse files Browse the repository at this point in the history
[GoInc] Bug Fixes & Improve Change Risk Analysis and Predictions Metric
  • Loading branch information
vpelipenko committed Jan 8, 2015
2 parents 9c19d10 + a55bb3e commit 4ce64b6
Show file tree
Hide file tree
Showing 17 changed files with 521 additions and 484 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ protected function _prepareLayout()
'onclick' => "categoryDelete('" . $this->getUrl(
'catalog/*/delete',
['_current' => true]
) . "', true, {$categoryId})",
) . "')",
'class' => 'delete'
]
);
Expand Down
266 changes: 0 additions & 266 deletions app/code/Magento/Catalog/Block/Navigation.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,16 +173,6 @@ public function getCurrenCategoryKey()
return $this->_currentCategoryKey;
}

/**
* Get catagories of current store
*
* @return \Magento\Framework\Data\Tree\Node\Collection
*/
public function getStoreCategories()
{
return $this->_catalogCategory->getStoreCategories();
}

/**
* Retrieve child categories of current category
*
Expand Down Expand Up @@ -229,161 +219,6 @@ public function getCategoryUrl($category)
return $url;
}

/**
* Return item position representation in menu tree
*
* @param int $level
* @return string
*/
protected function _getItemPosition($level)
{
if ($level == 0) {
$zeroLevelPosition = isset(
$this->_itemLevelPositions[$level]
) ? $this->_itemLevelPositions[$level] + 1 : 1;
$this->_itemLevelPositions = [];
$this->_itemLevelPositions[$level] = $zeroLevelPosition;
} elseif (isset($this->_itemLevelPositions[$level])) {
$this->_itemLevelPositions[$level]++;
} else {
$this->_itemLevelPositions[$level] = 1;
}

$position = [];
for ($i = 0; $i <= $level; $i++) {
if (isset($this->_itemLevelPositions[$i])) {
$position[] = $this->_itemLevelPositions[$i];
}
}
return implode('-', $position);
}

/**
* Render category to html
*
* @param Category $category
* @param int $level Nesting level number
* @param boolean $isLast Whether ot not this item is last, affects list item class
* @param boolean $isFirst Whether ot not this item is first, affects list item class
* @param boolean $isOutermost Whether ot not this item is outermost, affects list item class
* @param string $outermostItemClass Extra class of outermost list items
* @param string $childrenWrapClass If specified wraps children list in div with this class
* @param boolean $noEventAttributes Whether ot not to add on* attributes to list item
* @return string
*/
protected function _renderCategoryMenuItemHtml(
$category,
$level = 0,
$isLast = false,
$isFirst = false,
$isOutermost = false,
$outermostItemClass = '',
$childrenWrapClass = '',
$noEventAttributes = false
) {
if (!$category->getIsActive()) {
return '';
}

// get all children
if ($this->flatState->isAvailable()) {
$children = (array)$category->getChildrenNodes();
} else {
$children = $category->getChildren();
}

// select active children
$activeChildren = [];
foreach ($children as $child) {
if ($child->getIsActive()) {
$activeChildren[] = $child;
}
}

$activeChildrenCount = count($activeChildren);
$hasActiveChildren = $activeChildrenCount > 0;

// prepare list item html classes
$classes = [];
$classes[] = 'level' . $level;
$classes[] = 'nav-' . $this->_getItemPosition($level);
if ($this->isCategoryActive($category)) {
$classes[] = 'active';
}

$linkClass = '';
if ($isOutermost && $outermostItemClass) {
$classes[] = $outermostItemClass;
$linkClass = ' class="' . $outermostItemClass . '"';
}
if ($isFirst) {
$classes[] = 'first';
}
if ($isLast) {
$classes[] = 'last';
}
if ($hasActiveChildren) {
$classes[] = 'parent';
}

// prepare list item attributes
$attributes = [];
if (count($classes) > 0) {
$attributes['class'] = implode(' ', $classes);
}
if ($hasActiveChildren && !$noEventAttributes) {
$attributes['onmouseover'] = 'toggleMenu(this,1)';
$attributes['onmouseout'] = 'toggleMenu(this,0)';
}

// assemble list item with attributes
$htmlLi = '<li';
foreach ($attributes as $attrName => $attrValue) {
$htmlLi .= ' ' . $attrName . '="' . str_replace('"', '\"', $attrValue) . '"';
}
$htmlLi .= '>';

$html = [];
$html[] = $htmlLi;

$html[] = '<a href="' . $this->getCategoryUrl($category) . '"' . $linkClass . '>';
$html[] = '<span>' . $this->escapeHtml($category->getName()) . '</span>';
$html[] = '</a>';

// render children
$htmlChildren = '';
$j = 0;
foreach ($activeChildren as $child) {
$htmlChildren .= $this->_renderCategoryMenuItemHtml(
$child,
$level + 1,
$j == $activeChildrenCount - 1,
$j == 0,
false,
$outermostItemClass,
$childrenWrapClass,
$noEventAttributes
);
$j++;
}
if (!empty($htmlChildren)) {
if ($childrenWrapClass) {
$html[] = '<div class="' . $childrenWrapClass . '">';
}
$html[] = '<ul class="level' . $level . '">';
$html[] = $htmlChildren;
$html[] = '</ul>';
if ($childrenWrapClass) {
$html[] = '</div>';
}
}

$html[] = '</li>';

$html = implode("\n", $html);
return $html;
}

/**
* Enter description here...
*
Expand All @@ -394,107 +229,6 @@ public function getCurrentCategory()
return $this->_catalogLayer->getCurrentCategory();
}

/**
* Enter description here...
*
* @return string
*/
public function getCurrentCategoryPath()
{
if ($this->getCurrentCategory()) {
return explode(',', $this->getCurrentCategory()->getPathInStore());
}
return [];
}

/**
* Enter description here...
*
* @param Category $category
* @return string
*/
public function drawOpenCategoryItem($category)
{
$html = '';
if (!$category->getIsActive()) {
return $html;
}

$html .= '<li';

if ($this->isCategoryActive($category)) {
$html .= ' class="active"';
}

$html .= '>' . "\n";
$html .= '<a href="' . $this->getCategoryUrl(
$category
) . '">' . '<span>' . $this->escapeHtml(
$category->getName()
) . '</span></a>' . "\n";

if (in_array($category->getId(), $this->getCurrentCategoryPath())) {
$children = $category->getChildren();
$hasChildren = $children && $children->count();

if ($hasChildren) {
$htmlChildren = '';
foreach ($children as $child) {
$htmlChildren .= $this->drawOpenCategoryItem($child);
}

if (!empty($htmlChildren)) {
$html .= '<ul>' . "\n" . $htmlChildren . '</ul>';
}
}
}
$html .= '</li>' . "\n";

return $html;
}

/**
* Render categories menu in HTML
*
* @param int $level Level number for list item class to start from
* @param string $outermostItemClass Extra class of outermost list items
* @param string $childrenWrapClass If specified wraps children list in div with this class
* @return string
*/
public function renderCategoriesMenuHtml($level = 0, $outermostItemClass = '', $childrenWrapClass = '')
{
$activeCategories = [];
foreach ($this->getStoreCategories() as $child) {
if ($child->getIsActive()) {
$activeCategories[] = $child;
}
}
$activeCategoriesCount = count($activeCategories);
$hasActiveCategoriesCount = $activeCategoriesCount > 0;

if (!$hasActiveCategoriesCount) {
return '';
}

$html = '';
$j = 0;
foreach ($activeCategories as $category) {
$html .= $this->_renderCategoryMenuItemHtml(
$category,
$level,
$j == $activeCategoriesCount - 1,
$j == 0,
true,
$outermostItemClass,
$childrenWrapClass,
true
);
$j++;
}

return $html;
}

/**
* Return identifiers for produced content
*
Expand Down
29 changes: 23 additions & 6 deletions app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,23 @@

class Delete extends \Magento\Catalog\Controller\Adminhtml\Category
{
/** @var \Magento\Catalog\Api\CategoryRepositoryInterface */
protected $categoryRepository;

/**
* @param \Magento\Backend\App\Action\Context $context
* @param \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
* @param \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository
*/
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
\Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository
) {
parent::__construct($context, $resultRedirectFactory);
$this->categoryRepository = $categoryRepository;
}

/**
* Delete category action
*
Expand All @@ -18,14 +35,14 @@ public function execute()
$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);
$category = $this->categoryRepository->get($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->_auth->getAuthStorage()->setDeletedPath($category->getPath());
$this->categoryRepository->delete($category);
$this->messageManager->addSuccess(__('You deleted the category.'));
} catch (\Magento\Framework\Model\Exception $e) {
$this->messageManager->addError($e->getMessage());
Expand All @@ -35,6 +52,6 @@ public function execute()
return $resultRedirect->setPath('catalog/*/edit', ['_current' => true]);
}
}
return $resultRedirect->setPath('catalog/*/', ['_current' => true, 'id' => null]);
return $resultRedirect->setPath('catalog/*/', ['_current' => true, 'id' => $parentId]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public function execute()
. $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',
Expand Down
Loading

0 comments on commit 4ce64b6

Please sign in to comment.