/**
  * 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));
 }
Пример #2
0
 public function fetchTreeAsArray()
 {
     return $this->nestedSetManager->fetchTreeAsArray();
 }
Пример #3
0
 /**
  * Выводит меню публикаций
  *
  * @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();
     }
 }