Add profile to user
authorverrierj
Wed, 07 Sep 2011 17:32:29 +0200
changeset 169 64f24f8841ec
parent 168 4d3a3ea5225c
child 170 caa1986245d7
Add profile to user
src/ldt/ldt/ldt_utils/middleware/userprofile.py
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html
src/ldt/ldt/locale/en/LC_MESSAGES/django.mo
src/ldt/ldt/locale/fr/LC_MESSAGES/django.mo
src/ldt/ldt/locale/fr/LC_MESSAGES/django.po
src/ldt/ldt/settings.py
src/ldt/ldt/static/ldt/css/workspace.css
src/ldt/ldt/templates/admin/base_site.html
src/ldt/ldt/user/forms.py
src/ldt/ldt/user/migrations/0003_auto__add_userprofile.py
src/ldt/ldt/user/models.py
src/ldt/ldt/user/templates/ldt/user/change_email.html
src/ldt/ldt/user/templates/ldt/user/change_language.html
src/ldt/ldt/user/templates/ldt/user/change_name.html
src/ldt/ldt/user/templates/ldt/user/change_profile.html
src/ldt/ldt/user/templates/ldt/user/user_base.html
src/ldt/ldt/user/templates/ldt/user/user_change.html
src/ldt/ldt/user/urls.py
src/ldt/ldt/user/views.py
web/ldtplatform/settings.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/ldt_utils/middleware/userprofile.py	Wed Sep 07 17:32:29 2011 +0200
@@ -0,0 +1,11 @@
+from ldt.user.models import get_or_create_profile
+from django.utils import translation
+
+class LanguageMiddleware(object):
+
+    def process_request(self, request):
+        if request.user.is_authenticated():
+            language = get_or_create_profile(request.user).language
+            translation.activate(language)
+            request.LANGUAGE_CODE = translation.get_language()
+            
\ No newline at end of file
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Wed Sep 07 17:32:29 2011 +0200
@@ -26,11 +26,14 @@
 			parent.$.nmTop().close();
 		});
 		
+		$("#check_projects").attr('title', 'uncheck all');
 		$("#check_projects").change(function () {
 			if ($("#check_projects").is(":checked")) {
 				$(".cellcheckbox input").attr('checked', 'true');
+				$("#check_projects").attr('title', 'uncheck all');
 			} else {
 				$(".cellcheckbox input").removeAttr('checked');
+				$("#check_projects").attr('title', 'check all');
 			}
 		});
 				
@@ -48,9 +51,19 @@
 	{{form.title}}
 	<label>{% trans "List of contents" %}</label>	
 	<div class="span-12 last projectscontentsdiv" id="ldtcreatecontentslistcontainer">
-		<div class="projectscontentsheader span-12 last" id="contentslistheader">{% trans "name" %}</div>
 		<div class="span-12 last projectscontentstablediv" id="ldtcreatecontentstablediv">
 			<table class="projectscontentstable">
+			
+				<tr class="projectscontentsheader last" id="contentslistheader">
+					<td class="cellcheckbox">
+					{% if not ldt_id %}
+						{% if contents|length > 1 %}
+						<input class="selectallprojects" id="check_projects" type="checkbox" checked="true" />	 
+						{% endif %}
+					{% endif %}					
+					<td class="projectcontentsheadertitle">{% trans "name" %}</td>
+				</tr>
+			
 			    <tbody class="projectscontentsbody">
 			{% for content in contents %}
 				<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
@@ -61,11 +74,7 @@
 				</tbody>
 			</table>			
 		</div>
-		{% if not ldt_id %}
-			{% if contents|length > 1 %}
-			<input class="selectallprojects" style="width: 35px; text-align: center;" id="check_projects" type="checkbox" checked="true"/>	 
-			{% endif %}
-		{% endif %}
+
 		
 	</div>
 	
Binary file src/ldt/ldt/locale/en/LC_MESSAGES/django.mo has changed
Binary file src/ldt/ldt/locale/fr/LC_MESSAGES/django.mo has changed
--- a/src/ldt/ldt/locale/fr/LC_MESSAGES/django.po	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/locale/fr/LC_MESSAGES/django.po	Wed Sep 07 17:32:29 2011 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-02 11:52+0200\n"
+"POT-Creation-Date: 2011-09-07 15:34+0200\n"
 "PO-Revision-Date: 2010-03-09 15:52+0100\n"
 "Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -174,62 +174,62 @@
 msgid "changed by"
 msgstr "modifié par"
 
-#: .\ldt_utils\views.py:147 .\ldt_utils\views.py:540 .\ldt_utils\views.py:586
+#: .\ldt_utils\views.py:153 .\ldt_utils\views.py:546 .\ldt_utils\views.py:592
 msgid "You can not access this project"
 msgstr "vous n'avez pas l'autorisation d'accéder à ce projet"
 
-#: .\ldt_utils\views.py:752
+#: .\ldt_utils\views.py:758
 #, python-format
 msgid "the project %(title)s is published. please unpublish before deleting."
 msgstr "Le projet %(title)s est publié. Déplublier le avant de l'effacer."
 
-#: .\ldt_utils\views.py:753
+#: .\ldt_utils\views.py:759
 msgid "can not delete the project. Please correct the following error"
 msgstr ""
 "Le projet ne peut pas être effacé. Veuillez corriger les erreurs suivantes."
 
-#: .\ldt_utils\views.py:754
+#: .\ldt_utils\views.py:760
 msgid "title error deleting project"
 msgstr "Erreur lors de l'effacement du projet"
 
-#: .\ldt_utils\views.py:756
+#: .\ldt_utils\views.py:762
 #, python-format
 msgid "please confirm deleting project %(title)s"
 msgstr "Confirmer l'effacement du projet intitulé %(title)s"
 
-#: .\ldt_utils\views.py:757
+#: .\ldt_utils\views.py:763
 msgid "confirm deletion"
 msgstr "Confirmation d'effacement"
 
-#: .\ldt_utils\views.py:931
+#: .\ldt_utils\views.py:937
 msgid "Problem when downloading file from url : "
 msgstr "Problème lors du téléchargement du fichier : "
 
-#: .\ldt_utils\views.py:934
+#: .\ldt_utils\views.py:940
 msgid "Problem when uploading file : "
 msgstr "Problème lors de l'upload du fichier : "
 
-#: .\ldt_utils\views.py:1003
+#: .\ldt_utils\views.py:1009
 #, python-format
 msgid "There is %(count)d error when deleting content"
 msgid_plural "There are %(count)d errors when deleting content"
 msgstr[0] "Il y a %(count)d erreur lors de l'effacement du contenu"
 msgstr[1] "Il y a %(count)d erreurs lors de l'effacement du contenu"
 
-#: .\ldt_utils\views.py:1004
+#: .\ldt_utils\views.py:1010
 msgid "title error deleting content"
 msgstr "Erreur lors de l'effacement du contenu"
 
-#: .\ldt_utils\views.py:1006
+#: .\ldt_utils\views.py:1012
 #, python-format
 msgid "Confirm delete content %(titles)s"
 msgstr "Veuillez confirmer l'effacement du contenu %(titles)s"
 
-#: .\ldt_utils\views.py:1007
+#: .\ldt_utils\views.py:1013
 msgid "confirm delete content"
 msgstr "Confirmation effacement contenu"
 
-#: .\ldt_utils\views.py:1041
+#: .\ldt_utils\views.py:1047
 #, python-format
 msgid ""
 "Content '%(title)s' is referenced by this project : %(project_titles)s. "
@@ -239,11 +239,12 @@
 "Please delete them beforehand."
 msgstr[0] ""
 msgstr[1] ""
+msgstr[2] ""
 "Le contenu '%(title)s' est référencé par le projet '%(project_titles)s'."
-msgstr[2] "Veuillez l'effacer préalablement."
-msgstr[3] ""
-msgstr[4] "Le contenu '%(title)s' est référencé par les projets suivants : "
-msgstr[5] "'%(project_titles)s'.Veuillez les effacer préalablement."
+msgstr[3] "Veuillez l'effacer préalablement."
+msgstr[4] ""
+msgstr[5] "Le contenu '%(title)s' est référencé par les projets suivants : "
+msgstr[6] "'%(project_titles)s'.Veuillez les effacer préalablement."
 
 #: .\ldt_utils\templates\admin\ldt_utils\app_action.html.py:4
 #: .\templates\admin\cms_change_list.html.py:7
@@ -287,7 +288,7 @@
 msgstr "Copier votre projet"
 
 #: .\ldt_utils\templates\ldt\ldt_utils\copy_ldt.html.py:16
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:47
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:50
 msgid "Title"
 msgstr "Titre"
 
@@ -337,7 +338,7 @@
 msgstr "Le fichier média est en cours de traitement. Veuillez patienter."
 
 #: .\ldt_utils\templates\ldt\ldt_utils\create_content.html.py:124
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:73
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:82
 #: .\ldt_utils\templates\ldt\ldt_utils\error_confirm.html.py:49
 msgid "close_cancel"
 msgstr "Fermer"
@@ -350,36 +351,35 @@
 msgid "write"
 msgstr "Enregistrer"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:43
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:46
 msgid "Update your project"
 msgstr "Mettre à jour votre projet Lignes de Temps"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:43
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:46
 msgid "Create your project"
 msgstr "Créer votre projet Lignes de Temps"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:49
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:52
 msgid "List of contents"
 msgstr "Liste de contenus"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:51
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:64
 #: .\ldt_utils\templates\ldt\ldt_utils\partial\contentslist.html.py:3
 #: .\ldt_utils\templates\ldt\ldt_utils\partial\projectslist.html.py:3
 #: .\ldt_utils\templates\ldt\ldt_utils\partial\publishedprojectslist.html.py:3
-#: .\user\templates\ldt\user\change_name.html.py:31
-#: .\user\templates\ldt\user\change_profile.html.py:73
+#: .\user\templates\ldt\user\change_profile.html.py:52
 msgid "name"
-msgstr "nom"
+msgstr "Nom"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:75
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:84
 msgid "delete_project"
 msgstr "Effacer"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:76
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:85
 msgid "update_project"
 msgstr "Mettre à jour"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:78
+#: .\ldt_utils\templates\ldt\ldt_utils\create_ldt.html.py:87
 msgid "create_project"
 msgstr "Créer un nouveau projet Ligne de Temps"
 
@@ -526,6 +526,16 @@
 msgid "Project published"
 msgstr "Projet publié"
 
+#: .\templates\admin\base_site.html.py:4
+#, fuzzy
+msgid "Django site admin"
+msgstr "Administration de Django"
+
+#: .\templates\admin\base_site.html.py:7
+#: .\templates\admin\page_base_site.html.py:7
+msgid "Django administration"
+msgstr "Administration de Django"
+
 #: .\templates\admin\cms_change_form.html.py:30
 msgid "Approve page deletion"
 msgstr "Accepter l'effacement de la page"
@@ -646,57 +656,51 @@
 msgid "Filter"
 msgstr "Filtre"
 
-#: .\templates\admin\index.html.py:18 .\templates\admin\page_index.html.py:18
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Le modèle disponible dans l'application %(name)s."
-
-#: .\templates\admin\index.html.py:19
 #: .\templates\admin\page_app_index.html.py:10
 #: .\templates\admin\page_index.html.py:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: .\templates\admin\index.html.py:29
+#: .\templates\admin\page_base.html.py:20
+#: .\templates\admin\page_index.html.py:11
+msgid "Pages"
+msgstr "Pages"
+
 #: .\templates\admin\page_change_form.html.py:20
 #: .\templates\admin\page_index.html.py:29
 msgid "Add"
 msgstr "Ajouter"
 
-#: .\templates\admin\index.html.py:35 .\templates\admin\page_index.html.py:35
+#: .\templates\admin\page_index.html.py:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Le modèle disponible dans l'application %(name)s."
+
+#: .\templates\admin\page_index.html.py:35
 msgid "Change"
 msgstr "modifié par"
 
-#: .\templates\admin\index.html.py:64 .\templates\admin\page_index.html.py:45
+#: .\templates\admin\page_index.html.py:45
 msgid "You don't have permission to edit anything."
 msgstr "Vous n'aver pas l'autorisation d'éditer quoi que ce soit."
 
-#: .\templates\admin\index.html.py:72 .\templates\admin\page_index.html.py:53
+#: .\templates\admin\page_index.html.py:53
 msgid "Recent Actions"
 msgstr "Actions récentes"
 
-#: .\templates\admin\index.html.py:73 .\templates\admin\page_index.html.py:54
+#: .\templates\admin\page_index.html.py:54
 msgid "My Actions"
 msgstr "Mes actions"
 
-#: .\templates\admin\index.html.py:77 .\templates\admin\page_index.html.py:58
+#: .\templates\admin\page_index.html.py:58
 msgid "None available"
 msgstr "Aucune disponible"
 
-#: .\templates\admin\index.html.py:91 .\templates\admin\page_index.html.py:72
+#: .\templates\admin\page_index.html.py:72
 msgid "Unknown content"
 msgstr "Contenu inconnu"
 
-#: .\templates\admin\page_base.html.py:20
-#: .\templates\admin\page_index.html.py:11
-msgid "Pages"
-msgstr "Pages"
-
-#: .\templates\admin\page_base_site.html.py:7
-msgid "Django administration"
-msgstr "Administration de Django"
-
 #: .\templates\admin\page_login.html.py:8
 msgid "Connexion"
 msgstr "Connexion"
@@ -754,9 +758,18 @@
 msgstr "Plateforme&nbsp;Ldt"
 
 #: .\templates\ldt\ldt_base.html.py:85
+msgid "link to admin"
+msgstr ""
+
+#: .\templates\ldt\ldt_base.html.py:85
 msgid "Staff"
 msgstr "admin"
 
+#: .\templates\ldt\ldt_base.html.py:88
+#, fuzzy
+msgid "profile change"
+msgstr "Modification de l'adresse émail"
+
 #: .\templates\ldt\ldt_base.html.py:107
 msgid "home"
 msgstr "accueil"
@@ -781,12 +794,13 @@
 msgstr "Mon profil"
 
 #: .\templates\ldt\ldt_base.html.py:139
-msgid "web"
-msgstr "web v"
+msgid "version number"
+msgstr ""
 
 #: .\templates\ldt\ldt_base.html.py:139
-msgid "platform"
-msgstr "platform v"
+#, python-format
+msgid " web %(WEB_VERSION)s | platform %(VERSION)s "
+msgstr "web v%(WEB_VERSION)s | platform v%(VERSION)s "
 
 #: .\templates\ldt\ldt_raw_base.html.py:13
 msgid "page_title"
@@ -848,123 +862,54 @@
 msgid "Permissions"
 msgstr "Permissions"
 
-#: .\user\admin.py:25 .\user\templates\ldt\user\login_form.html.py:61
+#: .\user\admin.py:25 .\user\templates\ldt\user\change_profile.html.py:95
+#: .\user\templates\ldt\user\login_form.html.py:61
 msgid "Password"
 msgstr "Mot de passe"
 
 #: .\user\forms.py:28 .\user\templates\ldt\user\change_password.html.py:40
+#: .\user\templates\ldt\user\change_profile.html.py:108
 msgid "New password"
 msgstr "Nouveau mot de passe"
 
 #: .\user\forms.py:30 .\user\templates\ldt\user\change_password.html.py:50
+#: .\user\templates\ldt\user\change_profile.html.py:121
 msgid "New password confirmation"
 msgstr "Confirmation du nouveau mot de passe"
 
-#: .\user\forms.py:59 .\user\forms.py:60 .\user\forms.py:100
-#: .\user\forms.py:101
+#: .\user\forms.py:59 .\user\forms.py:60
 msgid "E-mail"
 msgstr "E-mail"
 
-#: .\user\forms.py:71 .\user\forms.py:113
+#: .\user\forms.py:71
 msgid "The two emails didn't match."
 msgstr "les deux emails ne correspondent pas"
 
-#: .\user\forms.py:82 .\user\forms.py:98
-#, fuzzy
+#: .\user\forms.py:82
 msgid "First name"
-msgstr "prénom :"
-
-#: .\user\forms.py:83 .\user\forms.py:99
-#, fuzzy
-msgid "Last name"
-msgstr "nom :"
-
-#: .\user\forms.py:102
-#, fuzzy
-msgid "Username"
-msgstr "Nom de utilisateur :"
-
-#: .\user\forms.py:119
-#, python-format
-msgid "username %s is already used."
-msgstr ""
-
-#: .\user\forms.py:125 .\user\forms.py:131
-msgid "Please use only letter, blanks, or dashes."
-msgstr ""
-
-#: .\user\views.py:38 .\user\templates\registration\login.html.py:24
-msgid "Sorry, that's not a valid username or password."
-msgstr "Saisissez un nom d'utilisateur et un mot de passe valide."
-
-#: .\user\templates\ldt\user\change_email.html.py:5
-#, fuzzy
-msgid "Modification de l'adresse émail"
-msgstr "Modification de l'adresse email"
+msgstr "Prénom"
 
-#: .\user\templates\ldt\user\change_email.html.py:24
-msgid ""
-"Please enter your new e-mail twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Saisissez deux fois votre nouvelle adresse émail afin de vérifier qu'il est "
-"correctment"
-
-#: .\user\templates\ldt\user\change_email.html.py:24
-msgid "Your actual email address is"
-msgstr "Votre adresse émail est "
-
-#: .\user\templates\ldt\user\change_email.html.py:30
-#: .\user\templates\ldt\user\change_profile.html.py:87
-#, fuzzy
-msgid "email"
-msgstr "adresse émail"
+#: .\user\forms.py:83
+msgid "Last name"
+msgstr "Nom :"
 
-#: .\user\templates\ldt\user\change_email.html.py:39
-#: .\user\templates\ldt\user\change_profile.html.py:102
-#, fuzzy
-msgid "Confirmation de l'adresse émail"
-msgstr "Confirmation de l'adresse émail"
-
-#: .\user\templates\ldt\user\change_email.html.py:46
-msgid "change my e-mail"
-msgstr "Changer l'adresse émail"
-
-#: .\user\templates\ldt\user\change_email.html.py:50
-#, fuzzy
-msgid "Your new email address has been saved."
-msgstr "Votre mot de passe a été changeé."
-
-#: .\user\templates\ldt\user\change_language.html.py:5
-#: .\user\templates\ldt\user\user_change.html.py:76
-msgid "Language change"
-msgstr "Modification de la langue"
-
-#: .\user\templates\ldt\user\change_language.html.py:16
-msgid "Please change the language"
-msgstr "Veuillez changer la langue du site."
-
-#: .\user\templates\ldt\user\change_language.html.py:20
+#: .\user\forms.py:110 .\user\templates\ldt\user\change_profile.html.py:73
 msgid "Language"
 msgstr "Langue"
 
-#: .\user\templates\ldt\user\change_name.html.py:5
-#: .\user\templates\ldt\user\change_name.html.py:37
-msgid "Name change"
-msgstr "Modification du nom"
-
-#: .\user\templates\ldt\user\change_name.html.py:17
-msgid "Please change your name"
-msgstr "Changez votre nom ou votre prénom."
+#: .\user\views.py:30
+#, fuzzy
+msgid "Your profile has been updated."
+msgstr "Votre nom a été modifié"
 
-#: .\user\templates\ldt\user\change_name.html.py:23
-#: .\user\templates\ldt\user\change_profile.html.py:59
-msgid "first name"
-msgstr "prénom"
+#: .\user\views.py:52
+#, fuzzy
+msgid "Your password has been updated."
+msgstr "Votre mot de passe a été changeé."
 
-#: .\user\templates\ldt\user\change_name.html.py:41
-msgid "Your name has been modified"
-msgstr "Votre nom a été modifié"
+#: .\user\views.py:72 .\user\templates\registration\login.html.py:24
+msgid "Sorry, that's not a valid username or password."
+msgstr "Saisissez un nom d'utilisateur et un mot de passe valide."
 
 #: .\user\templates\ldt\user\change_password.html.py:31
 #, fuzzy
@@ -972,52 +917,35 @@
 msgstr "Ancien mot de passe"
 
 #: .\user\templates\ldt\user\change_password.html.py:44
-#, fuzzy
 msgid "passwords don't match"
 msgstr "Changement de mot de passe"
 
 #: .\user\templates\ldt\user\change_password.html.py:57
-#: .\user\templates\ldt\user\user_change.html.py:75
+#: .\user\templates\ldt\user\change_profile.html.py:134
 #: .\user\templates\registration\password_change_form.html.py:14
 #: .\user\templates\registration\password_change_form.html.py:17
 msgid "Password change"
 msgstr "Modification du mot de passe"
 
 #: .\user\templates\ldt\user\change_password.html.py:61
-#, fuzzy
 msgid "Your new password has been saved."
 msgstr "Votre mot de passe a été changeé."
 
-#: .\user\templates\ldt\user\change_profile.html.py:39
-#, fuzzy
-msgid "Your profile has been updated"
-msgstr "Votre nom a été modifié"
+#: .\user\templates\ldt\user\change_profile.html.py:33
+msgid "username"
+msgstr "Nom d'utilisateur"
 
-#: .\user\templates\ldt\user\change_profile.html.py:46
-#, fuzzy
-msgid "user name"
-msgstr "Nom de utilisateur :"
-
-#: .\user\templates\ldt\user\change_profile.html.py:63
-#: .\user\templates\ldt\user\change_profile.html.py:77
-msgid "Please use only letters, blanks or dashes"
-msgstr ""
+#: .\user\templates\ldt\user\change_profile.html.py:44
+msgid "first name"
+msgstr "Prénom"
 
-#: .\user\templates\ldt\user\change_profile.html.py:91
-#, fuzzy
-msgid "emails don't match"
-msgstr "les deux emails ne correspondent pas"
+#: .\user\templates\ldt\user\change_profile.html.py:60
+msgid "email"
+msgstr "Adresse émail"
 
-#: .\user\templates\ldt\user\change_profile.html.py:92
-#: .\user\templates\ldt\user\change_profile.html.py:106
-msgid "incorrect email"
-msgstr ""
-
-#: .\user\templates\ldt\user\change_profile.html.py:114
-#: .\user\templates\ldt\user\user_change.html.py:74
-#, fuzzy
+#: .\user\templates\ldt\user\change_profile.html.py:85
 msgid "Profile change"
-msgstr "Modification de l'adresse émail"
+msgstr "Modification du profil"
 
 #: .\user\templates\ldt\user\login_form.html.py:50
 msgid "create account"
@@ -1246,38 +1174,26 @@
 "Nous vous avons envoyé par courriel les instructions pour activer le compte "
 "à l'adresse que vous avez indiquée. Vous devriez le recevoir rapidement."
 
-#~ msgid "Check all"
-#~ msgstr "Cocher tout"
-
-#~ msgid "Uncheck all"
-#~ msgstr "Décocher tout"
-
-#~ msgid "The language has been modified"
-#~ msgstr "La langue a été modifiée"
+#, fuzzy
+#~ msgid "log out"
+#~ msgstr "Déconnexion"
 
-#~ msgid "name:"
-#~ msgstr "nom :"
-
-#~ msgid "email change"
-#~ msgstr "Modification de l'adresse émail"
-
-#~ msgid "email changed"
-#~ msgstr "email modifié"
+#~ msgid ""
+#~ "Please enter your new e-mail twice so we can verify you typed it in "
+#~ "correctly."
+#~ msgstr ""
+#~ "Saisissez deux fois votre nouvelle adresse émail afin de vérifier qu'il "
+#~ "est correctment"
 
-#~ msgid "back to profile"
-#~ msgstr "Retourner à mon profil"
+#~ msgid "Your actual email address is"
+#~ msgstr "Votre adresse émail est "
 
-#~ msgid "Se connecter"
-#~ msgstr "Se connecter"
-
-#~ msgid "Créer un compte"
-#~ msgstr "Créer un compte"
+#~ msgid "change my e-mail"
+#~ msgstr "Changer l'adresse émail"
 
-#~ msgid "récupérer mot de passe"
-#~ msgstr "Récupérer le mot de passe"
+#, fuzzy
+#~ msgid "Your new email address has been saved."
+#~ msgstr "Votre mot de passe a été changeé."
 
-#~ msgid "Page"
-#~ msgstr "Pages"
-
-#~ msgid "Projets Lignes de temps"
-#~ msgstr "Projets Lignes de temps"
+#~ msgid "Please change the language"
+#~ msgstr "Veuillez changer la langue du site."
--- a/src/ldt/ldt/settings.py	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/settings.py	Wed Sep 07 17:32:29 2011 +0200
@@ -42,6 +42,7 @@
     'django.middleware.locale.LocaleMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django_openid_consumer.middleware.OpenIDMiddleware',
+    'ldt.ldt_utils.middleware.userprofile.LanguageMiddleware',
 )
 
 
@@ -76,4 +77,6 @@
 
 AUTO_INDEX_AFTER_SAVE = getattr(settings, 'AUTO_INDEX_AFTER_SAVE', True)
 
-WEB_VERSION = getattr(settings, 'WEB_VERSION', '')
\ No newline at end of file
+WEB_VERSION = getattr(settings, 'WEB_VERSION', '')
+
+
--- a/src/ldt/ldt/static/ldt/css/workspace.css	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/static/ldt/css/workspace.css	Wed Sep 07 17:32:29 2011 +0200
@@ -97,13 +97,15 @@
 
 
 /* make the TH elements pretty */
-.projectscontentsheader {
+.projectscontentsheader  {
 	background: #b5b5b5;
+	padding: 1px 2px;
+	text-align: left;
+}
+.projectcontentsheadertitle {
 	font-weight: bold;
 	text-transform:capitalize;
 	color: white;
-	padding: 1px 2px;
-	text-align: left;
 }
 .groupsheader {
 	text-transform:none;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/templates/admin/base_site.html	Wed Sep 07 17:32:29 2011 +0200
@@ -0,0 +1,21 @@
+{% extends "admin/base.html" %}
+{% load i18n %}
+
+{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
+
+{% block branding %}
+<h1 id="site-name">{% trans 'Django administration' %}</h1>
+{% endblock %}
+
+{% block nav-global %}
+    <style type="text/css">
+        .adminlink {
+        	margin:0 10px 10px;
+        	display:block;
+        	float:left;
+        }
+    </style>
+
+    <a href="{% url admin:index %}" clas="adminlink">Admin home</a>  
+    <a href="{% url root-view %}" class="adminlink">Website home</a>
+{% endblock %}
--- a/src/ldt/ldt/user/forms.py	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/user/forms.py	Wed Sep 07 17:32:29 2011 +0200
@@ -1,12 +1,12 @@
 from django import forms
-from django.contrib.auth.forms import UserCreationForm
+from django.conf import settings
+from django.contrib.auth.forms import UserCreationForm, UserChangeForm
+from django.contrib.auth.models import User
 from django.forms.util import ErrorList
 from django.utils.translation import gettext as _
+from ldt.user.models import get_or_create_profile
 from models import Ldt
 
-from django.contrib.auth.models import User
-
-
 
 class LdtForm(UserCreationForm):
         
@@ -94,55 +94,29 @@
         return self.user
     
 
-class ProfileChangeForm(forms.Form):
-    first_name = forms.CharField(label=_("First name"), max_length=30)
-    last_name = forms.CharField(label=_("Last name"), max_length=30)
-    email1 = forms.EmailField(label=_("E-mail"), max_length=75)
-    email2 = forms.EmailField(label=_("E-mail"), max_length=75)
-    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$')
+class ProfileForm(UserChangeForm):
+    
+    def __init__(self, user=None, *args, **kwargs):
+        #self.user = user
+        super(ProfileForm, self).__init__(*args, **kwargs)
+        
+ 
+    class Meta:
+        model = User
+        fields = ('username', 'email', 'first_name', 'last_name')
+        
+        
+class LanguageChangeForm(forms.Form):
+    language = forms.ChoiceField(label=_("Language"), choices=settings.LANGUAGES)
     
     def __init__(self, user=None, *args, **kwargs):
         self.user = user
-        super(ProfileChangeForm, self).__init__(*args, **kwargs)
-        
-    def clean_email2(self):
-        email1 = self.cleaned_data.get('email1')
-        email2 = self.cleaned_data.get('email2')
-        if email1 and email2:
-            if email1 != email2:
-                raise forms.ValidationError(_("The two emails didn't match."))
-        return email2
-    
-    def clean_username(self):
-        retrieved_username = '%s' % self.cleaned_data.get('username')
-        if retrieved_username != self.user.username and (len(User.objects.filter(username=retrieved_username)) > 0):
-            raise forms.ValidationError(_("username %s is already used." % retrieved_username))
-        return retrieved_username
-    
-    def clean_first_name(self):
-        first_name = self.cleaned_data.get('first_name')
-        if not self.isValidName(first_name):
-            raise forms.ValidationError(_("Please use only letter, blanks, or dashes."))
-        return first_name
+        super(LanguageChangeForm, self).__init__(*args, **kwargs)
         
-    def clean_last_name(self):
-        last_name = self.cleaned_data.get('last_name')
-        if not self.isValidName(last_name):
-            raise forms.ValidationError(_("Please use only letter, blanks, or dashes."))
-        return last_name
+    def save(self):
+        profile = get_or_create_profile(self.user)
+        profile.language = self.cleaned_data['language']
+        profile.save()
+        return self.user
     
-    def isValidName(self, string):
-        for i in string:
-            if not i.isalpha() and not i in [' ','-']:
-                return False
-        return True    
-    
-    
-    def save(self):
-        self.user.email = self.cleaned_data['email1']
-        self.user.first_name = self.cleaned_data['first_name']
-        self.user.last_name = self.cleaned_data['last_name']
-        self.user.username = self.cleaned_data['username']
-        self.user.save()
-        return self.user
-    
\ No newline at end of file
+        
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/user/migrations/0003_auto__add_userprofile.py	Wed Sep 07 17:32:29 2011 +0200
@@ -0,0 +1,75 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'UserProfile'
+        db.create_table('user_userprofile', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
+            ('language', self.gf('django.db.models.fields.CharField')(default='fr', max_length=2)),
+        ))
+        db.send_create_signal('user', ['UserProfile'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'UserProfile'
+        db.delete_table('user_userprofile')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'user.ldt': {
+            'Meta': {'object_name': 'Ldt', '_ormbases': ['auth.User']},
+            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
+        },
+        'user.userprofile': {
+            'Meta': {'object_name': 'UserProfile'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'language': ('django.db.models.fields.CharField', [], {'default': "'fr'", 'max_length': '2'}),
+            'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
+        }
+    }
+
+    complete_apps = ['user']
--- a/src/ldt/ldt/user/models.py	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/user/models.py	Wed Sep 07 17:32:29 2011 +0200
@@ -1,7 +1,8 @@
 from django.contrib import admin
+from django.db import models
+from django.conf import settings
 from django.contrib.auth.models import User, UserManager
 import datetime
-
             
 class Ldt(User):
 #    irigroups = models.ManyToManyField(IriGroup, blank=True)
@@ -18,14 +19,30 @@
     def create_user(self, username, email, password=None):
         "Creates and saves a User with the given username, e-mail and password."
         now = datetime.datetime.now()
-        user = Ldt(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now)
+        new_user = Ldt(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now)
         if password:
-            user.set_password(password)
+            new_user.set_password(password)
         else:
-            user.set_unusable_password()
-        user.save()
-        return user   
+            new_user.set_unusable_password()
+        new_user.save()
+        UserProfile.objects.create(user=new_user)
+        return new_user  
+    
+    
+class UserProfile (models.Model): 
+    user = models.OneToOneField(User)
+    language = models.CharField(max_length=2, default='fr')
+    
+    
+def get_or_create_profile(user):
+    try:
+        profile = user.get_profile()
+    except UserProfile.DoesNotExist:
+        profile = UserProfile(user=user)
+        profile.save()
+    return profile
 
+   
 User.objects = LdtManager()
 User.objects.contribute_to_class(User, "objects")
 
--- a/src/ldt/ldt/user/templates/ldt/user/change_email.html	Mon Sep 05 10:39:07 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# form of email address's change #}
-{% load i18n %}
-
-{% block content_title %}{% trans "Modification de l'adresse émail" %}{% endblock %}
-{% block js_declaration %}{{ block.super }}
-    <script type="text/javascript">
-        $(document).ready(function() {
-            $("#change_email").validate();
-        });
-    </script>
-{% endblock %}
-
-{% block css_import %}
-{{ block.super }}
-    <style type="text/css">
-        label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
-    </style>
-{% endblock %}
-
-{% block content %}
-{{ block.super }}
-{% if form %}
-<p>{% trans "Please enter your new e-mail twice so we can verify you typed it in correctly." %}. {% trans "Your actual email address is" %} : <b>{{ user.email }}</b>.</p>
-<form action="" method="POST" id="change_email">
-{% csrf_token %}
-    <table>
-       <tr>
-            <td>
-                <label for="id_email1">{% trans "email" %}</label>
-            </td>
-            <td>
-                <input id="id_email1" type="text" maxlength="75" name="email1" class="required email"/>
-            </td>
-            <td>{{form.email1.errors}}</td>
-        <tr>
-        </tr>
-            <td>
-                <label for="id_email2">{% trans "Confirmation de l'adresse émail" %}</label>
-            </td>
-            <td>
-                 <input id="id_email2" type="text" maxlength="75" name="email2" class="required email"/>
-            </td>
-            <td>{{form.email1.errors}}</td>
-        </tr>
-        <tr><th></th><td><input type="submit" class="button" name="submit" value="{% trans 'change my e-mail' %}" /></td></tr>
-    </table>
-</form>
-{% else %}
-<p>{% trans "Your new email address has been saved." %}</p>
-{% endif %}
-{% endblock%}
--- a/src/ldt/ldt/user/templates/ldt/user/change_language.html	Mon Sep 05 10:39:07 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# form of language's change #}
-{% load i18n %}
-
-{% block content_title %}{% trans "Language change" %} {% endblock %}
-
-{% block css_import %}
-{{ block.super }}
-    <style type="text/css">
-        label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
-    </style>
-{% endblock %}
-
-{% block content %}
-{{ block.super }}
-<p>{% trans "Please change the language" %}</p>
-<form action="{{ url_change_language }}" method="post">
-	{% csrf_token %}
-	<input name="next" type="hidden" value="" />
-	<label >{% trans "Language" %}&nbsp;: </label>
-	<select name="language"  onchange="submit()">
-	{% for lang in LANGUAGES %}
-		<option value="{{ lang.0 }}"{% ifequal lang.0 LANGUAGE_CODE %} selected="selected"{% endifequal %}>{% trans lang.1 %}</option>
-	{% endfor %}    
-	</select>        
-</form>
-{% endblock%}
--- a/src/ldt/ldt/user/templates/ldt/user/change_name.html	Mon Sep 05 10:39:07 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{% extends "ldt/user/user_base.html" %}
-{# form of name's change #}
-{% load i18n %}
-
-{% block content_title %}{% trans "Name change" %} {% endblock %}
-
-{% block css_import %}
-{{ block.super }}
-    <style type="text/css">
-        label.error { float: none; color: red; padding-left: .5em; vertical-align: middle; }
-    </style>
-{% endblock %}
-
-{% block content %}
-{{ block.super }}
-{% if form %}
-<p>{% trans "Please change your name" %}</p>
-<form action="" method="POST" id="change_name">
-{% csrf_token %}
-    <table>
-       <tr>
-            <td>
-                <label for="id_first_name">{% trans "first name" %}</label>
-            </td>
-            <td>
-                <input id="id_first_name" type="text" maxlength="30" name="first_name" value="{{ user.first_name }}"/>
-            </td>
-        <tr>
-        </tr>
-            <td>
-                <label for="id_last_name">{% trans "name" %}</label>
-            </td> 
-            <td>
-                 <input id="id_last_name" type="text" maxlength="30" name="last_name" value="{{ user.last_name }}"/>
-            </td>
-        </tr>
-        <tr><th></th><td><input type="submit" class="button" name="submit" value="{% trans "Name change" %}" /></td></tr>
-    </table>
-</form>
-{% else %}
-<p>{% trans "Your name has been modified" %}</p>
-{% endif %}
-{% endblock%}
--- a/src/ldt/ldt/user/templates/ldt/user/change_profile.html	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/user/templates/ldt/user/change_profile.html	Wed Sep 07 17:32:29 2011 +0200
@@ -1,67 +1,67 @@
-{% extends "ldt/user/user_change.html" %}
+{% extends "ldt/user/user_base.html" %}
 {# form of password change #}
 
 {% load i18n %}
 {% block css_import %}
+	{{ block.super }}
+    <style type="text/css">
+    
+  	.leftcolumn {
+   		width: 30%;
+   		text-align: right;
+   	}
+   	
+   	#profile_forms input[type="text"], #profile_forms input[type="password"], select {
+   		width: 250px;
+   	}
+   	   	
+	</style>
+{% endblock %}
 
+{% block content %}
 {{ block.super }}
 
-<script type="text/javascript">
-	function isValidForm () {
-		var display = display_error_if_different("#id_email1", "#id_email2", "#emailsdontmatch");
-		var first_name = is_valid_name ("#id_first_name", "#firstnameincorrect");
-		var last_name = is_valid_name ("#id_last_name", "#lastnameincorrect");
-		var email1 = is_valid_email ("#id_email1", "#incorrectemail1");
-		var email2 = is_valid_email ("#id_email2", "#incorrectemail2");
-		
-		return display && first_name && last_name && email1 && email2;
-	}
-
-	$(document).ready(function () {
-			$(".responseerror").show();
-		
-			$("input").keyup(function () {
-				if (isValidForm()) {
-					$("input[type=submit]").removeAttr('disabled');
-				} else {
-					$("input[type=submit]").attr('disabled', 'disabled');
-				}				
-			});
-	});
-</script>
-
-{% endblock %}
-{% block content %}
-
-{{ block.super }}
-
-{% if not form %}
-{%trans "Your profile has been updated" %}
+<div id="profile_forms">
+{% if msg %}
+<div class="success" style="left:50%; text-align: center;">{{ msg }}</div>
 {% endif %}
-<form method="post" action="">
+<form method="post" action="{% url ldt.user.views.profile %}">
 {% csrf_token %}
 	<table>
 		<tr>
             <td class="leftcolumn">
-                <label for="id_username">{% trans "user name" %}</label>
+                <label for="id_username">{% trans "Username" %}</label>
             </td>
             <td>
                 <input id="id_username" type="text" maxlength="30" name="username" value="{{ user.username }}"/>
-            	{% for error in form.username.errors %}
-            	<span class="error responseerror">
-            		{{ error }}            		
-            	</span>
-            	{% endfor %}
+                {% for error in profile_form.errors.username %}
+                <span class="error">{{ error}}</span>                
+                {% endfor %}
             </td>
         </tr>
 		<tr>
             <td class="leftcolumn"> 
-                <label for="id_first_name">{% trans "first name" %}</label>
+                <label for="id_first_name">{% trans "First name" %}</label>
             </td>
             <td>
                 <input id="id_first_name" type="text" maxlength="30" name="first_name" value="{{ user.first_name }}"/>
-            	<span id="firstnameincorrect" class="error">{% trans "Please use only letters, blanks or dashes" %}</span>
-            	{% for error in form.first_name.errors %}
+            </td>
+        </tr>
+        <tr>
+            <td class="leftcolumn">
+                <label for="id_last_name">{% trans "Name" %}</label>
+            </td> 
+            <td>
+                <input id="id_last_name" type="text" maxlength="30" name="last_name" value="{{ user.last_name }}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="leftcolumn">
+                <label for="id_email">{% trans "Email" %}</label>
+            </td>
+            <td>
+                <input id="id_email" type="text" maxlength="75" name="email" class="required email" value="{{ user.email }}"/>
+            	{% for error in profile_form.email.errors %}
             	<span class="error">
             		{{ error }}            		
             	</span>
@@ -69,52 +69,75 @@
             </td>
         </tr>
         <tr>
-            <td class="leftcolumn">
-                <label for="id_last_name">{% trans "name" %}</label>
-            </td> 
-            <td>
-                <input id="id_last_name" type="text" maxlength="30" name="last_name" value="{{ user.last_name }}"/>
-            	<span id="lastnameincorrect" class="error">{% trans "Please use only letters, blanks or dashes" %}</span>
-           		{% for error in form.last_name.errors %}
+	        <td class="leftcolumn">
+	        	<label>{% trans "Language" %}</label>
+	        </td>
+			<td>
+				<select name="language" >
+				{% for lang in LANGUAGES %}
+					<option value="{{ lang.0 }}"{% ifequal lang.0 user_language %} selected="selected" {% endifequal %}>{% trans lang.1 %}</option>
+				{% endfor %}    
+				</select>
+			</td>
+		</tr>
+		<tr>
+        	<td></td>
+        	<td><input type="submit" name="submit_profile" value="{% trans "Profile change" %}" /></td>
+        </tr>       
+    </table>    
+</form>
+
+<form method="post" action="{% url ldt.user.views.password %}">
+{% csrf_token %}
+<table>
+		<tr>
+			<td class="leftcolumn">
+				<label for="id_old_password">{% trans "Password" %}</label>
+			</td>
+			<td>
+				<input type="password" name="old_password" id="id_old_password" />
+           		{% for error in password_form.old_password.errors %}
             	<span class="error">
             		{{ error }}            		
             	</span>
             	{% endfor %}
-            </td>
-        </tr>
-        <tr>
-            <td class="leftcolumn">
-                <label for="id_email1">{% trans "email" %}</label>
-            </td>
-            <td>
-                <input id="id_email1" type="text" maxlength="75" name="email1" class="required email" value="{{ user.email }}"/>
-            	<span id="emailsdontmatch" class="error">{% trans "emails don't match" %}</span>
-            	<span id="incorrectemail1" class="error">{% trans "incorrect email" %}</span>
-            	{% for error in form.email1.errors %}
+			</td>
+		</tr>
+		<tr>
+			<td class="leftcolumn">
+				<label for="id_new_password1">{% trans "New password" %}</label>
+			</td>
+			<td>
+				<input type="password" name="new_password1" id="id_new_password1" />
+				{% for error in password_form.new_password1.errors %}
             	<span class="error">
             		{{ error }}            		
             	</span>
             	{% endfor %}
-            </td>
-        </tr>
-        <tr>
-            <td class="leftcolumn">
-                <label for="id_email2">{% trans "Confirmation de l'adresse émail" %}</label>
-            </td>
-            <td>
-                <input id="id_email2" type="text" maxlength="75" name="email2" class="required email"  value="{{ user.email }}"/>
-            	<span id="incorrectemail2" class="error">{% trans "incorrect email" %}</span>
-            	{% for error in form.email2.errors %}
+			</td>			
+		</tr>
+		<tr>
+			<td class="leftcolumn">
+				<label for="id_new_password2">{% trans "New password confirmation" %}</label>
+			</td>
+			<td>
+				<input type="password" name="new_password2" id="id_new_password2" />
+				{% for error in password_form.new_password2.errors %}
             	<span class="error">
             		{{ error }}            		
             	</span>
             	{% endfor %}
-            </td>
-        </tr>
-        <tr><td></td><td><input type="submit" name="submit_profile" value="{% trans "Profile change" %}" /></td></tr>
-         
+            </td>			
+		</tr>
+        <tr>
+        	<td></td>
+        	<td><input type="submit" name="submit_password" value="{% trans "Password change" %}" /></td>
+        </tr>         
     </table>
 </form>
 
+</div>
+
 {% endblock%}
 
+
--- a/src/ldt/ldt/user/templates/ldt/user/user_base.html	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/user/templates/ldt/user/user_base.html	Wed Sep 07 17:32:29 2011 +0200
@@ -4,8 +4,8 @@
 {% load i18n %}
 
 {% block css_import %}
-{{ block.super }}
-
+	{{ block.super }}
+	<link rel="stylesheet" href="/pf/static/site/ldt//css/workspace.css" type="text/css"/>
 {% endblock %}
 
 
--- a/src/ldt/ldt/user/templates/ldt/user/user_change.html	Mon Sep 05 10:39:07 2011 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-{% extends "ldt/ldt_base.html" %}
-{# this page inherit base html, all pages of ldt inherit this page. #}
-{# all contents are writed in the "iricontent" block  #}
-{% load i18n %}
-
-{% block css_import %}
-{{ block.super }}
-    
-    <style type="text/css">
-    
-    .error {
-    	display: none;
-    }
-   	
-   	.leftcolumn {
-   		width: 40%;
-   		text-align: right;
-   	}
-   	
-   	input {
-   		border-radius: 3px;
-   	}  	   
-   	
-	</style>
-
-<script type="text/javascript">
-
-	function check_valid_email(email) { 
-		var reg = /[A-Z0-9._+]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i;
-		return (reg.exec(email) != null);
-	}
-	
-	function check_valid_name(name) { 
-		var reg = /^[ \w\-éàçèôöü]*$/i;
-		return (reg.exec(name) != null);
-	}
-	
-	function display_error_if_different (input1, input2, errorClass) {
-			if ( $(input1).val() != $(input2).val() ) {
-				$(errorClass).show();
-				return false;				
-			} else {
-				$(errorClass).hide();
-				return true;
-			}
-	}
-		
-	function is_valid_name (input, errorClass)  {
-			if ( !check_valid_name($(input).val()) ) {
-				$(errorClass).show();
-				return false;				
-			} else {
-				$(errorClass).hide();
-				return true;
-			}
-	}
-	
-	function is_valid_email (input, errorClass)  {
-			if ( !check_valid_email($(input).val()) ) {
-				$(errorClass).show();
-				return false;				
-			} else {
-				$(errorClass).hide();
-				return true;
-			}
-	}
-</script>
-{% endblock %}
-
-
-{% block content %}
-
-<ul>
-    <li><a href="{% url ldt.user.views.profile %}" >{% trans "Profile change" %} </a></li>
-    <li><a href="{% url ldt.user.views.password %}">{% trans "Password change" %}</a></li>
-    <li><a href="{% url ldt.user.views.language %}">{% trans "Language change" %}</a></li>    
-</ul>
-
-
-<div id="iri-user-content" class="span-24 last">
-    {% block iricontent %}{% endblock %}
-</div>
-{% endblock%}
--- a/src/ldt/ldt/user/urls.py	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/user/urls.py	Wed Sep 07 17:32:29 2011 +0200
@@ -3,7 +3,6 @@
 urlpatterns = patterns('',
     url(r'^loginAjax/$', 'ldt.user.views.login_ajax'),
     url(r'^profile/$', 'ldt.user.views.profile'),
-    url(r'^language/$', 'ldt.user.views.language'),
     url(r'^password/$', 'ldt.user.views.password'),
     url(r'^logout/', 'ldt.user.views.logout_view'),
 #    url(r'^space/ldt/$', 'ldt.ldt_utils.views.list_ldt'),
--- a/src/ldt/ldt/user/views.py	Mon Sep 05 10:39:07 2011 +0200
+++ b/src/ldt/ldt/user/views.py	Wed Sep 07 17:32:29 2011 +0200
@@ -1,29 +1,65 @@
 from django.contrib.auth import authenticate, login, logout
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.forms import PasswordChangeForm
-from django.core.urlresolvers import reverse
 from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render_to_response
 from django.template import RequestContext, loader
 from django.utils import simplejson
 from django.utils.translation import ugettext as _
-from forms import ProfileChangeForm
-
+from forms import ProfileForm, LanguageChangeForm
+from ldt.user.models import get_or_create_profile
+from django.views.i18n import set_language
 
     
 @login_required   
 def profile(request):
+    msg = ''
+    user_language = get_or_create_profile(request.user).language
+    
     if request.method == "POST":
-        form = ProfileChangeForm(request.user, request.POST)
-        
-        if form.is_valid():
-            form.save()
-            form = None
+        profile_form = ProfileForm(request.user, request.POST, instance=request.user)                 
+        language_form = LanguageChangeForm(request.user, request.POST)
+        password_form = PasswordChangeForm(request.user)
+
+        #assert False, "before : %s " % request.user.username 
+
+        if profile_form.is_valid() and language_form.is_valid():
+            profile_form.save()
+            language_form.save()  
+            set_language(request)
+            msg = _("Your profile has been updated.")
+            user_language = get_or_create_profile(request.user).language
+
+            
+        #assert False, "after: %s " % request.user.username        
+              
     else:
-        form = ProfileChangeForm()
-    return render_to_response('ldt/user/change_profile.html', {'form' : form }, context_instance=RequestContext(request))    
+        language_form = LanguageChangeForm()
+        profile_form = ProfileForm(instance=request.user)
+        password_form = PasswordChangeForm(request.user)
+    return render_to_response('ldt/user/change_profile.html', {'profile_form' : profile_form, 'language_form' : language_form, 'password_form' : password_form, 'user_language' : user_language, 'msg' : msg }, context_instance=RequestContext(request))    
 
     
+@login_required   
+def password(request):
+    msg = ''
+    user_language = get_or_create_profile(request.user).language
+   
+    if request.method == "POST":        
+        password_form = PasswordChangeForm(request.user, request.POST)
+        profile_form = ProfileForm(instance=request.user)
+        language_form = LanguageChangeForm()
+        if password_form.is_valid():
+            password_form.save()
+            msg = _("Your password has been updated.")
+
+    else:
+        language_form = LanguageChangeForm()
+        profile_form = ProfileForm()
+        password_form = PasswordChangeForm(request.user)
+    return render_to_response('ldt/user/change_profile.html', {'profile_form' : profile_form, 'language_form' : language_form, 'password_form' : password_form, 'user_language' : user_language, 'msg' : msg }, context_instance=RequestContext(request))
+
+
 def logout_view(request):
     logout(request)
     return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
@@ -50,18 +86,3 @@
     return render_to_response('ldt/user/login_ajax.html', context_instance=RequestContext(request))
 
                
-@login_required   
-def password(request):
-    if request.method == "POST":
-        form = PasswordChangeForm(request.user, request.POST)
-        if form.is_valid():
-            form.save()
-            form = None
-    else:
-        form = PasswordChangeForm(request.user)
-    return render_to_response('ldt/user/change_password.html', {'form': form, }, context_instance=RequestContext(request))
-
-
-@login_required   
-def language(request):
-    return render_to_response('ldt/user/change_language.html', { 'url_change_language' : reverse('django.views.i18n.set_language')}, context_instance=RequestContext(request))
--- a/web/ldtplatform/settings.py	Mon Sep 05 10:39:07 2011 +0200
+++ b/web/ldtplatform/settings.py	Wed Sep 07 17:32:29 2011 +0200
@@ -87,6 +87,7 @@
     'django.middleware.locale.LocaleMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django_openid_consumer.middleware.OpenIDMiddleware',
+    'ldt.ldt_utils.middleware.userprofile.LanguageMiddleware',
 )
 
 TEMPLATE_CONTEXT_PROCESSORS = ( 
@@ -96,7 +97,7 @@
     "django.core.context_processors.i18n",
     "django.core.context_processors.media",
     "django.core.context_processors.static",
-    "ldt.utils.context_processors.ldtcontext",
+    "ldt.utils.context_processors.ldt_context",
 )
 
 
@@ -107,9 +108,9 @@
     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
     # Always use forward slashes, even on Windows.
     # Don't forget to use absolute paths, not relative paths.
-    os.path.join(os.path.basename(__file__), 'templates'),
+    os.path.join(os.path.basename(__file__), 'templates'),    
 )
-
+    
 FIXTURES_DIRS = (
     os.path.join(os.path.basename(__file__), 'fixtures'),
 )
@@ -139,6 +140,8 @@
     'south',
 )
 
+AUTH_PROFILE_MODULE = 'user.UserProfile'
+
 DECOUPAGE_BLACKLIST = (
      "de_PPP",
 )