* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\MainBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Chill\MainBundle\Search\UnknowSearchDomainException; use Chill\MainBundle\Search\UnknowSearchNameException; use Chill\MainBundle\Search\ParsingException; use Chill\MainBundle\Search\SearchInterface; /** * * * @author julien.fastre@champs-libres.coop * @author marc@champs-libres.coop */ class SearchController extends Controller { public function searchAction(Request $request) { $pattern = $request->query->get('q', ''); if ($pattern === ''){ return $this->render('ChillMainBundle:Search:error.html.twig', array( 'message' => $this->get('translator')->trans("Your search is empty. " . "Please provide search terms."), 'pattern' => $pattern )); } $name = $request->query->get('name', NULL); try { if ($name === NULL) { // no specific search selected. Rendering result in "preview" mode $results = $this->get('chill.main.search_provider') ->getSearchResults( $pattern, 0, 5, array(SearchInterface::SEARCH_PREVIEW => true) ); } else { // we want search on a specific search provider. Display full results. // create a paginator to get the startPage and stopPage /* @var $paginatorFactory \Chill\MainBundle\Pagination\PaginatorFactory */ $paginatorFactory = $this->get('chill_main.paginator_factory'); $results = [$this->get('chill.main.search_provider') ->getResultByName( $pattern, $name, $paginatorFactory->getCurrentPageFirstItemNumber(), $paginatorFactory->getCurrentItemPerPage(), array(SearchInterface::SEARCH_PREVIEW => false) )]; } } catch (UnknowSearchDomainException $ex) { return $this->render('ChillMainBundle:Search:error.html.twig', array( "message" => $this->get('translator')->trans("The domain %domain% " . "is unknow. Please check your search.", array('%domain%' => $ex->getDomain())), 'pattern' => $pattern )); } catch (UnknowSearchNameException $ex) { throw $this->createNotFoundException("The name ".$ex->getName()." is not found"); } catch (ParsingException $ex) { return $this->render('ChillMainBundle:Search:error.html.twig', array( "message" => $this->get('translator')->trans('Invalid terms'). ": ".$this->get('translator')->trans($ex->getMessage()), 'pattern' => $pattern )); } return $this->render('ChillMainBundle:Search:list.html.twig', array('results' => $results, 'pattern' => $pattern) ); } }