class ChercheurQuerySet(models.query.QuerySet):
def search(self, text):
- qs = self
+ q = None
for word in text.split():
- qs = qs.filter(Q(personne__nom__icontains=word) |
- Q(personne__prenom__icontains=word) |
- Q(theme_recherche__icontains=word) |
- Q(etablissement_autre_nom__icontains=word) |
- Q(etablissement__nom__icontains=word) |
- Q(etablissement__pays__nom__icontains=word) |
- Q(discipline__nom__icontains=word) |
- Q(publication1__titre__icontains=word) |
- Q(publication2__titre__icontains=word) |
- Q(publication3__titre__icontains=word) |
- Q(publication4__titre__icontains=word) |
- Q(these__titre__icontains=word)).distinct()
- return qs
+ part = (Q(personne__nom__icontains=word) |
+ Q(personne__prenom__icontains=word) |
+ Q(theme_recherche__icontains=word) |
+ Q(etablissement_autre_nom__icontains=word) |
+ Q(etablissement__nom__icontains=word) |
+ Q(etablissement__pays__nom__icontains=word) |
+ Q(discipline__nom__icontains=word) |
+ Q(publication1__titre__icontains=word) |
+ Q(publication2__titre__icontains=word) |
+ Q(publication3__titre__icontains=word) |
+ Q(publication4__titre__icontains=word) |
+ Q(these__titre__icontains=word))
+ if q is None:
+ q = part
+ else:
+ q = q & part
+ return self.filter(q).distinct() if q is not None else self
STATUT_CHOICES = (('enseignant', 'Enseignant-chercheur dans un établissement'), ('etudiant', 'Étudiant-chercheur doctorant'), ('independant', 'Chercheur indépendant docteur'))
class Chercheur(models.Model):
# Formulaires de recherche
-class RechercheAvancee (forms.Form):
- creator = forms.CharField (max_length=60, required=False, \
- label = "Auteur ou contributeur") # + contributor
- title = forms.CharField (max_length=100, required=False, \
- label = "Titre") # + alt_title
- description = forms.CharField (max_length=100, required=False, \
- label = "Description ou résumé") # + abstract
- subject = forms.CharField (max_length=100, required=False, label = "Sujet")
- operator = forms.ChoiceField (choices = (('or', 'ou'), ('and', 'et')), label = "Operateur")
- type = forms.CharField (initial='avancee', required=False, widget=forms.HiddenInput)
-
class RecordSearchForm(forms.Form):
"""Formulaire de recherche pour les ressources."""
from utils import smart_str
from savoirs.globals import configuration
-def google_search (page, q, data):
+def google_search (page, q):
+ data = {'results': [], 'last_page': 0, 'more_link': ''}
params = {'q': q,
'rsz': 'large',
'v': '1.0',
'title': r['title']} )
data['more_link'] = response['responseData']['cursor']['moreResultsUrl']
-
+ return data
def sep_build_content (regexp, description):
maxlen = 200
engin = configuration['engin_recherche']
if engin == 'google':
- google_search (page, q, rc)
+ rc = google_search (page, q)
elif engin == 'sep':
sep_search (page, {'q': q}, rc)
def search(self, text):
qs = self
- words = text.split()
- for word in words:
- qs = qs.filter(Q(titre__icontains=word) |
- Q(mots_cles__icontains=word) |
- Q(discipline__nom__icontains=word) |
- Q(discipline_secondaire__nom__icontains=word) |
- Q(type__icontains=word) |
- Q(lieu__icontains=word) |
- Q(description__icontains=word) |
- Q(contact__icontains=word))
- return qs
+ q = None
+ for word in text.split():
+ part = (Q(titre__icontains=word) |
+ Q(mots_cles__icontains=word) |
+ Q(discipline__nom__icontains=word) |
+ Q(discipline_secondaire__nom__icontains=word) |
+ Q(type__icontains=word) |
+ Q(lieu__icontains=word) |
+ Q(description__icontains=word) |
+ Q(contact__icontains=word))
+ if q is None:
+ q = part
+ else:
+ q = q & part
+ return qs.filter(q) if q is not None else qs
def search_titre(self, text):
qs = self
# Ne garder que les ressources qui contiennent tous les mots
# demandés.
+ q = None
for word in words:
- qs = qs.filter(Q(title__icontains=word) | Q(description__icontains=word) |
- Q(creator__icontains=word) | Q(contributor__icontains=word) |
- Q(subject__icontains=word) | Q(disciplines__nom__icontains=word) |
- Q(regions__nom__icontains=word) | Q(pays__nom__icontains=word) |
- Q(pays__region__nom__icontains=word)).distinct()
+ part = (Q(title__icontains=word) | Q(description__icontains=word) |
+ Q(creator__icontains=word) | Q(contributor__icontains=word) |
+ Q(subject__icontains=word) | Q(disciplines__nom__icontains=word) |
+ Q(regions__nom__icontains=word) | Q(pays__nom__icontains=word))
+ if q is None:
+ q = part
+ else:
+ q = q & part
+ if q is not None:
+ qs = qs.filter(q).distinct()
# On donne un point pour chaque mot présent dans le titre.
- score_expr = ' + '.join(['(title LIKE %s)'] * len(words))
- score_params = ['%' + word + '%' for word in words]
- return qs.extra(
- select={'score': score_expr},
- select_params=score_params
- ).order_by('-score')
+ if words:
+ score_expr = ' + '.join(['(title LIKE %s)'] * len(words))
+ score_params = ['%' + word + '%' for word in words]
+ qs = qs.extra(
+ select={'score': score_expr},
+ select_params=score_params
+ ).order_by('-score')
+
+ return qs
def search_auteur(self, text):
qs = self
# -*- encoding: utf-8 -*-
import datetime, simplejson, copy, vobject
-from django.shortcuts import render_to_response, get_object_or_404
+from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.template import Context, RequestContext
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django import forms
from django.conf import settings
-from lib.recherche import cherche, google_search, build_search_regexp
+from lib.recherche import google_search, build_search_regexp
from lib import sep
from lib.calendrier import evenements, evenement_info, combine
from savoirs.globals import configuration
# recherche
def recherche(request):
query = request.GET.get("q", "")
+ if not query.strip():
+ return redirect('/')
ressources = Record.objects.validated().search(query)
actualites = Actualite.objects.filter(visible=1).search(query)
evenements = Evenement.objects.filter(approuve=1).search(query)
context_instance = RequestContext(request)
)
-def avancee (request):
- type = request.GET.get("type", "")
- page = int(request.GET.get("page", 0))
-
- r = {'results': [], 'last_page': 0, 'more_link': ''}
-
- q = request.GET.get("google-q", "")
- f = RechercheAvancee ()
-
- if type == 'google':
- r = cherche (page, q, type)
- q = {'q': q}
- elif type == 'avancee':
- f = RechercheAvancee (request.GET)
- if f.is_valid():
- q = {}
- for k in ['creator', 'title', 'description', 'subject']:
- tmp = f.cleaned_data[k].strip()
- if len (tmp) > 0:
- q[k] = tmp
- q['operator'] = '|'
- if f.cleaned_data['operator'] == 'and':
- q['operator'] = "&"
-
- r = cherche (page, q, type)
-
- return render_to_response ("savoirs/avancee.html", \
- Context ({'type': type,
- 'page': page,
- 'data': r,
- 'search_regexp': None, # pour pouvoir utiliser la même template de résultat
- 'form': f,
- 'q': q}),
- context_instance = RequestContext(request))
-
-def conseils (request):
- return render_to_response ("savoirs/conseils.html", \
- Context (), \
- context_instance = RequestContext(request))
+def sites_auf(request):
+ q = request.GET.get('q')
+ page = int(request.GET.get('page', 0))
+ try:
+ data = google_search(page, q) if q else None
+ except:
+ data = None
+ return render_to_response('savoirs/sites_auf.html',
+ dict(google_q=q, data=data, page=page),
+ context_instance=RequestContext(request))
# ressources
def ressource_index(request):
def search(self, text):
qs = self
+ q = None
for word in text.split():
- qs = qs.filter(Q(titre__icontains=word) |
- Q(description__icontains=word) |
- Q(editeur__icontains=word) |
- Q(auteur__icontains=word) |
- Q(mots_cles__icontains=word) |
- Q(discipline__nom__icontains=word) |
- Q(pays__nom__icontains=word) |
- Q(pays__region__nom__icontains=word)).distinct()
+ part = (Q(titre__icontains=word) |
+ Q(description__icontains=word) |
+ Q(editeur__icontains=word) |
+ Q(auteur__icontains=word) |
+ Q(mots_cles__icontains=word) |
+ Q(discipline__nom__icontains=word) |
+ Q(pays__nom__icontains=word))
+ if q is None:
+ q = part
+ else:
+ q = q & part
+ if q is not None:
+ qs = qs.filter(q).distinct()
return qs
class Site(models.Model):
<button title="Lancer la recherche" type="submit"> </button>
</form>
- <p>
- <a href="{% url savoirs.views.avancee %}">Recherche avancée</a>
- {% comment %} |
- <a href="{% url savoirs.views.conseils %}">Conseils</a>
- {% endcomment %}
- </p>
</div>
</div>
<h4><a href="">Régions</a></h4>
<ul>
{% for r in regions %}
- <li><a href="{% url savoirs.views.avancee %}?type=avancee&operator=or&subject={{ r.nom }}">{{ r.nom }}</a></li>
+ <li><a href="{% url savoirs.views.recherche %}?q={{ r.nom|urlencode }}">{{ r.nom }}</a></li>
{% endfor %}
</ul>
<h4><a href="">Disciplines</a></h4>
<ul>
{% for d in disciplines %}
- <li><a href="{% url savoirs.views.avancee %}?type=avancee&operator=or&subject={{ d.nom }}">{{ d.nom }}</a></li>
+ <li><a href="{% url savoirs.views.recherche %}?q={{ d.nom|urlencode }}">{{ d.nom }}</a></li>
{% endfor %}
</ul>
+++ /dev/null
-{% extends "container_base.html" %}
-
-{% block contenu %}
-<h4>Conseils pour la recherche</h4>
-
-<div class="zone-texte">
- <p><i>Contenu a réécrire</i></p>
-</div>
-{% endblock %}
<ul class="sous-menu">
<li><a href="{% url sitotheque.views.index %}">Sitothèque</a></li>
+ {% include "sites/actions.html" %}
</ul>
<ul class="liste-de-l-accueil">
--- /dev/null
+{% extends "container_base.html" %}
+
+{% block contenu %}
+<script>
+ $(document).ready(function(){
+ makePageLinks ({{ page|default:0 }}, {{ data.last_page|default:0 }},
+ '{{ data.more_link }}');
+ });
+</script>
+
+<h4>Sites — Sites AUF</h4>
+<div class="zone-texte">
+ <form method="get" action="" class="contenu-wrapper">
+ <p style="margin-top: 10px;"><input type="text" size="40" name="q" value="{{ google_q|default:""}}" /><input type="submit" name="" value="Chercher" /></p>
+ </form>
+
+ {% if data %}
+ <div id="results">
+ {% for r in data.results %}
+ {% include "savoirs/resultat.html" %}
+ {% empty %}
+ <div class="resultatRecherche">
+ <h2>Aucun résultat trouvé</h2>
+ </div>
+ {% endfor %}
+ </div>
+ <div class="resultatPages">
+ <span id="pageLinks">
+ </span>
+ </div>
+ {% endif %}
+</div>
+{% endblock %}
--- /dev/null
+<li><a href="{% url savoirs.views.sites_auf %}">Sites AUF</a></li>
{% block contenu %}
{% autopaginate sites 10 %}
-<h4>Sitothèque</h4>
+<h4>Sites — Sitothèque</h4>
+<ul class="actions">
+ {% include "sites/actions.html" %}
+</ul>
<h5>Recherche</h5>
# recherche
(r'^recherche/$', 'savoirs.views.recherche'),
- (r'^recherche/avancee/$', 'savoirs.views.avancee'),
- (r'^recherche/conseils/$', 'savoirs.views.conseils'),
# ressources
(r'^ressources/$', 'savoirs.views.ressource_index'),
(r'^sites/$', 'sitotheque.views.index'),
(r'^sites/(?P<id>\d+)/$', 'sitotheque.views.retrieve'),
+ # sites AUF
+ (r'^sites-auf/$', 'savoirs.views.sites_auf'),
+
(r'^rss/(.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict':site_feeds}),
(r'^json/get/$', 'savoirs.views.json_get'),
(r'^json/set/$', 'savoirs.views.json_set'),