public function creerSujetAction(Request $request, $pole, $slug, $upgrade) { $repository = $this->getDoctrine()->getManager()->getRepository('TerAelisForumBundle:Categorie'); $categorie = $repository->findOneBy(array('slug' => $slug)); if (empty($categorie)) { throw $this->createNotFoundException('Categorie inexistante (catégorie = ' . $slug . ')'); } // On cherche les droits de la personne $permService = $this->container->get('ter_aelis_forum.permission'); $user = $this->getUser(); $perm = $permService->getPerm($user); if ($perm['creerSujet'][$categorie->getId()] == 0) { throw new AccessDeniedException("Vous n'avez pas les privilèges suffisants pour poster dans cette catégorie."); } // Création du post $post = new Post(); // On ajoute l'article dans la catégorie if ($user != null) { $post->addAuthor($user); } $date = new \DateTime(); $post->setDatePublication($date); $post->setMainCategorie($categorie); $post->addCategory($categorie); $post->setPublie(true); // On ajoute les formulaires a remplir $types = []; $i = 0; $session = $request->getSession(); foreach ($categorie->getFormulaire() as $formulaire) { $donnee = new FormulaireDonnees(); $donnee->setPost($post); $donnee->setType($formulaire); if ($upgrade == 1 && $session->has('body')) { $donnee->setContenu($session->get('body')); $session->remove('body'); } else { $donnee->setContenu($formulaire->getDefault()); } $types[$i] = $formulaire; $i++; $post->addFormulaireDonnee($donnee); } // On crée le formulaire $form = $this->createForm(new PostType(), $post); $categoriePost = $categorie; $categories = array($categorie); // Path de la catégorie $path = $this->getDoctrine()->getManager()->getRepository('TerAelisForumBundle:Categorie')->getPath($categorie); $returnArray = array(); // 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 { $em = $this->get('doctrine.orm.entity_manager'); $date = new \DateTime(); if ($post->getDatePublication() < $date) { $post->setDatePublication($date); } $post->setEstPremierPost(true); $post->setEstVerrouille(false); $post->setLastComment($post->getDatePublication()); $post->setCreatedAt(new \DateTime()); $lastPost = $em->getRepository('TerAelisForumBundle:Post')->findLastByUser($user->getId()); $lastPostMaxTime = new \DateTime(); $lastPostMaxTime->modify('-10 seconds'); if (!empty($lastPost) && $lastPost->getCreatedAt()->getTimestamp() > $lastPostMaxTime->getTimestamp()) { $returnArray['notAllowed'] = 'Votre dernier sujet a été créé il y a trop peu de temps. Vérifiez qu\'il n\'a pas déjà été créé avant de continuer'; } else { $em->beginTransaction(); // Sondage $sondage = $post->getSondage(); if (!empty($sondage)) { $sondage->setChoixMultiples(false); $question = $sondage->getQuestion(); if ($question == "" || $sondage->getChoix()->isEmpty()) { $post->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 = $post->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); $post->setTagsNull(); foreach ($tags as $index => $t) { $post->addTag($t); unset($tagArray[$t->getSlug()]); } /* On crée les nouveaux tags */ if (count($tagArray) > 0) { foreach ($tagArray as $tag) { $post->addTag($tag); } } } // Commentaires $thread = new Thread(); $thread->setPost($post); $thread->setLastComment($date); $em->persist($thread); $em->flush(); $post->setLastComment($date, true); $post->setLastAuthor($user); // On l'ajoute dans la BDD $em->persist($post); $em->flush(); // On prévient les users $nonVuService = $this->container->get('ter_aelis_forum.non_vu'); $nonVuService->updateNonVu($post); // Update des infos des categories $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é créé avec succès'); $page = intval(1 + $thread->getNumberComment() / $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' => $post->getSlug(), 'page' => $page))); } } } } // Il n'y a pas encore eu de requête, on affiche le formulaire $returnArray = array_merge($returnArray, array('pole' => $pole, 'pole_aff' => $pole, 'categories' => $categories, 'viewBalise' => $post->getMainCategorie()->hasBalise(), 'creerSpecial' => (int) $perm['creerSpecial'][$post->getMainCategorie()->getId()], 'moderer' => $perm['moderer'][$categoriePost->getId()], 'creerSondage' => $perm['creerSondage'][$categoriePost->getId()], 'form' => $form->createView(), 'type' => $types, 'path' => $path)); return $this->render('TerAelisForumBundle:Forum:creerSujet.html.twig', $returnArray); }