コード例 #1
0
ファイル: ThreadController.php プロジェクト: teraelis/forum
 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);
 }
コード例 #2
0
ファイル: NonVuService.php プロジェクト: teraelis/forum
 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;
 }
コード例 #3
0
ファイル: PostExtension.php プロジェクト: teraelis/forum
 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;
 }
コード例 #4
0
ファイル: PostController.php プロジェクト: teraelis/forum
 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);
 }
コード例 #5
0
ファイル: Categorie.php プロジェクト: teraelis/forum
 /**
  * @param Post|null $lastViewPost
  */
 public function setLastViewPost($lastViewPost)
 {
     if ($this->lastPost === null || $lastViewPost !== null && $this->lastPost->getLastComment() < $lastViewPost->getLastComment()) {
         $this->lastViewPost = $lastViewPost;
     }
     return $this;
 }
コード例 #6
0
ファイル: NonVuRepository.php プロジェクト: teraelis/forum
 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();
 }