Browse Source

[enh] Member can update their info

ljf 8 years ago
parent
commit
974963e878
4 changed files with 51 additions and 18 deletions
  1. 13 7
      coin/members/forms.py
  2. 18 8
      coin/members/templates/members/detail.html
  3. 17 3
      coin/members/views.py
  4. 3 0
      coin/settings_base.py

+ 13 - 7
coin/members/forms.py

@@ -39,21 +39,26 @@ class MemberCreationForm(forms.ModelForm):
 
 class MemberChangeForm(forms.ModelForm):
 
-    """
-    This form was inspired from django.contrib.auth.forms.UserChangeForm
-    and adapted to coin specificities
-    """
-    password = ReadOnlyPasswordHashField()
-
     class Meta:
         model = Member
-        fields = '__all__'
+        fields = ['first_name', 'last_name', 'email', 'nickname',
+        'organization_name', 'home_phone_number', 'mobile_phone_number',
+        'address', 'postal_code', 'city', 'country']
 
     def __init__(self, *args, **kwargs):
         super(MemberChangeForm, self).__init__(*args, **kwargs)
         f = self.fields.get('user_permissions', None)
         if f is not None:
             f.queryset = f.queryset.select_related('content_type')
+        instance = getattr(self, 'instance', None)
+        if instance and instance.pk:
+            if instance.type == "natural_person":
+                del self.fields['organization_name']
+            else:
+                del self.fields['first_name']
+                del self.fields['last_name']
+        for fieldname in self.fields:
+            self.fields[fieldname].help_text = None
 
     def clean_password(self):
         # Regardless of what the user provides, return the initial value.
@@ -68,3 +73,4 @@ class MemberChangeForm(forms.ModelForm):
 
 class MemberPasswordResetForm(PasswordResetForm):
     pass
+

+ 18 - 8
coin/members/templates/members/detail.html

@@ -98,14 +98,24 @@
 </div>
 <div class="row">
     <div class="large-12 columns">
-        <p>
-            Pour modifier vos informations personnelles et vos coordonnées, veuillez en faire la demande
-            {% if branding.administrative_email %}
-             par email à <a href="mailto:{{ branding.administrative_email }}">{{ branding.administrative_email }}</a>.
-            {% else %}
-             à l'association.
-            {% endif%}
-        </p>
+        {% if form %}
+            <form method="post" action="">
+                {% csrf_token %}
+                <fieldset class="module aligned wide">
+                {{ form.as_p }}
+                </fieldset>
+                <input type="submit" class="button radius" value="Modifier"/>
+            </form>
+        {% else %}
+            <p>
+                Pour modifier vos informations personnelles et vos coordonnées, veuillez en faire la demande
+                {% if branding.administrative_email %}
+                par email à <a href="mailto:{{ branding.administrative_email }}">{{ branding.administrative_email }}</a>.
+                {% else %}
+                à l'association.
+                {% endif%}
+            </p>
+        {% endif %}
     </div>
 </div>
 

+ 17 - 3
coin/members/views.py

@@ -6,7 +6,7 @@ from django.shortcuts import render_to_response
 from django.contrib.auth.decorators import login_required
 from django.http import Http404
 from django.conf import settings
-
+from forms import MemberChangeForm
 
 @login_required
 def index(request):
@@ -18,9 +18,23 @@ def index(request):
 
 @login_required
 def detail(request):
+
     membership_info_url = settings.MEMBER_MEMBERSHIP_INFO_URL
-    return render_to_response('members/detail.html',
-                              {'membership_info_url': membership_info_url},
+    context={
+        'membership_info_url': membership_info_url,
+    }
+
+    if settings.MEMBER_CAN_EDIT_PROFIL:
+        if request.method == "POST":
+            form = MemberChangeForm(data = request.POST, instance = request.user)
+            if form.is_valid():
+                form.save()
+        else:
+            form = MemberChangeForm(instance = request.user)
+
+        context['form'] = form
+
+    return render_to_response('members/detail.html', context,
                               context_instance=RequestContext(request))
 
 

+ 3 - 0
coin/settings_base.py

@@ -263,3 +263,6 @@ FEEDS = (
     ('ffdn', 'http://www.ffdn.org/fr/rss.xml', 3),
 #    ('isp', 'http://isp.example.com/feed/', 3),
 )
+
+# Member can edit their own data
+MEMBER_CAN_EDIT_PROFIL = False