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>
Wed, 1 Dec 2010 19:05:30 +0000 (14:05 -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 8d445d4..365caad 100644 (file)
@@ -65,6 +65,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.all()
 
 class ActualiteSearchForm(forms.Form):
index e76e31f..b62c7d2 100644 (file)
@@ -179,7 +179,7 @@ class Actualite(models.Model):
 
     class Meta:
         db_table = u'actualite'
-        ordering = ["-date",]
+        ordering = ["-date"]
 
     def __unicode__ (self):
         return "%s" % (self.titre)
index 8d173ac..5aca3be 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 a726283..150c763 100644 (file)
@@ -85,10 +85,10 @@ def recherche(request, discipline=None, region=None):
             kwargs['region'] = region
         return HttpResponseRedirect(reverse('savoirs.views.index', kwargs=kwargs))
 
-    actualites = Actualite.objects.search(query)
-    evenements = Evenement.objects.search(query)
+    actualites = Actualite.objects.search(query).order_by('-date')
+    evenements = Evenement.objects.search(query).order_by('-debut')
     ressources = Record.objects.search(query)
-    chercheurs = Chercheur.objects.search(query)
+    chercheurs = Chercheur.objects.search(query).order_by('-date_modification')
     sites = Site.objects.search(query)
     if discipline:
         discipline = Discipline.objects.get(pk=discipline)
index 9be4021..493d5a0 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 d7aac37..acb3a92 100644 (file)
@@ -28,4 +28,8 @@ class SiteSearchForm(forms.Form):
             pays = self.cleaned_data["pays"]
             if pays:
                 sites = sites.filter_pays(pays=pays)
+
+            if not q:
+                sites = sites.order_by('-date_maj')
+
         return sites.all()
index 6b4dd57..fc02d81 100644 (file)
@@ -53,3 +53,10 @@ 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..cd86929
--- /dev/null
@@ -0,0 +1 @@
+<a href="{{ url }}">{{ label }}</a>{{ indicator }}