Tri approprié des briques
authorEric Mc Sween <eric.mcsween@gmail.com>
Wed, 1 Dec 2010 18:44:11 +0000 (13:44 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Thu, 2 Dec 2010 20:37:42 +0000 (15:37 -0500)
Toutes les briques sont maintenant triées comme sur l'accueil.

Les chercheurs peuvent en plus être triés par nom, établissement ou pays.

On garde tout de même un tri par pertinence lorsqu'on fait une recherche par
mots-clés dans les ressources et les sites.

Demande #722.

12 files changed:
auf_savoirs_en_partage/chercheurs/views.py
auf_savoirs_en_partage/savoirs/forms.py
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/savoirs/templatetags/sep.py
auf_savoirs_en_partage/savoirs/tests.py
auf_savoirs_en_partage/savoirs/views.py
auf_savoirs_en_partage/settings.py
auf_savoirs_en_partage/sitotheque/forms.py
auf_savoirs_en_partage/sql/2010-11-26.sql
auf_savoirs_en_partage/templates/chercheurs/index.html
auf_savoirs_en_partage/templates/sites/index.html
auf_savoirs_en_partage/templates/sort_link.html [new file with mode: 0644]

index bed9e20..766c0eb 100644 (file)
@@ -119,7 +119,24 @@ def chercheur_login(request):
 def index(request):
     """Répertoire des chercheurs"""
     search_form = RepertoireSearchForm(request.GET)
-    chercheurs = search_form.get_query_set()
+    chercheurs = search_form.get_query_set().select_related('personne', 'etablissement', 'etablissement__pays', 'etablissement_autre_pays')
+    sort = request.GET.get('tri')
+    if sort is not None and sort.endswith('_desc'):
+        sort = sort[:-5]
+        direction = '-'
+    else:
+        direction = ''
+    if sort == 'nom':
+        chercheurs = chercheurs.order_by(direction + 'personne__nom', 'personne__prenom', '-date_modification')
+    elif sort == 'etablissement':
+        chercheurs = chercheurs.extra(select=dict(nom_etablissement='IFNULL(ref_etablissement.nom, chercheurs_chercheur.etablissement_autre_nom)'),
+                                      order_by=[direction + 'nom_etablissement', '-date_modification'])
+    elif sort == 'pays':
+        chercheurs = chercheurs.extra(select=dict(pays_etablissement='IFNULL(ref_pays.nom, T5.nom)'),
+                                      order_by=[direction + 'pays_etablissement', '-date_modification'])
+    else:
+        chercheurs = chercheurs.order_by('-date_modification')
+
     nb_chercheurs = chercheurs.count()
     return render_to_response("chercheurs/index.html",
                               dict(chercheurs=chercheurs, nb_chercheurs=nb_chercheurs, search_form=search_form),
index 6620a1d..fa17b29 100644 (file)
@@ -66,6 +66,11 @@ class RecordSearchForm(forms.Form):
             region = self.cleaned_data['region']
             if region:
                 records = records.filter_region(region)
+            if not q:
+                """Montrer les résultats les plus récents si on n'a pas fait
+                   une recherche par mots-clés."""
+                records = records.order_by('-id')
+
         return records
 
     def get_search_regexp(self):
index 48fa66f..2725bbe 100644 (file)
@@ -133,7 +133,7 @@ class Actualite(models.Model):
 
     class Meta:
         db_table = u'actualite'
-        ordering = ["-date",]
+        ordering = ["-date"]
 
     def __unicode__ (self):
         return "%s" % (self.titre)
index 90830f3..13cfee2 100644 (file)
@@ -18,6 +18,25 @@ def sep_menu(context, discipline_active, region_active):
                 discipline_active=discipline_active, region_active=region_active,
                 request=context['request'])
 
+@register.inclusion_tag('sort_link.html', takes_context=True)
+def sort_link(context, field, label):
+    request = context['request']
+    params = request.GET.copy()
+    current_sort = params.get('tri')
+    if current_sort == field:
+        sort = field + '_desc'
+        indicator = u' (croissant)'
+    else:
+        sort = field
+        if current_sort == field + '_desc':
+            indicator = u' (décroissant)'
+        else:
+            indicator = ''
+
+    params['tri'] = sort
+    url = request.path + '?' + params.urlencode()
+    return dict(label=label, url=url, indicator=indicator)
+    
 class URLNode(template.Node):
     def __init__(self, view_name, args, kwargs, asvar):
         self.view_name = view_name
index 6b6dccc..9b15955 100644 (file)
@@ -41,6 +41,12 @@ class PageLoadTest(TestCase):
 
     def test_chercheurs(self):
         self.check_status_200('/chercheurs/')
+        self.check_status_200('/chercheurs/', dict(tri='nom'))
+        self.check_status_200('/chercheurs/', dict(tri='nom_desc'))
+        self.check_status_200('/chercheurs/', dict(tri='etablissement'))
+        self.check_status_200('/chercheurs/', dict(tri='etablissement_desc'))
+        self.check_status_200('/chercheurs/', dict(tri='pays'))
+        self.check_status_200('/chercheurs/', dict(tri='pays_desc'))
 
     def test_sites(self):
         self.check_status_200('/sites/')
index 2aa1f8f..0a7ddb4 100644 (file)
@@ -67,9 +67,9 @@ def recherche(request, discipline=None, region=None):
         return HttpResponseRedirect(reverse('savoirs.views.index', kwargs=kwargs))
 
     ressources = Record.objects.validated().filter_discipline(discipline).filter_region(region).search(query)
-    actualites = Actualite.objects.filter(visible=1).filter_discipline(discipline).filter_region(region).search(query)
-    evenements = Evenement.objects.filter(approuve=1).filter_discipline(discipline).filter_region(region).search(query)
-    chercheurs = Chercheur.objects.filter_discipline(discipline).filter_region(region).search(query)
+    actualites = Actualite.objects.filter(visible=1).filter_discipline(discipline).filter_region(region).search(query).order_by('-date')
+    evenements = Evenement.objects.filter(approuve=1).filter_discipline(discipline).filter_region(region).search(query).order_by('-debut')
+    chercheurs = Chercheur.objects.filter_discipline(discipline).filter_region(region).search(query).order_by('-date_modification')
     sites = Site.objects.filter_discipline(discipline).filter_region(region).search(query)
     try:
         sites_auf = google_search(0, query)['results']
index 2390bf8..0acd4e1 100644 (file)
@@ -41,7 +41,6 @@ MIDDLEWARE_CLASSES = (
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'djangoflash.middleware.FlashMiddleware',
     'pagination.middleware.PaginationMiddleware',
-    'django_sorting.middleware.SortingMiddleware',
     'django.middleware.doc.XViewMiddleware',
 )
 
@@ -58,7 +57,6 @@ INSTALLED_APPS = (
     'django.contrib.sessions',
     'django.contrib.admin',
     'pagination',
-    'django_sorting',
     'compressor',
     'django_roa',
     'savoirs',
index 5317049..44c6d34 100644 (file)
@@ -28,6 +28,9 @@ class SiteSearchForm(forms.Form):
             pays = self.cleaned_data["pays"]
             if pays:
                 sites = sites.filter(pays=pays.pk)
+
+            if not q:
+                sites = sites.order_by('-date_maj')
         return sites
 
     def get_search_regexp(self):
index ae0b80e..d29f617 100644 (file)
@@ -50,3 +50,11 @@ ALTER TABLE chercheurs_chercheur
 ALTER TABLE chercheurs_personne
     DROP KEY courriel,
     ADD KEY courriel (courriel);
+
+-- Certains chercheurs ont un nom qui commence par un espace
+
+UPDATE chercheurs_personne SET nom = TRIM(nom), prenom = TRIM(prenom);
+UPDATE chercheurs_chercheur SET etablissement_autre_nom = TRIM(etablissement_autre_nom);
+UPDATE chercheurs_chercheur SET diplome = '' WHERE diplome = '.';
+UPDATE chercheurs_chercheur SET etablissement_autre_nom = '' WHERE etablissement_autre_nom = '.';
+UPDATE chercheurs_chercheur SET theme_recherche = '' WHERE theme_recherche = '.';
index 22bdfc2..c8586ae 100644 (file)
@@ -1,6 +1,7 @@
 {% extends "container_base.html" %}
 {% load pagination_tags %}
 {% load form_tags %}
+{% load sep %}
 
 {% block contenu %}
 {% autopaginate chercheurs 20 %}
 <div class="centre">{% paginate %}</div>
 <table id="repertoire">
     <tr>
-        <th>Nom</th>
-        <th>Établissement</th>
-        <th>Localisation</th>
+        <th>{% sort_link "nom" "Nom" %}</th>
+        <th>{% sort_link "etablissement" "Établissement" %}</th>
+        <th>{% sort_link "pays" "Pays" %}</th>
     </tr>
     {% for chercheur in chercheurs %}
     <tr class="{% cycle 'odd' 'notodd' %}">
         <td><a href="{% url chercheurs.views.retrieve id=chercheur.id %}">{{ chercheur }}</a></td>
-        <td>{% firstof chercheur.etablissement chercheur.etablissement_autre_nom %}</td>
-        <td>{% firstof chercheur.etablissement.pays chercheur.etablissement_autre_pays %}</td>
+        <td>{% firstof chercheur.etablissement.nom chercheur.etablissement_autre_nom %}</td>
+        <td>{% firstof chercheur.etablissement.pays.nom chercheur.etablissement_autre_pays.nom %}</td>
     </tr>
     {% endfor %}
 </table>
index 4697ced..5d2a4e0 100644 (file)
@@ -1,6 +1,5 @@
 {% extends "container_base.html" %}
 {% load pagination_tags %}
-{% load sorting_tags %}
 
 {% block contenu %}
 {% autopaginate sites 10 %}
diff --git a/auf_savoirs_en_partage/templates/sort_link.html b/auf_savoirs_en_partage/templates/sort_link.html
new file mode 100644 (file)
index 0000000..a353ded
--- /dev/null
@@ -0,0 +1,2 @@
+<a href="{{ url }}">{{ label }}</a>{{ indicator }}
+