diff --git a/Resources/config/routing.yml b/Resources/config/routing.yml
index 9459c2061..b51211203 100644
--- a/Resources/config/routing.yml
+++ b/Resources/config/routing.yml
@@ -37,7 +37,7 @@ chill_person_create:
defaults: {_controller: ChillPersonBundle:Person:create }
chill_person_search:
- pattern: /{_locale}/search
+ pattern: /{_locale}/person/search
defaults: { _controller: ChillPersonBundle:Person:search }
options:
menus:
diff --git a/Resources/config/services.yml b/Resources/config/services.yml
index 7130fde11..d52e89cc2 100644
--- a/Resources/config/services.yml
+++ b/Resources/config/services.yml
@@ -14,3 +14,12 @@ services:
- "@request"
tags:
- { name: form.type, alias: closing_motive }
+
+ chill.person.search_person:
+ class: Chill\PersonBundle\Search\PersonSearch
+ arguments:
+ - "@doctrine.orm.entity_manager"
+ calls:
+ - ['setContainer', ["@service_container"]]
+ tags:
+ - { name: chill.search, alias: 'person_search' }
diff --git a/Resources/translations/messages.fr.yml b/Resources/translations/messages.fr.yml
index 1f11493d4..c101b8e85 100644
--- a/Resources/translations/messages.fr.yml
+++ b/Resources/translations/messages.fr.yml
@@ -67,12 +67,15 @@
'Person Menu': "Menu personne"
#Person Controller
-'Your query is empty. Be more explicive': Votre requête est vide. Veuillez introduire un terme de recherche
-'Your query %q% gives no results': La requête %q% ne renvoie aucun résultat.
'The person data are not valid': Les données de votre formulaire sont invalides.
'%nb% person with similar name. Please verify that this is a new person': %nb% personnes ont un nom similaire. Vérifiez qu'il ne s'agit pas de l'une d'elles.
'The person has been created': Le dossier a été créé
+#search
+'Person search results': Recherche de personnes
+'No persons matching search %pattern%': Aucune personne ne correpond à votre recherche "%pattern%".
+'%total% persons matching the search %pattern%': %total% personnes correspondent aux termes de recherche "%pattern%".
+
#History
'Last opening since %last_opening%': Dernière ouverture le %last_opening%.
'Close person history': Clotûrer
diff --git a/Resources/views/Person/list.html.twig b/Resources/views/Person/list.html.twig
index bb59fd69c..c464111ae 100644
--- a/Resources/views/Person/list.html.twig
+++ b/Resources/views/Person/list.html.twig
@@ -14,10 +14,12 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
#}
-{% extends "ChillMainBundle::layout.html.twig" %}
-{% block title %}Recherche {{ pattern }}{% endblock %}
-
-{% block content %}
+
{{ 'Person search results'|trans }}
+{% if persons|length == 0 %}
+{{ 'No persons matching search %pattern%'|trans({'%pattern%' : pattern}) }}
+{% else %}
+{{ '%total% persons matching the search %pattern%'|trans({'%pattern%': pattern, '%total%' : total}) }}
+
@@ -53,4 +55,4 @@
{% endfor %}
-{% endblock %}
\ No newline at end of file
+{% endif %}
diff --git a/Search/PersonSearch.php b/Search/PersonSearch.php
new file mode 100644
index 000000000..812fea242
--- /dev/null
+++ b/Search/PersonSearch.php
@@ -0,0 +1,111 @@
+
+ *
+ * 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\PersonBundle\Search;
+
+use Chill\MainBundle\Search\AbstractSearch;
+use Doctrine\Common\Persistence\ObjectManager;
+use Chill\PersonBundle\Entity\Person;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\ContainerAware;
+use Symfony\Component\DependencyInjection\ContainerAwareTrait;
+
+class PersonSearch extends AbstractSearch
+{
+ use ContainerAwareTrait;
+
+ /**
+ *
+ * @var ObjectManager
+ */
+ private $om;
+
+
+ public function __construct(ObjectManager $om)
+ {
+ $this->om = $om;
+ }
+
+ /*
+ * (non-PHPdoc)
+ * @see \Chill\MainBundle\Search\SearchInterface::getLabel()
+ */
+ public function getLabel()
+ {
+ return 'person_default';
+ }
+
+ /*
+ * (non-PHPdoc)
+ * @see \Chill\MainBundle\Search\SearchInterface::getOrder()
+ */
+ public function getOrder()
+ {
+ return 100;
+ }
+
+ /*
+ * (non-PHPdoc)
+ * @see \Chill\MainBundle\Search\SearchInterface::isActiveByDefault()
+ */
+ public function isActiveByDefault()
+ {
+ return true;
+ }
+
+ /*
+ * (non-PHPdoc)
+ * @see \Chill\MainBundle\Search\SearchInterface::renderResult()
+ */
+ public function renderResult($pattern, $start = 0, $limit = 50, array $options = array())
+ {
+
+ $persons = $this->search($pattern, $start, $limit, $options);
+
+ return $this->container->get('templating')->render('ChillPersonBundle:Person:list.html.twig',
+ array(
+ 'persons' => $persons,
+ 'pattern' => trim($pattern),
+ 'total' => count($persons)
+ ));
+ }
+
+ /**
+ *
+ * @param string $pattern
+ * @param int $start
+ * @param int $limit
+ * @param array $options
+ * @return Person[]
+ */
+ protected function search($pattern, $start, $limit, array $options = array())
+ {
+ $dql = 'SELECT p FROM ChillPersonBundle:Person p'
+ . ' WHERE'
+ . ' LOWER(p.firstName) like LOWER(:q)'
+ . ' OR LOWER(p.lastName) like LOWER(:q)';
+
+ $query = $this->om->createQuery($dql)
+ ->setParameter('q', '%'.trim($pattern).'%')
+ ->setFirstResult($start)
+ ->setMaxResults($limit);
+
+ return $query->getResult() ;
+ }
+}
\ No newline at end of file