/** * Search for articles. * * Parameter 'query' contains keywords seperated with ",". Example: test,article,keyword3 * * @ApiDoc( * statusCodes={ * 200="Returned when successful", * 404={ * "Returned when the articles are not found" * } * }, * parameters={ * {"name"="query", "dataType"="string", "required"=true, "description"="article serach query"}, * {"name"="publication", "dataType"="string", "required"=false, "description"="Filter by publication"}, * {"name"="issue", "dataType"="string", "required"=false, "description"="Filter by issue"}, * {"name"="section", "dataType"="string", "required"=false, "description"="Filter by section"}, * {"name"="language", "dataType"="string", "required"=false, "description"="Filter by language"}, * {"name"="article_type", "dataType"="string", "required"=false, "description"="Filter by article type"}, * {"name"="publish_date", "dataType"="string", "required"=false, "description"="Filter by publish date"}, * {"name"="published_after", "dataType"="string", "required"=false, "description"="Filter by published after date"}, * {"name"="published_before", "dataType"="string", "required"=false, "description"="Filter by published before date"}, * {"name"="author", "dataType"="integer", "required"=false, "description"="Filter by author"}, * {"name"="creator", "dataType"="integer", "required"=false, "description"="Filter by creator"}, * {"name"="status", "dataType"="string", "required"=false, "description"="Filter by status"}, * {"name"="topic", "dataType"="integer", "required"=false, "description"="Filter by topic"} * } * ) * * @Route("/search/articles.{_format}", defaults={"_format"="json"}, options={"expose"=true}) * * @Method("GET") * @View(serializerGroups={"list"}) * * @return array */ public function searchArticlesAction(Request $request) { $articleSearch = $this->container->get('search.article'); $publication = $this->get('newscoop.publication_service')->getPublication(); $onlyPublished = true; try { $user = $this->container->get('user')->getCurrentUser(); if ($user && $user->isAdmin()) { $onlyPublished = false; } } catch (AuthenticationException $e) { /* User is not logged in */ } $articleSearchCriteria = new ArticleSearchCriteria(); $articleSearchCriteria->fillFromRequest($request); $articles = $articleSearch->searchArticles($articleSearchCriteria, $onlyPublished); $paginator = $this->get('newscoop.paginator.paginator_service'); $articles = $paginator->paginate($articles, array('distinct' => false)); return $articles; }