/**
* 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;
}