public function getThreadAction($pole, Categorie $categorie, $slug, Post $post, Thread $thread, $nonVu = null, $moderer = false, User $user = null, $perm = null, $page = 1, $answer = 0) { if ($perm == null) { $permService = $this->container->get('ter_aelis_forum.permission'); $perm = $permService->getPerm($user); } $voirCategorie = $perm['voirCategorie'][$categorie->getId()]; $voirSujet = $perm['voirSujet'][$categorie->getId()]; $repondreSujet = $perm['repondreSujet'][$categorie->getId()]; if ($voirCategorie == 0 || $voirSujet == 0) { throw new AccessDeniedException("Interdiction de voir ce sujet (idCategorie = " . $categorie->getId() . ")"); } list($pole_aff, $pole) = $this->getPoleAffichage($pole, $categorie->getRoot()); $nbCommentPerPage = $this->container->getParameter('comment.nb_comment'); $returnArray = array('user' => $user, 'answer' => $answer, 'slug' => $slug, 'thread' => $thread, 'repondreSujet' => $repondreSujet, 'pole' => $pole, 'pole_aff' => $pole_aff, 'nbCommentPerPage' => $nbCommentPerPage, 'moderer' => $moderer, 'sujet' => $post, 'page' => $page, 'nonVu' => $nonVu); $em = $this->getDoctrine()->getManager(); $comments = null; if ($thread->getNumberComment() > 0) { $editerMessage = $perm['editerMessage'][$categorie->getId()]; $supprimerMessage = $perm['supprimerMessage'][$categorie->getId()]; $moderer = $perm['moderer'][$categorie->getId()]; $repositoryComments = $em->getRepository('TerAelisCommentBundle:Comment'); $comments = $repositoryComments->findByThread($thread, $nbCommentPerPage, $page, $answer); // Variables transmises au twig $returnArray['comments'] = $comments; $returnArray['editerMessage'] = $editerMessage; $returnArray['supprimerMessage'] = $supprimerMessage; $returnArray['postLastComment'] = $post->getLastComment(); $returnArray['moderer'] = $moderer; } // Update des non lus if ($user != null) { $lastCommentShown = null; if ($comments != null) { foreach ($comments as $c) { $lastCommentShown = $c; } } $nonVuService = $this->container->get('ter_aelis_forum.non_vu'); $nonVuService->deleteNonVu($user, $post, $lastCommentShown); } return $this->render('TerAelisCommentBundle:Thread:view.html.twig', $returnArray); }
protected function getQuotedUsersPost(Post $post) { $contents = $post->getFormulaireDonnees(); $arrayUserId = []; foreach ($contents as $c) { preg_match_all('#\\[quote="([0-9]+)"\\].*[/quote]#', $c->getContenu(), $matches); if (isset($matches['1'])) { foreach ($matches['1'] as $q) { $arrayUserId[] = $q; } } } return $arrayUserId; }
public function shortText(Post $post) { $content = $post->getFormulaireDonnees(); $res = ""; foreach ($content as $f) { $res = $res . $f->getContenu(); if (strlen($res) >= 150) { break; } } return strlen($res) > 150 ? mb_substr($res, 0, 150) . "..." : $res; }
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); }
/** * @param Post|null $lastViewPost */ public function setLastViewPost($lastViewPost) { if ($this->lastPost === null || $lastViewPost !== null && $this->lastPost->getLastComment() < $lastViewPost->getLastComment()) { $this->lastViewPost = $lastViewPost; } return $this; }
public function findUserPost(User $user, Post $post) { return $this->createQueryBuilder('nv')->join('nv.post', 'p')->join('nv.user', 'u')->leftJoin('nv.comment', 'c')->where('p.id = ' . $post->getId())->andWhere('u.id = ' . $user->getId())->andWhere('p.publie = 1')->addSelect('c')->getQuery()->getResult(); }