Changements divers
authorAli Jetha <ali@U-AJ.(none)>
Tue, 26 Oct 2010 21:53:36 +0000 (17:53 -0400)
committerAli Jetha <ali@U-AJ.(none)>
Tue, 26 Oct 2010 21:53:36 +0000 (17:53 -0400)
18 files changed:
auf_savoirs_en_partage/chercheurs/forms.py
auf_savoirs_en_partage/chercheurs/views.py
auf_savoirs_en_partage/media/css/global.css
auf_savoirs_en_partage/savoirs/views.py
auf_savoirs_en_partage/settings.py
auf_savoirs_en_partage/templates/accounts/login.html [new file with mode: 0644]
auf_savoirs_en_partage/templates/accounts/logout.html [new file with mode: 0644]
auf_savoirs_en_partage/templates/accounts/new_password.html [new file with mode: 0644]
auf_savoirs_en_partage/templates/accounts/send_password.html [new file with mode: 0644]
auf_savoirs_en_partage/templates/chercheurs/inscription.html
auf_savoirs_en_partage/templates/chercheurs/publication_display.html
auf_savoirs_en_partage/templates/chercheurs/rechercher.html
auf_savoirs_en_partage/templates/chercheurs/retrieve.html
auf_savoirs_en_partage/templates/savoirs/contact.html
auf_savoirs_en_partage/templates/savoirs/index.html
auf_savoirs_en_partage/templates/savoirs/login.html [deleted file]
auf_savoirs_en_partage/templates/savoirs/logout.html [deleted file]
auf_savoirs_en_partage/urls.py

index abf2153..4497b99 100644 (file)
@@ -1,7 +1,7 @@
 # -*- 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") 
@@ -54,8 +54,21 @@ class PersonneEditForm(forms.ModelForm):
         
         
 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        
+
index d738be6..8ecef86 100644 (file)
@@ -1,9 +1,11 @@
 # -*- 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
@@ -19,9 +21,56 @@ from django.shortcuts import get_object_or_404
 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."
@@ -140,8 +189,8 @@ def inscription(request):
                     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")
@@ -172,7 +221,7 @@ def inscription(request):
             Context (variables), 
             context_instance = RequestContext(request))
 
-
+@login_required()
 def edit(request):
     """Edition d'un chercheur"""
     context_instance = RequestContext(request)
@@ -257,7 +306,7 @@ def edit(request):
             context_instance = RequestContext(request))
             
             
-
+@login_required()
 def perso(request):
     """Espace chercheur (espace personnel du chercheur)"""
     context_instance = RequestContext(request)
@@ -273,8 +322,10 @@ def perso(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), 
index 6b87739..e96f5bd 100644 (file)
@@ -249,3 +249,10 @@ width:150px;
 {
   border-bottom:1px solid #DDD;
 }
+
+.message
+{
+font-weight:bold;
+font-size:12px;
+color:red;
+}
index 3b56821..62c05ba 100644 (file)
@@ -7,6 +7,7 @@ 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
 from lib import sep
 from lib.calendrier import evenements, evenement_info, combine
@@ -54,7 +55,7 @@ def a_propos (request):
 
 def nous_contacter (request):
     return render_to_response ("savoirs/contact.html", \
-            Context (), \
+            Context ({'courriel':settings.CONTACT_EMAIL}), \
             context_instance = RequestContext(request))
 
 # recherche
index 02fe938..56a232b 100644 (file)
@@ -106,4 +106,6 @@ ADMIN_TOOLS_INDEX_DASHBOARD = 'auf_savoirs_en_partage.dashboard.CustomIndexDashb
 
 AUTH_PROFILE_MODULE = 'savoirs.Profile'
 
+CONTACT_EMAIL = 'contact-savoirsenpartage@auf.org'
+
 from auf_references_client.settings import *
diff --git a/auf_savoirs_en_partage/templates/accounts/login.html b/auf_savoirs_en_partage/templates/accounts/login.html
new file mode 100644 (file)
index 0000000..c064824
--- /dev/null
@@ -0,0 +1,28 @@
+{% 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 %}
+
diff --git a/auf_savoirs_en_partage/templates/accounts/logout.html b/auf_savoirs_en_partage/templates/accounts/logout.html
new file mode 100644 (file)
index 0000000..a7cc1fa
--- /dev/null
@@ -0,0 +1,11 @@
+{% 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 %}
+
diff --git a/auf_savoirs_en_partage/templates/accounts/new_password.html b/auf_savoirs_en_partage/templates/accounts/new_password.html
new file mode 100644 (file)
index 0000000..72a8891
--- /dev/null
@@ -0,0 +1,8 @@
+{% 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 %}
diff --git a/auf_savoirs_en_partage/templates/accounts/send_password.html b/auf_savoirs_en_partage/templates/accounts/send_password.html
new file mode 100644 (file)
index 0000000..a0fd22c
--- /dev/null
@@ -0,0 +1,18 @@
+{% 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 %}
index a236280..0ec8336 100644 (file)
@@ -5,6 +5,10 @@
 
 <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>
index 7c85eae..721c807 100644 (file)
@@ -1,11 +1,11 @@
 {% 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 %}
index 9857069..dee4863 100644 (file)
@@ -26,7 +26,7 @@
     <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' %}">
index 2322e85..91372fb 100644 (file)
@@ -1,6 +1,11 @@
 {% 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>
index 9d65d9b..0247b64 100644 (file)
@@ -7,7 +7,7 @@
 <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 />
index ccf8800..05837f0 100644 (file)
@@ -33,9 +33,7 @@
             {% 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">
diff --git a/auf_savoirs_en_partage/templates/savoirs/login.html b/auf_savoirs_en_partage/templates/savoirs/login.html
deleted file mode 100644 (file)
index 94581d9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-{% 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 %}
-
diff --git a/auf_savoirs_en_partage/templates/savoirs/logout.html b/auf_savoirs_en_partage/templates/savoirs/logout.html
deleted file mode 100644 (file)
index a7cc1fa..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{% 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 %}
-
index 128578b..cb6d9c3 100644 (file)
@@ -23,8 +23,10 @@ urlpatterns = patterns(
     (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'),