public function indexAction(Request $request)
{
$userService = $this->get('user');
$blogService = $this->get('blog');
$user = $userService->getCurrentUser();
if (!$user->hasPermission('ModerateComment')) {
throw new AccessDeniedException();
}
$em = $this->container->get('em');
$translator = $this->container->get('translator');
$imageService = $this->container->get('image');
$paginator = $this->get('knp_paginator');
$commentService = $this->container->get('comment');
$statusMap = Comment::$status_enum;
$queryBuilder = $em->getRepository('Newscoop\\Entity\\Comment')->createQueryBuilder('c');
$queryBuilder->select('c', 'cm.name')->leftJoin('c.commenter', 'cm')->where($queryBuilder->expr()->isNotNull('c.thread'))->andWhere('c.status != :deleted')->setParameter('deleted', array_search('deleted', $statusMap))->orderBy('c.time_created', 'desc');
$session = $request->getSession();
$pageNumber = $this->get('request')->query->get('knp_page', 1);
$displayPerPage = 20;
$filters = new ParameterBag();
$filterForm = $this->container->get('form.factory')->create(new CommentsFilterType(), array(), array());
$searchForm = $this->container->get('form.factory')->create(new CommentSearchType(), array(), array());
$or = $queryBuilder->expr()->orX();
$and = $queryBuilder->expr()->andX();
if ($request->get('_route') === "newscoop_newscoop_comments_search") {
$searchForm->handleRequest($request);
if ($request->isMethod('POST')) {
if ($searchForm->isValid()) {
$data = $searchForm->getData();
$commentsQueryBuilder = $commentService->searchByPhrase($data['search']);
$countQueryBuilder = clone $commentsQueryBuilder;
$countQueryBuilder->select('COUNT(c)');
$count = $countQueryBuilder->getQuery()->getSingleScalarResult();
$comments = $commentsQueryBuilder->getQuery();
$comments->setHint('knp_paginator.count', $count);
$pagination = $paginator->paginate($comments, $pageNumber, $displayPerPage, array('distinct' => false));
$pagination->setTemplate('NewscoopNewscoopBundle:Pagination:pagination_bootstrap3.html.twig');
return array('pagination' => $pagination, 'commentsArray' => $this->createCommentsArray($pagination, $imageService), 'filterForm' => $filterForm->createView(), 'searchForm' => $searchForm->createView());
}
}
}
$filterForm->handleRequest($request);
if ($filterForm->isValid()) {
$data = $filterForm->getData();
$pageNumber = 1;
// if more than one filter applied
if (count(array_filter($data)) > 1) {
if ($data['recommended'] && $data['unrecommended']) {
$queryBuilder->andWhere($queryBuilder->expr()->orX($queryBuilder->expr()->eq('c.recommended', 1), $queryBuilder->expr()->eq('c.recommended', 0)));
$filters->set('filterRecommended', $data['recommended']);
$filters->set('filterUnrecommended', $data['unrecommended']);
} else {
if ($data['recommended']) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 1));
$filters->set('filterRecommended', $data['recommended']);
}
if ($data['unrecommended']) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 0));
$filters->set('filterUnrecommended', $data['unrecommended']);
}
}
unset($data['recommended']);
unset($data['unrecommended']);
$queryBuilder->andWhere($this->buildFilterQuery($data, $or, $filters, $queryBuilder));
} else {
if ($data['recommended'] && $data['unrecommended']) {
$queryBuilder->andWhere($queryBuilder->expr()->orX($queryBuilder->expr()->eq('c.recommended', 1), $queryBuilder->expr()->eq('c.recommended', 0)));
$filters->set('filterRecommended', $data['recommended']);
$filters->set('filterUnrecommended', $data['unrecommended']);
} else {
if ($data['recommended']) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 1));
$filters->set('filterRecommended', $data['recommended']);
}
if ($data['unrecommended']) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 0));
$filters->set('filterUnrecommended', $data['unrecommended']);
}
}
unset($data['recommended']);
unset($data['unrecommended']);
$queryBuilder->andWhere($this->buildFilterQuery($data, $and, $filters, $queryBuilder));
}
$session->set('commentsFilters', $filters);
} else {
if ($session->get('commentsFilters')) {
// if more than one filter applied
if ($session->get('commentsFilters')->count() > 1) {
if ($session->get('commentsFilters')->get('filterRecommended') && $session->get('commentsFilters')->get('filterUnrecommended')) {
$queryBuilder->andWhere($queryBuilder->expr()->orX($queryBuilder->expr()->eq('c.recommended', 1), $queryBuilder->expr()->eq('c.recommended', 0)));
} else {
if ($session->get('commentsFilters')->get('filterRecommended')) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 1));
}
if ($session->get('commentsFilters')->get('filterUnrecommended')) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 0));
}
}
$queryBuilder->andWhere($this->buildSessionFilters($session->get('commentsFilters'), $or, $queryBuilder));
} else {
if ($session->get('commentsFilters')->get('filterRecommended') && $session->get('commentsFilters')->get('filterUnrecommended')) {
$queryBuilder->andWhere($queryBuilder->expr()->orX($queryBuilder->expr()->eq('c.recommended', 1), $queryBuilder->expr()->eq('c.recommended', 0)));
} else {
if ($session->get('commentsFilters')->get('filterRecommended')) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 1));
}
if ($session->get('commentsFilters')->get('filterUnrecommended')) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('c.recommended', 0));
}
}
$queryBuilder->andWhere($this->buildSessionFilters($session->get('commentsFilters'), $and, $queryBuilder));
}
}
}
if (!$session->get('commentsFilters', null)) {
$session->set('commentsFilters', $filters);
}
$comments = $queryBuilder->getQuery();
$pagination = $paginator->paginate($comments, $pageNumber, $displayPerPage);
$pagination->setTemplate('NewscoopNewscoopBundle:Pagination:pagination_bootstrap3.html.twig');
return array('pagination' => $pagination, 'commentsArray' => $this->createCommentsArray($pagination, $imageService), 'filterForm' => $filterForm->createView(), 'searchForm' => $searchForm->createView());
}