Esempio n. 1
0
def index(request):
    """
    Répertoire des chercheurs
    """
    search_form = ChercheurSearchForm(request.GET)
    if search_form.is_valid():
        search = search_form.save(commit=False)
    else:
        raise Http404
    chercheurs = search.run().select_related('etablissement')
    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_nom(direction)
    elif sort == 'etablissement':
        chercheurs = chercheurs.order_by_etablissement(direction)
    elif sort == 'pays':
        chercheurs = chercheurs.order_by_pays(direction)
    else:
        chercheurs = chercheurs.order_by('-date_modification')

    try:
        p = PageStatique.objects.get(id='repertoire')
        entete = p.contenu
    except PageStatique.DoesNotExist:
        entete = u'<h1>Répertoire des chercheurs</h1>'

    nb_chercheurs = chercheurs.count()

    return render(request, "chercheurs/index.html", {
        'chercheurs': chercheurs,
        'nb_chercheurs': nb_chercheurs,
        'search_form': search_form,
        'entete': entete
    })
Esempio n. 2
0
def recherche(request):
    """
    API spéciale de recherche pour retourner une structure de données complète
    par rapport au RSS.
    """
    search_form = ChercheurSearchForm(request.GET)
    search = search_form.save(commit=False)
    data = []

    # S'assure qu'un filtre existe au moins
    no_criterion = True
    for criterion, val in request.GET.items():
        if val not in (None, u'', ''):
            no_criterion = False
            break
    if no_criterion:
        return api_return(STATUS_ERROR, 'no criterion', True)

    # run() de ChercheurSearchForm()
    results = Chercheur.objects
    if search.q:
        results = results.search(search.q)
    if search.nom_chercheur:
        results = results.add_to_query('@(nom,prenom) ' + search.nom_chercheur)
    if search.equipe_recherche:
        results = results.add_to_query('@equipe_recherche ' + search.equipe_recherche)
    if search.discipline:
        results = results.filter_discipline(search.discipline)
    if search.region:
        results = results.filter_region(search.region)
    if search.statut:
        if search.statut == "expert":
            results = results.filter_expert()
        else:
            results = results.filter_statut(search.statut)
    if search.domaine:
        results = results.filter_groupe(search.domaine)
    if search.pays:
        results = results.filter_pays(search.pays)
    if search.nord_sud:
        results = results.filter_nord_sud(search.nord_sud)
    if search.genre:
        results = results.filter_genre(search.genre)
    if search.activites_francophonie == 'instance_auf':
        results = results.filter(membre_instance_auf=True)
    elif search.activites_francophonie == 'expert_oif':
        results = results.filter(expert_oif=True)
    elif search.activites_francophonie == 'association_francophone':
        results = results.filter(membre_association_francophone=True)
    elif search.activites_francophonie == 'reseau_institutionnel':
        results = results.filter(membre_reseau_institutionnel=True)

    # sous-ensemble de pays
    limitation_pays = request.GET.get('limitation_pays', None)
    
    if limitation_pays is not None:
        pays = [ref.Pays.objects.get(code=pays_code) for pays_code in limitation_pays.split(',')]
        results = results.filter_pays(pays)

    for chercheur in results.all():
        data.append(chercheur_2_dict(chercheur))
    
    return api_return(STATUS_OK, dict_2_json(data), True)