/** * Retourne une vue de l'ensemble des Noeuds enregistrés * (destiné à être appelé par un render) * @Template() */ public function showAction($_locale) { /* Initialisation des repositories et du Manager */ $em = $this->getDoctrine()->getEntityManager(); $config = new Config($em, 'RNCMenuBundle:Item'); $nsm = new Manager($config); /* Configuration du manager */ $rep = $em->getRepository('RNCMenuBundle:Item'); $qb = $rep->getTreeQB(); $nsm->getConfiguration()->setBaseQueryBuilder($qb); /* Récupération des arbres */ $roots = $rep->findAllRoots(); $trees = array(); foreach ($roots as $root) { $trees[$root->getId()] = $nsm->fetchTreeAsArray($root->getId()); } return $this->render('RNCMenuBundle:Menu:show.html.twig', array('trees' => $trees, '_locale' => $_locale)); }
public function fetchTreeAsArray() { return $this->nestedSetManager->fetchTreeAsArray(); }
/** * Выводит меню публикаций * * @Route("/categories-menu/{feedType}/{selectedCategory}/{specialtyId}/{groupId}/{userId}", name = "categories_menu", defaults = {"feedType" = "main-feed", "specialtyId" = 0, "groupId" = 0, "userId" = 0}) */ public function categoriesMenuAction($selectedCategory = 'all', $specialtyId, $groupId, $feedType, $userId) { $em = $this->getDoctrine()->getManager(); $config = new Config($em, 'Evrika\\MainBundle\\Entity\\Category'); $nsManager = new Manager($config); $categories = $nsManager->fetchTreeAsArray(1); // @todo переделать в нормальный switch. Вместо unset лучше сразу выбирать только то что нам нужно (но при этом важно чтобы они были отсортированы (потомки должны идти сразу вслед за своими родителями)) if ($feedType != 'user_feed') { if ($groupId != 0) { // group feed foreach ($categories as $key => $category) { if (!$category->getNode()->isInGroupFeed()) { unset($categories[$key]); } } } else { // main feed foreach ($categories as $key => $category) { if (!$category->getNode()->isInMainFeed()) { unset($categories[$key]); } } } } else { // user feed foreach ($categories as $key => $category) { if (!$category->getNode()->isInUserFeed()) { unset($categories[$key]); } } } if (!($this->get('security.context')->isGranted('ROLE_DOCTOR') || $this->get('security.context')->isGranted('ROLE_STUDENT'))) { // exclude non public foreach ($categories as $key => $category) { if (!$category->getNode()->isPublic()) { unset($categories[$key]); } } } // Если выбран подпункт, подсвечиваем всё равно родительскую категорию foreach ($categories as $key => $category) { if ($category->getId() == $selectedCategory) { if ($categories[$key]->getLevel() > 1) { $selectedCategory = $categories[$key]->getParent()->getNode()->getId(); } } } return $this->render('EvrikaMainBundle::publications_menu.html.twig', array('categories' => $categories, 'feedType' => $feedType, 'selectedCategory' => $selectedCategory, 'specialtyId' => $specialtyId, 'groupId' => $groupId, 'userId' => $userId)); }
/** * * @Route("/move", name="rnc_admin_menu_move", requirements={"_method"="POST"}) * @Template() * @Secure(roles="ROLE_ADMIN") */ public function moveAction() { $request = $this->get('request'); if ($request->isXmlHttpRequest()) { $cur = $request->request->get('cur'); $prev = $request->request->get('prev'); $next = $request->request->get('next'); $em = $this->getDoctrine()->getEntityManager(); $config = new Config($em, 'RNCMenuBundle:Item'); $nsm = new Manager($config); $rep = $em->getRepository('RNCMenuBundle:Item'); $cur_node = $rep->find($cur); $prev_node = $rep->find($prev); $next_node = $rep->find($next); if ($cur_node == null) { throw new NotFoundHttpException("Elément introuvable"); } $node = $nsm->wrapNode($cur_node); if ($prev_node != null) { $wrp = $nsm->wrapNode($prev_node); if ($node->isRoot()) { $new_pos = $prev_node->getPosition(); $old_pos = $cur_node->getPosition(); if ($old_pos < $new_pos) { $rep->moveItemDown($old_pos, $new_pos); $cur_node->setPosition($new_pos); } else { $rep->moveItemUp($old_pos, $new_pos + 1); $cur_node->setPosition($new_pos + 1); } $em->persist($cur_node); } else { $node->moveAsNextSiblingOf($wrp); } } else { if ($next_node != null) { $wrp = $nsm->wrapNode($next_node); if ($node->isRoot()) { $new_pos = 1; $old_pos = $cur_node->getPosition(); $rep->moveItemUp($old_pos, $new_pos); $cur_node->setPosition($new_pos); $em->persist($cur_node); } else { $node->moveAsPrevSiblingOf($wrp); } } } $em->flush(); $qb = $rep->getTreeQB(); $nsm->getConfiguration()->setBaseQueryBuilder($qb); $roots = $rep->findAllRoots(); $trees = array(); foreach ($roots as $root) { $trees[$root->getId()] = $nsm->fetchTreeAsArray($root->getId()); } return $this->render('RNCMenuBundle:Menu:show.html.twig', array('trees' => $trees)); } else { return $this->indexAction(); } }