/** * 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)); }
/** * * @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(); } }