Exemple #1
0
 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);
 }
Exemple #2
0
 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);
 }