# -*- encoding: utf-8 -*-
from django import forms
from models import *
-
+from models import Utilisateur
class PersonneForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(), label="Mot de passe")
class RepertoireSearchForm (forms.Form):
- mots_cles = forms.CharField (required = False, label="Mots-clés")
- discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Tous")
- domaine = forms.ModelChoiceField(queryset=Groupe.objects.all(), required=False, label="Domaine de recherche", empty_label="Tous")
- fonction = forms.ChoiceField(choices=(('','Tous'),)+FONCTION_CHOICES, required=False, label="Fonction")
- pays = forms.ModelChoiceField(queryset=Pays.objects.all().order_by("nom"), required=False, label="Localisation", empty_label="Tous")
+ mots_cles = forms.CharField (required = False, label="Mots-clés")
+ discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Tous")
+ domaine = forms.ModelChoiceField(queryset=Groupe.objects.all(), required=False, label="Domaine de recherche", empty_label="Tous")
+ fonction = forms.ChoiceField(choices=(('','Tous'),)+FONCTION_CHOICES, required=False, label="Fonction")
+ pays = forms.ModelChoiceField(queryset=Pays.objects.all().order_by("nom"), required=False, label="Localisation", empty_label="Tous")
+
+class SendPasswordForm(forms.Form):
+ email = forms.EmailField(required=True, label="courriel")
+ def clean_email(self):
+ cleaned_data = self.cleaned_data
+ email = cleaned_data.get("email")
+ if email:
+ try:
+ Utilisateur.objects.get(courriel=email)
+ except:
+ raise forms.ValidationError("Ce courriel n'existe pas dans notre base de données.")
+ return email
+
# -*- encoding: utf-8 -*-
import hashlib
from django.shortcuts import render_to_response
-from django.http import HttpResponseRedirect
+from django.http import HttpResponseRedirect, HttpResponse
from django.template import Context, RequestContext
from django.core.urlresolvers import reverse
+from django.core.mail import send_mail
+from django.conf import settings
from forms import *
from django.forms.models import inlineformset_factory
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.forms import AuthenticationForm as OriginalAuthenticationForm
+#TODO: Migrer tout ce qui a rapport aux users dans une nouvelle app
+
class AuthenticationForm(OriginalAuthenticationForm):
username = forms.CharField(label=_("Username"), max_length=255)
+def send_password(request):
+ if request.method == "POST":
+ form = SendPasswordForm(data=request.POST)
+ if form.is_valid():
+ u = Utilisateur.objects.get(courriel=form.cleaned_data['email'])
+ code = hashlib.md5(u.courriel+u.password).hexdigest()
+ code = code[0:6]
+ link = "%saccounts/new_password/%s/%s/" % (settings.SITE_ROOT_URL, u.courriel, code)
+ send_mail('Savoirs en partage: changement de mot de passe',
+ 'Bonjour \n. Veuillez acceder a ce lien pour modifier votre mot de passe'+link, settings.CONTACT_EMAIL,
+ [u.courriel], fail_silently=False)
+ else:
+ form = SendPasswordForm()
+
+ variables = { 'form': form,
+ }
+ return render_to_response ("accounts/send_password.html", \
+ Context (variables),
+ context_instance = RequestContext(request))
+
+def random_password():
+ import string
+ from random import choice
+ chars = string.ascii_letters + string.digits
+ password = "".join(choice(chars) for x in range(0,8))
+ return password
+
+
+def new_password(request, email, code):
+ u = Utilisateur.objects.get(courriel=email)
+ original_code = hashlib.md5(u.courriel+u.password).hexdigest()
+ original_code = original_code[0:6]
+ if(code == original_code):
+ new_password = random_password()
+ u.password = hashlib.md5(new_password).hexdigest()
+ u.save()
+ else:
+ return HttpResponseRedirect('/')
+ variables = { 'new_password': new_password,
+ }
+ return render_to_response ("accounts/new_password.html", \
+ Context (variables),
+ context_instance = RequestContext(request))
+
+
def chercheur_login(request, template_name='registration/login.html', redirect_field_name='next'):
"Displays the login form and handles the login action."
for g in groupes:
g = Groupe.objects.get(pk=g)
ChercheurGroupe.objects.get_or_create(chercheur=c, groupe=g, actif=1)
-
- return HttpResponseRedirect(reverse('chercheurs.views.retrieve', args=(c.id,)))
+ return HttpResponseRedirect("/chercheurs/%d/?inscription=1" % c.id)
+ #return HttpResponseRedirect(reverse('chercheurs.views.retrieve', args=(c.id,)))
else:
personne_form = PersonneForm(prefix="personne")
chercheur_form = ChercheurForm(prefix="chercheur")
Context (variables),
context_instance = RequestContext(request))
-
+@login_required()
def edit(request):
"""Edition d'un chercheur"""
context_instance = RequestContext(request)
context_instance = RequestContext(request))
-
+@login_required()
def perso(request):
"""Espace chercheur (espace personnel du chercheur)"""
context_instance = RequestContext(request)
def retrieve(request, id):
"""Fiche du chercheur"""
#chercheur = Chercheur.objects.get(id=id)
+ inscription = request.GET.get('inscription')
chercheur = get_object_or_404(Chercheur, id=id)
variables = { 'chercheur': chercheur,
+ 'inscription': inscription,
}
return render_to_response ("chercheurs/retrieve.html", \
Context (variables),
{
border-bottom:1px solid #DDD;
}
+
+.message
+{
+font-weight:bold;
+font-size:12px;
+color:red;
+}
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
from lib import sep
from lib.calendrier import evenements, evenement_info, combine
def nous_contacter (request):
return render_to_response ("savoirs/contact.html", \
- Context (), \
+ Context ({'courriel':settings.CONTACT_EMAIL}), \
context_instance = RequestContext(request))
# recherche
AUTH_PROFILE_MODULE = 'savoirs.Profile'
+CONTACT_EMAIL = 'contact-savoirsenpartage@auf.org'
+
from auf_references_client.settings import *
--- /dev/null
+{% extends "container_base.html" %}
+
+{% block contenu %}
+
+{% if form.errors %}
+<p>Login ou mot de passe invalide.</p>
+{% endif %}
+
+ <div class="zone-texte">
+ <form method="post" action="{% url chercheurs.views.chercheur_login %}">
+ <table>
+ <tr>
+ <td>{{ form.username.label_tag }}</td>
+ <td>{{ form.username }}</td>
+ </tr>
+ <tr>
+ <td>{{ form.password.label_tag }}</td>
+ <td>{{ form.password }}</td>
+ </tr>
+ </table>
+
+ <input type="submit" value="Connexion" />
+ <input type="hidden" name="next" value="{% if next %}{{next}}{% else %}/chercheurs/perso/{% endif %}" />
+ </form>
+ </div>
+
+{% endblock %}
+
--- /dev/null
+{% extends "container_base.html" %}
+
+{% block contenu %}
+
+<div class="zone-texte">
+ <p>Vous êtes maintenant déconnecté.</p>
+ <p><a href="{% url savoirs.views.index %}">Retour à l'accueil</a>.</p>
+</div>
+
+{% endblock %}
+
--- /dev/null
+{% extends "container_base.html" %}
+
+{% block contenu %}
+<h4>Demande de changement de mot de passe</h4>
+<div class="contenu-wrapper">
+ Mot de passe: <strong>{{new_password}}</strong>
+</div>
+{% endblock %}
--- /dev/null
+{% extends "container_base.html" %}
+
+{% block contenu %}
+<h4>Demande de changement de mot de passe</h4>
+<div class="contenu-wrapper">
+ {% if form.is_valid %}
+ <span class="message">Un courriel a été envoyé à l'adresse spécifiée.</span>
+ {% else %}
+ <form method="post">
+ <fieldset>
+ {% include "table_form.html" %}
+ <span>Veuillez entrer le courriel avec lequel vous avez completé votre inscription.</span>
+ </fieldset>
+ <input type="submit" name="Submit" value="Envoyer" class="bouton" />
+ </form>
+ {% endif %}
+</div>
+{% endblock %}
<div class="contenu-wrapper">
+{% if personne_form.errors or chercheur_form.errors or etablissement_form.errors or discipline_form.errors or these_form.errors %}
+<span class="message">Votre fiche n'a pas été enregistrée. Veuillez remplir tous les champs obligatoires (*).</span>
+{% endif %}
+
<form method="post">
<fieldset>
<legend>Informations personnelles</legend>
{% if publication.titre %}
<td class="souligne">
- {{publication.titre}}
- {% if publication.annee %}{{publication.annee}}{% endif %}
+ <i>{{publication.titre}}</i>
+ {% if publication.editeur %}, {{publication.editeur}}{% endif %}
+ {% if publication.lieu_edition %}, {{publication.lieu_edition}}{% endif %}
+ {% if publication.annee %}, {{publication.annee}}{% endif %}
+ {% if publication.nb_pages %}, {{publication.nb_pages}} pages{% endif %}
{% if publication.revue %}<br />{{publication.revue}}{% endif %}
- {% if publication.editeur %}<br />{{publication.editeur}}{% endif %}
- {% if publication.lieu_edition %}<br />{{publication.lieu_edition}}{% endif %}
- {% if publication.nb_pages %}<br />{{publication.nb_pages}}{% endif %}
{% if publication.url %}<br />{{publication.url}}{% endif %}
</td>
{% else %}
<tr>
<th>{% anchor personne__nom Nom %}</th>
<th>{% anchor etablissement__nom Établissement %}</th>
- <th>{% anchor pays__nom Localisation %}</th>
+ <th>{% anchor etablissement__pays Localisation %}</th>
</tr>
{% for chercheur in chercheurs %}
<tr class="{% cycle 'odd' 'notodd' %}">
{% extends "container_base.html" %}
{% block contenu %}
+
+{% if inscription %}
+ <span class="contenu-wrapper message">Votre fiche a bien été enregistrée.</span>
+{% endif %}
+
<h4>Chercheurs</h4>
<h4>{{ chercheur }}</h4>
<div class="contenu-wrapper">
<div id="fiche_chercheur">
<p>{{chercheur.personne.courriel}}</p>
+ {% if chercheur.etablissement.nom or chercheur.etablissement_autre_nom %}
<p>{% firstof chercheur.etablissement.nom chercheur.etablissement_autre_nom "-" %}, {% firstof chercheur.etablissement.pays chercheur.etablissement_autre_pays "-" %}</p>
+ {% endif %}
<table>
+ {% if chercheur.nationalite %}
<tr>
<td class="label">Nationalité:</td>
<td>{{chercheur.nationalite.nom|default:"-"}}</td>
</tr>
+ {% endif %}
+
<tr>
<td class="label">Fonction:</td>
<td>{{chercheur.fonction|default:"-"}}</td>
<p>
Pour toute information sur les services proposés par ce site,<br />
vous pouvez nous contacter en écrivant à :
-<span style="color: #800000;">contact-savoirsenpartage@auf.org</span>
+<span style="color: #800000;">{{courriel}}</span>
</p>
<p>
Pour toute information sur l'Agence universitaire de la francophonie,<br />
{% if not user_chercheur %}
<li><a href="{% url chercheurs.views.inscription %}">Inscription</a></li>
{% endif %}
- {% if user_chercheur %}
<li><a href="{% url chercheurs.views.perso %}">Espace chercheur</a></li>
- {% endif %}
</ul>
<ul class="liste-de-l-accueil">
+++ /dev/null
-{% extends "container_base.html" %}
-
-{% block contenu %}
-
-{% if form.errors %}
-<p>Login ou mot de passe invalide.</p>
-{% endif %}
-
- <div class="zone-texte">
- <form method="post" action="{% url chercheurs.views.chercheur_login %}">
- <table>
- <tr>
- <td>{{ form.username.label_tag }}</td>
- <td>{{ form.username }}</td>
- </tr>
- <tr>
- <td>{{ form.password.label_tag }}</td>
- <td>{{ form.password }}</td>
- </tr>
- </table>
-
- <input type="submit" value="Connexion" />
- <input type="hidden" name="next" value="/" />
- </form>
- </div>
-
-{% endblock %}
-
+++ /dev/null
-{% extends "container_base.html" %}
-
-{% block contenu %}
-
-<div class="zone-texte">
- <p>Vous êtes maintenant déconnecté.</p>
- <p><a href="{% url savoirs.views.index %}">Retour à l'accueil</a>.</p>
-</div>
-
-{% endblock %}
-
(r'^admin/assigner_disciplines', 'savoirs.admin_views.assigner_disciplines'),
(r'^admin/(.*)', admin.site.root),
- (r'^accounts/login/$', 'chercheurs.views.chercheur_login', {'template_name': 'savoirs/login.html'}),
- (r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'template_name': 'savoirs/logout.html'}),
+ (r'^accounts/login/$', 'chercheurs.views.chercheur_login', {'template_name': 'accounts/login.html'}),
+ (r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'template_name': 'accounts/logout.html'}),
+ (r'^accounts/send_password/$', 'chercheurs.views.send_password'),
+ (r'^accounts/new_password/(.+)/(.+)/$', 'chercheurs.views.new_password'),
# sous-menu gauche
(r'^$', 'savoirs.views.index'),