/** * Update quick flags for a category * * @param \XLite\Model\Category $entity Category * @param array $flags Flags to set * * @return void */ protected function updateQuickFlags(\XLite\Model\Category $entity, array $flags) { $quickFlags = $entity->getQuickFlags(); if (!isset($quickFlags)) { $quickFlags = new \XLite\Model\Category\QuickFlags(); $quickFlags->setCategory($entity); $entity->setQuickFlags($quickFlags); } foreach ($flags as $name => $delta) { $name = \Includes\Utils\Converter::convertToPascalCase($name); $quickFlags->{'set' . $name}($quickFlags->{'get' . $name}() + $delta); } }
/** * Correct categories structure: lpos, rpos and depth fields * * @return void */ public function correctCategoriesStructure() { $all = $this->defineFindAllSortedQueryBuilder()->getResult(); if (!empty($all)) { $allCategories = array(); $byKey = array(); foreach ($all as $category) { $byKey[intval($category->getParentId())][] = array('category_id' => $category->getCategoryId(), 'parent_id' => $category->getParentId(), 'lpos' => 0, 'rpos' => 0, 'depth' => 0, 'pos' => $category->getPos(), 'enabled' => $category->getEnabled(), 'subcats' => 0, 'subcats_enabled' => 0, 'total_subcats' => 0); } ksort($byKey); foreach ($byKey as $children) { foreach ($children as $c) { $allCategories[] = $c; } } unset($byKey); $allCategories[0]['lpos'] = 1; $allCategories[0]['rpos'] = 2; $allCategories[0]['depth'] = -1; $this->correctCategoryData($allCategories); $categories = array(); foreach ($allCategories as $c) { $categories[$c['category_id']] = $c; } foreach ($all as $category) { $catId = $category->getCategoryId(); $data = array('lpos' => $categories[$catId]['lpos'], 'rpos' => $categories[$catId]['rpos'], 'depth' => $categories[$catId]['depth']); $this->update($category, $data); $qf = $category->getQuickFlags(); if (!$qf) { $qf = new \XLite\Model\Category\QuickFlags(); $qf->setCategory($category); $category->setQuickFlags($qf); } $qf->setSubcategoriesCountAll($categories[$catId]['subcats']); $qf->setSubcategoriesCountEnabled($categories[$catId]['subcats_enabled']); } } }
public function testHasSubcategories() { $c = new \XLite\Model\Category(); $c->map($this->categoryData); $this->assertFalse($c->hasSubcategories(), 'check childs #1'); $child = new \XLite\Model\Category(); $c->addChildren($child); $child->setParent($c); $this->assertFalse($c->hasSubcategories(), 'check childs #2'); $qf = new \XLite\Model\Category\QuickFlags(); $qf->setCategory($c); $c->setQuickFlags($qf); $this->assertEquals($qf, $c->getQuickFlags(), 'test quick flags'); $qf->setSubcategoriesCountEnabled(1); $qf->setSubcategoriesCountAll(2); $this->assertTrue($c->hasSubcategories(), 'check childs #3'); }