/** * @param Blog $blog * @param bool $executeQuery * @param int|null $max * * @return array|\Doctrine\ORM\AbstractQuery */ public function findByBlog(Blog $blog, $executeQuery = true, $max = null) { $query = $this->getEntityManager()->createQuery(' SELECT t, COUNT(t.id) AS frequency, COUNT(p.id) as countPosts FROM IcapBlogBundle:Tag t JOIN t.posts p WHERE p.blog = :blogId AND p.status = :postStatus AND p.publicationDate IS NOT NULL GROUP BY t.id ORDER BY frequency DESC ')->setParameter('blogId', $blog->getId())->setParameter('postStatus', Statusable::STATUS_PUBLISHED); if ($max != null) { $query->setMaxResults($max); } return $executeQuery ? $query->getResult() : $query; }
/** * @Route("/rss/{blogId}", name="icap_blog_rss", requirements={"blogId" = "\d+"}) * @ParamConverter("blog", class="IcapBlogBundle:Blog", options={"id" = "blogId"}) */ public function rssAction(Blog $blog) { $baseUrl = $this->get('request')->getSchemeAndHttpHost(); $feed = ['title' => $blog->getResourceNode()->getName(), 'description' => $blog->getInfos(), 'siteUrl' => $baseUrl . $this->generateUrl('icap_blog_view', ['blogId' => $blog->getId()]), 'feedUrl' => $baseUrl . $this->generateUrl('icap_blog_rss', ['blogId' => $blog->getId()]), 'lang' => $this->get('claroline.config.platform_config_handler')->getParameter('locale_language')]; /** @var \Icap\BlogBundle\Entity\Post[] $posts */ $posts = $this->getDoctrine()->getRepository('IcapBlogBundle:Post')->findRssDatas($blog); $items = []; foreach ($posts as $post) { $items[] = ['title' => $post->getTitle(), 'url' => $baseUrl . $this->generateUrl('icap_blog_post_view', ['blogId' => $blog->getId(), 'postSlug' => $post->getSlug()]), 'date' => $post->getPublicationDate()->format('d/m/Y h:i:s'), 'intro' => $post->getContent(), 'author' => $post->getAuthor()->getFirstName() - $post->getAuthor()->getLastName()]; } return new Response($this->renderView('IcapBlogBundle:Blog:rss.html.twig', ['feed' => $feed, 'items' => $items]), 200, ['Content-Type' => 'application/rss+xml', 'charset' => 'utf-8']); }
private function persistCommentUpdate(Request $request, Blog $blog, Post $post, Comment $comment, User $user, array $messages) { $form = $this->createForm($this->get('icap_blog.form.comment'), $comment); if ($request->isXMLHttpRequest()) { return $this->render('IcapBlogBundle:Comment:inlineEdit.html.twig', array('_resource' => $blog, 'post' => $post, 'comment' => $comment, 'workspace' => $blog->getResourceNode()->getWorkspace(), 'form' => $form->createView())); } else { if ("POST" === $request->getMethod()) { $form->handleRequest($request); if ($form->isValid()) { $flashBag = $this->get('session')->getFlashBag(); $entityManager = $this->getDoctrine()->getManager(); try { $unitOfWork = $entityManager->getUnitOfWork(); $unitOfWork->computeChangeSets(); $changeSet = $unitOfWork->getEntityChangeSet($comment); $entityManager->persist($comment); $entityManager->flush(); $this->dispatchCommentUpdateEvent($post, $comment, $changeSet); $flashBag->add('success', $messages['success']); } catch (\Exception $exception) { $flashBag->add('error', $messages['error']); } return $this->redirect($this->generateUrl('icap_blog_post_view', array('blogId' => $blog->getId(), 'postSlug' => $post->getSlug()))); } } } return array('_resource' => $blog, 'bannerForm' => $this->getBannerForm($blog->getOptions()), 'user' => $user, 'post' => $post, 'comment' => $comment, 'form' => $form->createView()); }
/** * @param Blog $value * * @return int|string */ public function transform($value) { return $value instanceof Blog ? $value->getId() : null; }
/** * @param Blog $blog * @param bool $executeQuery * * @return Post[]|\Doctrine\ORM\AbstractQuery */ public function findRssDatas(Blog $blog, $executeQuery = true) { $query = $this->createQueryBuilder('post')->select(array('post'))->andWhere('post.blog = :blogId')->andWhere('post.status = :postStatus')->andWhere('post.publicationDate IS NOT NULL')->setParameter('blogId', $blog->getId())->setParameter('postStatus', Statusable::STATUS_PUBLISHED)->getQuery(); return $executeQuery ? $query->getResult() : $query; }