2012-09-04 11:09:32 +00:00
< ? php
namespace GergelyPolonkai\FrontBundle\Controller ;
use Symfony\Bundle\FrameworkBundle\Controller\Controller ;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route ;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template ;
2012-10-06 11:25:43 +00:00
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter ;
2012-09-14 13:36:57 +00:00
use Doctrine\ORM\Tools\Pagination\Paginator ;
2012-09-04 11:09:32 +00:00
use GergelyPolonkai\FrontBundle\Entity\Post ;
2012-10-06 11:25:43 +00:00
use GergelyPolonkai\FrontBundle\Entity\Tag ;
2012-09-04 11:09:32 +00:00
/**
* Description of BlogController
*
* @ author polonkai . gergely
2012-09-14 12:43:59 +00:00
*
* @ Route ( " /blog " )
2012-09-04 11:09:32 +00:00
*/
class BlogController extends Controller
{
2012-10-06 11:25:43 +00:00
// TODO: Make this a config parameter
private $postsPerPage = 10 ;
2012-09-14 13:36:57 +00:00
/**
* @ Route ( " / " , name = " GergelyPolonkaiFrontBundle_blogListing " )
* @ Route ( " /page/ { cPage} " , name = " GergelyPolonkaiFrontBundle_blogListingPage " , requirements = { " cPage " : " \ d+ " })
* @ Template
*/
public function listAction ( $cPage = 1 )
{
-- $cPage ;
$query = $this
-> getDoctrine ()
-> getEntityManager ()
-> createQuery ( " SELECT p FROM GergelyPolonkaiFrontBundle:Post p WHERE p.draft = FALSE ORDER BY p.createdAt DESC " )
2012-10-06 11:25:43 +00:00
-> setFirstResult ( $cPage * $this -> postsPerPage )
-> setMaxResults ( $this -> postsPerPage );
2012-09-14 13:36:57 +00:00
$paginator = new Paginator ( $query , $fetchJoinCollection = true );
2012-09-16 21:32:07 +00:00
$tagManager = $this -> get ( 'fpn_tag.tag_manager' );
foreach ( $paginator as $post ) {
$tagManager -> loadTagging ( $post );
}
2012-09-14 13:36:57 +00:00
$count = $paginator -> count ();
2012-10-06 11:25:43 +00:00
$pageCount = ceil ( $count / $this -> postsPerPage );
2012-09-14 13:36:57 +00:00
return array (
'cpage' => $cPage ,
'count' => $pageCount ,
'posts' => $paginator ,
2012-10-06 11:25:43 +00:00
'perPage' => $this -> postsPerPage ,
2012-09-14 13:36:57 +00:00
);
}
2012-09-04 11:09:32 +00:00
/**
2012-09-16 20:12:05 +00:00
* @ Route ( " / { year}/ { month}/ { day}/ { slug}.html " , name = " GergelyPolonkaiFrontBundle_blogViewPost " )
2012-09-04 11:09:32 +00:00
* @ Template
*/
public function viewPostAction ( $year , $month , $day , $slug )
{
$date = new \DateTime ();
$date -> setDate ( $year , $month , $day );
$date -> setTime ( 0 , 0 , 0 );
$date2 = new \DateTime ();
$date2 -> setDate ( $year , $month , $day );
$date2 -> setTime ( 0 , 0 , 0 );
$date2 -> add ( new \DateInterval ( 'P1D' ));
$query = $this -> getDoctrine () -> getEntityManager () -> createQuery ( " SELECT p FROM GergelyPolonkaiFrontBundle:Post p WHERE p.slug = :slug AND p.createdAt BETWEEN :date1 AND :date2 " );
$query -> setParameter ( ':slug' , $slug );
$query -> setParameter ( ':date1' , $date );
$query -> setParameter ( ':date2' , $date2 );
$post = $query -> getOneOrNullResult ();
2012-09-16 21:32:07 +00:00
$this -> get ( 'fpn_tag.tag_manager' ) -> loadTagging ( $post );
2012-09-04 11:09:32 +00:00
return array (
'post' => $post ,
);
}
2012-09-16 20:12:26 +00:00
/**
* @ Route ( " /feed " , name = " GergelyPolonkaiFrontBundle_blogFeed " , defaults = { " _format " : " xml " })
* @ Template
*/
public function feedAction ()
{
$query = $this -> getDoctrine () -> getEntityManager () -> createQuery ( " SELECT p FROM GergelyPolonkaiFrontBundle:Post p WHERE p.draft = FALSE ORDER BY p.createdAt DESC " );
$query -> setMaxResults ( 10 );
$posts = $query -> getResult ();
return array (
'now' => new \DateTime ( 'now' ),
'posts' => $posts ,
);
}
2012-10-06 11:25:43 +00:00
/**
* @ Route ( " /tag/ { name}/ " , name = " GergelyPolonkaiFrontBundle_blogTagList " )
2012-10-06 13:43:56 +00:00
* @ Route ( " /tag/ { name}/page/ { cPage} " , name = " GergelyPolonkaiFrontBundle_blogTagListingPage " , requirements = { " cPage " : " \ d+ " })
2012-10-06 11:25:43 +00:00
* @ Template ( " GergelyPolonkaiFrontBundle:Blog:list.html.twig " )
* @ ParamConverter ( " tag " )
*/
public function tagListAction ( Tag $tag , $cPage = 1 )
{
$tagRepository = $this -> getDoctrine () -> getRepository ( 'GergelyPolonkaiFrontBundle:Tag' );
$ids = $tagRepository -> getResourceIdsForTag ( 'gergelypolonkaifront_post' , $tag -> getName ());
-- $cPage ;
$query = $this
-> getDoctrine ()
-> getEntityManager ()
-> createQuery ( " SELECT p FROM GergelyPolonkaiFrontBundle:Post p WHERE p.draft = FALSE AND p.id IN (:idList) ORDER BY p.createdAt DESC " )
-> setParameter ( 'idList' , $ids )
-> setFirstResult ( $cPage * $this -> postsPerPage )
-> setMaxResults ( $this -> postsPerPage );
$paginator = new Paginator ( $query , $fetchJoinCollection = true );
$tagManager = $this -> get ( 'fpn_tag.tag_manager' );
foreach ( $paginator as $post ) {
$tagManager -> loadTagging ( $post );
}
$count = $paginator -> count ();
$pageCount = ceil ( $count / $this -> postsPerPage );
return array (
'cpage' => $cPage ,
'count' => $pageCount ,
'posts' => $paginator ,
'perPage' => $this -> postsPerPage ,
);
}
2012-09-04 11:09:32 +00:00
}