Ajout des chercheurs à la recherche transversale.
authorEric Mc Sween <eric.mcsween@gmail.com>
Thu, 28 Oct 2010 18:04:07 +0000 (14:04 -0400)
committerEric Mc Sween <eric.mcsween@gmail.com>
Thu, 28 Oct 2010 18:04:07 +0000 (14:04 -0400)
auf_savoirs_en_partage/chercheurs/models.py
auf_savoirs_en_partage/chercheurs/views.py
auf_savoirs_en_partage/savoirs/views.py
auf_savoirs_en_partage/templates/savoirs/recherche.html

index 35d17a4..21462f8 100644 (file)
@@ -1,5 +1,6 @@
 # -*- encoding: utf-8 -*-
 from django.db import models
+from django.db.models import Q
 from datamaster_modeles.models import *
 from auf_references_modeles.models import Thematique
 from savoirs.models import Discipline
@@ -32,6 +33,26 @@ class Personne(models.Model):
 class Utilisateur(Personne):
     password = models.CharField(max_length=35, verbose_name = 'Mot de passe')
 
+class ChercheurManager(models.Manager):
+
+    def get_query_set(self):
+        return ChercheurQuerySet(self.model)
+
+    def search(self, text):
+        return self.get_query_set().search(text)
+
+class ChercheurQuerySet(models.query.QuerySet):
+
+    def search(self, text):
+        qs = self
+        for word in text.split():
+            qs = qs.filter(Q(personne__nom__icontains=word) |
+                           Q(personne__prenom__icontains=word) |
+                           Q(expertise__icontains=word) |
+                           Q(etablissement_autre_nom__icontains=word) |
+                           Q(etablissement__nom__icontains=word))    
+        return qs
+
 FONCTION_CHOICES = (('Professeur', 'Professeur'), ('Chercheur', 'Chercheur'), ('Chercheur_independant', 'Chercheur indépendant'), ('Doctorant', 'Doctorant'))
 class Chercheur(models.Model):
     id = models.AutoField(primary_key=True, db_column='id')
@@ -79,6 +100,9 @@ class Chercheur(models.Model):
     date_creation = models.DateField(auto_now_add=True, db_column='date_creation')
     date_modification = models.DateField(auto_now=True, db_column='date_modification')
     
+    # Manager
+    objects = ChercheurManager()
+
     def __unicode__(self):
         return u"%s %s" % (self.personne.nom.upper(), self.personne.prenom.title())
         
index bd6a0c5..eabf713 100644 (file)
@@ -144,11 +144,7 @@ def chercheur_queryset (request):
             list = list.filter(groupes=domaine)
         mots_cles = simpleForm.cleaned_data["mots_cles"]
         if mots_cles:
-            list = list.filter( Q(personne__nom__search=mots_cles) 
-                                | Q(personne__prenom__search=mots_cles) 
-                                | Q(expertise__search=mots_cles) 
-                                | Q(etablissement_autre_nom__search=mots_cles) 
-                                | Q(etablissement__nom__search=mots_cles) )    
+            list = list.search(mots_cles)
     return list
     
 def index(request):
index 01b5b00..48cd265 100644 (file)
@@ -50,16 +50,18 @@ def nous_contacter (request):
             context_instance = RequestContext(request))
 
 # recherche
-def recherche (request):
+def recherche(request):
     query = request.GET.get("q", "")
     ressources = Record.objects.validated().search(query)
     actualites = Actualite.objects.filter(visible=1).search(query)
     evenements = Evenement.objects.filter(approuve=1).search(query)
+    chercheurs = Chercheur.objects.search(query)
     search_regexp = build_search_regexp(query)
     return render_to_response(
         "savoirs/recherche.html",
         dict(q=query, ressources=ressources[:5], actualites=actualites[:5],
              evenements=evenements[:5], total_evenements=len(evenements),
+             chercheurs=chercheurs[:10], total_chercheurs=len(chercheurs),
              total_ressources=len(ressources), total_actualites=len(actualites),
              search_regexp=search_regexp),
         context_instance = RequestContext(request)
index 33d1ca7..4b3587b 100644 (file)
 
 </script>
 
-{% if ressources %}
-<h4>Ressources correspondant à « {{ q }} » ({{ ressources|length }} sur {{ total_ressources }}):</h4>
 <div class="zone-texte">
+  {% if ressources %}
+  <h4>Ressources correspondant à « {{ q }} » ({{ ressources|length }} sur {{ total_ressources }}):</h4>
   {% for ressource in ressources %}
   {% include "savoirs/ressource_resultat.html" %} 
   {% endfor %}
   {% ifnotequal ressources|length total_ressources %}
   <p><a href="{% url savoirs.views.ressource_index %}?q={{ q|urlencode }}">Toutes les {{ total_ressources }} ressources correspondant à « {{ q }} »</a></p>
   {% endifnotequal %}
-</div>
-{% endif %}
+  {% endif %}
 
-{% if actualites %}
-<h4>Actualités correspondant à « {{ q }} » ({{ actualites|length }} sur {{ total_actualites }}):</h4>
-<div class="zone-texte">
+  {% if actualites %}
+  <h4>Actualités correspondant à « {{ q }} » ({{ actualites|length }} sur {{ total_actualites }}):</h4>
   {% for actualite in actualites %}
   {% include "savoirs/actualite_resultat.html" %} 
   {% endfor %}
   {% ifnotequal actualites|length total_actualites %}
   <p><a href="{% url savoirs.views.actualite_index %}?q={{ q|urlencode }}">Toutes les {{ total_ressources }} actualités correspondant à « {{ q }} »</a></p>
   {% endifnotequal %}
-</div>
-{% endif %}
+  {% endif %}
 
-{% if evenements %}
-<h4>Événements correspondant à « {{ q }} » ({{ evenements|length }} sur {{ total_evenements }}):</h4>
-<div class="zone-texte">
+  {% if evenements %}
+  <h4>Événements correspondant à « {{ q }} » ({{ evenements|length }} sur {{ total_evenements }}):</h4>
   {% for evenement in evenements %}
   {% include "savoirs/evenement_resultat.html" %}
   {% endfor %}
   {% ifnotequal evenements|length total_evenements %}
   <p><a href="{% url savoirs.views.evenement_index %}?q={{ q|urlencode }}">Tous les {{ total_evenements }} événements correspondant à « {{ q }} »</a></p>
   {% endifnotequal %}
-</div>
-{% endif %}
+  {% endif %}
 
-{% if not ressources and not actualites and not evenements %}
-<h4>Aucune ressource ne correspond à « {{ q }} »</h4>
-<div class="zone-texte">
+  {% if chercheurs %}
+  <h4>Chercheurs correspondant à « {{ q }} » ({{ chercheurs|length }} sur {{ total_chercheurs }}):</h4>
+  <ul>
+    {% for chercheur in chercheurs %}
+    <li><a href="{% url chercheurs.views.retrieve chercheur.id %}">{{ chercheur.personne.prenom }} {{ chercheur.personne.nom }}</a></li>
+    {% endfor %}
+  </ul>
+  {% endif %}
+  
+  {% if not ressources and not actualites and not evenements and not chercheurs %}
+  <h4>Aucune ressource ne correspond à « {{ q }} »</h4>
   <p><a href="{% url savoirs.views.index %}">Retour à la page d'accueil</a></p>
+  {% endif %}
 </div>
-{% endif %}
 
 {% if user.is_authenticated %}
 {% include "savoirs/editor.html" %}