public function editerSujetAction($pole, $id) { $returnArray = []; $em = $this->get('doctrine.orm.entity_manager'); $repository = $em->getRepository('TerAelisForumBundle:Post'); $sujet = $repository->findOneBy(array('id' => $id)); if (empty($sujet)) { throw $this->createNotFoundException('Sujet/réponse inexistant (id = ' . $id . ')'); } $categorie = $sujet->getMainCategorie(); // On cherche les droits de la personne $permService = $this->container->get('ter_aelis_forum.permission'); $user = $this->getUser(); $perm = $permService->getPerm($user); if (!$permService->hasRight('moderer', $categorie->getId(), $perm)) { if (!$permService->hasRight('editerMessage', $categorie->getId(), $perm) || !$sujet->isAuthor($user)) { throw new AccessDeniedException("Vous n'avez pas les privilèges suffisants pour éditer les sujets dans cette catégorie."); } } // On ajoute les formulaires a remplir // On récupère les formulaires originaux $formulairesOriginaux = []; foreach ($sujet->getFormulaireDonnees() as $formulaire) { $type = $formulaire->getType(); $formulairesOriginaux[] = $type->getId(); } // On mets les formulaires nouveaux $types = []; $i = 0; foreach ($categorie->getFormulaire() as $formulaire) { if (!in_array($formulaire->getId(), $formulairesOriginaux)) { $donnee = new FormulaireDonnees(); $donnee->setPost($sujet); $donnee->setType($formulaire); $donnee->setContenu($formulaire->getDefault()); $sujet->addFormulaireDonnee($donnee); } $types[$i] = $formulaire; $i++; } // Création du formulaire $datePublication = $sujet->getDatePublication(); $now = new \DateTime(); $wasPublished = $datePublication <= $now; $hasDatePublication = !$wasPublished; $form = $this->createForm(new PostType(), $sujet, array('has_date_publication' => $hasDatePublication)); // Le sujet est déjà envoyé $request = $this->getRequest(); if ($request->getMethod() == 'POST') { // On récupère les informations $form->submit($request); // Gestion de la validation du formulaire if ($form->isValid()) { if ($form->get('previsualiser')->isClicked()) { $returnArray['previsualiser'] = $form->getData(); } else { if (!$wasPublished && $sujet->getDatePublication() < $now) { $sujet->setDatePublication($now); } $sujet->setDateEdition($now); $em->beginTransaction(); // On s'occupe du sondage $sondage = $sujet->getSondage(); $question = $sondage->getQuestion(); if ($question == "" || $sondage->getChoix()->isEmpty()) { $sujet->setSondage(null); } else { $em->persist($sondage); $em->flush(); foreach ($sondage->getChoix() as $choix) { $choix->setSondage($sondage); $em->persist($choix); $em->flush(); } } // Tags $tagArray = array(); $tagSlugs = array(); $tags = $sujet->getTags(); // On lie les tags à ceux qui existent déjà if (!empty($tags)) { foreach ($tags as $t) { $tagArray[$t->getSlug()] = $t; $tagSlugs[] = $t->getSlug(); } } if (!empty($tagArray)) { $tags = $em->getRepository('TerAelisForumBundle:Tag')->findBySlugs($tagSlugs); $sujet->setTagsNull(); foreach ($tags as $index => $t) { $sujet->addTag($t); unset($tagArray[$t->getSlug()]); } /* On crée les nouveaux tags */ if (count($tagArray) > 0) { foreach ($tagArray as $tag) { $sujet->addTag($tag); } } } // On l'ajoute dans la BDD $em->persist($sujet); $em->flush(); // Update stats des catégories $categorie = $sujet->getMainCategorie(); $this->get('ter_aelis_forum.post_statistics')->refreshCategories(array($categorie)); // On informe le user que c'est bon $this->get('session')->getFlashBag()->add('info', 'Le sujet a été modifié avec succès'); $page = intval(1 + ($sujet->getThreads()->first()->getNumberComment() - 1) / $this->container->getParameter('nb_commentaires')); $em->commit(); // Puis on redirige vers la page de visualisation de cet article return $this->redirect($this->generateUrl('taforum_voirSujet', array('pole' => $pole, 'slug' => $sujet->getSlug(), 'page' => $page))); } } } // Path de la catégorie $path = $this->getDoctrine()->getManager()->getRepository('TerAelisForumBundle:Categorie')->getPath($categorie); // Il n'y a pas encore eu de requête, on affiche le formulaire $returnArray = array_merge($returnArray, array('pole' => $pole, 'form' => $form->createView(), 'viewBalise' => $categorie->hasBalise(), 'creerSpecial' => (int) $perm['creerSpecial'][$categorie->getId()], 'creerSondage' => (int) $perm['creerSondage'][$categorie->getId()], 'moderer' => (int) $perm['moderer'][$categorie->getId()], 'type' => $types, 'path' => $path)); return $this->render('TerAelisForumBundle:Forum:creerSujet.html.twig', $returnArray); }
public function deplacerSujetAction($pole, $id, $type = self::VISIBLE) { $em = $this->get('doctrine.orm.entity_manager'); $repository = $em->getRepository('TerAelisForumBundle:Post'); $post = $repository->findOneById($id); if (empty($post)) { throw $this->createNotFoundException('Sujet inexistant (id = ' . $id . ')'); } // On récupère la catégorie principale du sujet $categorie = $post->getMainCategorie(); // On cherche les droits de la personne $permService = $this->container->get('ter_aelis_forum.permission'); $user = $this->getUser(); $perm = $permService->getPerm($user); $categorieId = $categorie->getId(); if (!$permService->hasRight('moderer', $categorieId, $perm)) { if ($type === self::VISIBLE) { throw new AccessDeniedException("Vous n'avez pas les privilèges suffisants pour déplacer les sujets dans cette catégorie."); } else { if ($permService->hasRight('supprimerMessage', $categorieId, $perm)) { return $this->redirect($this->generateUrl('taforum_delete_sujet', array('pole' => $pole, 'id' => $id))); } else { throw new AccessDeniedException("Vous n'avez pas les privilèges suffisants pour déplacer les sujets dans cette catégorie."); } } } $form = $this->createFormBuilder($post)->add('mainCategorie', 'entity', array('class' => 'TerAelisForumBundle:Categorie', 'query_builder' => function (CategorieRepository $cr) use($type) { return $cr->findByType($type); }, 'property' => 'title', 'multiple' => false, 'required' => true))->getForm(); $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { $em->beginTransaction(); // On l'enlève de la catégorie $post->removeCategory($categorie); $mainCategorie = $post->getMainCategorie(); $post->addCategory($mainCategorie); // Récupération du contenu $arrayFormulaireDonnees = []; $body = ""; foreach ($post->getFormulaireDonnees() as $fd) { $arrayFormulaireDonnees[] = $fd; $body .= $fd->getContenu(); } // Création du nouveau contenu foreach ($mainCategorie->getFormulaire() as $ft) { $fd = new FormulaireDonnees(); $fd->setPost($post); $fd->setType($ft); $fd->setContenu($body); $body = ""; $post->addFormulaireDonnee($fd); } // Suppression des anciens formulaires foreach ($arrayFormulaireDonnees as $fd) { $post->removeFormulaireDonnee($fd); $em->remove($fd); } $em->flush(); // On met a jour le post $em->persist($post); $em->flush(); // On s'assure de la bonne vision des derniers messages et des stats $postStatsService = $this->container->get('ter_aelis_forum.post_statistics'); $postStatsService->refreshCategories(array($categorie, $mainCategorie)); $em->commit(); return $this->redirect($this->generateUrl('taforum_voirSujet', array('pole' => $pole, 'slug' => $post->getSlug()))); } } $renderArray = array('pole' => $pole, 'form' => $form->createView()); if ($type === self::CORBEILLE) { $renderArray['title'] = 'Archiver un sujet'; $link = $this->generateUrl('taforum_delete_sujet', array('pole' => $pole, 'id' => $id)); $renderArray['description'] = 'En archivant un sujet, il n\'est plus accessible au public, mais est conservé en base de données.<br/><a href="' . $link . '">Pour supprimer définitivement cliquez ici.</a>'; $renderArray['button'] = "Archiver"; } else { $renderArray['title'] = 'Déplacer un sujet'; $renderArray['button'] = "Déplacer"; } return $this->render('TerAelisForumBundle:Moderer:deplacer.html.twig', $renderArray); }