Browse Source

Its now possible to change non-protected roles of protected members.

Ralfp 12 years ago
parent
commit
1f061c478b
2 changed files with 17 additions and 9 deletions
  1. 7 8
      misago/users/admin/users/forms.py
  2. 10 1
      misago/users/admin/users/views.py

+ 7 - 8
misago/users/admin/users/forms.py

@@ -37,20 +37,19 @@ class UserForm(Form):
         self.request = kwargs['request']
         self.user = user
         
-        # Sort out protected roles
-        if not self.request.user.is_protected():
-            self.base_fields['roles'] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,queryset=Role.objects.filter(protected__exact=False).order_by('name').all(),error_messages={'required': _("User must have at least one role assigned.")})
-        else:
+        # Roles list
+        if self.request.user.is_god():
             self.base_fields['roles'] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,queryset=Role.objects.order_by('name').all(),error_messages={'required': _("User must have at least one role assigned.")})
+        else:
+            self.base_fields['roles'] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,queryset=Role.objects.filter(protected__exact=False).order_by('name').all(),required=False)
             
-        # Keep non-gods from editing permissions and e-mail addressess of protected members
+        # Keep non-gods from editing protected members sign-in credentials
         if user.is_protected() and not self.request.user.is_god():
             # You can edit your own e-mail all-right
             if user.pk != self.request.user.pk:
                 del self.base_fields['email']
-                del self.layout[1][1][0]
-            del self.base_fields['roles']
-            del self.layout[0][1][3]
+                del self.base_fields['new_password']
+                del self.layout[1]
             
         super(UserForm, self).__init__(*args, **kwargs)
     

+ 10 - 1
misago/users/admin/users/views.py

@@ -103,10 +103,19 @@ class Edit(FormWidget):
     def submit_form(self, request, form, target):
         target.title = form.cleaned_data['title']
         target.rank = form.cleaned_data['rank']
-        if not target.is_protected() or request.user.is_god():
+        
+        # Update user roles
+        if request.user.is_god():
             target.roles.clear()
             for role in form.cleaned_data['roles']:
                 target.roles.add(role)
+        else:
+            for role in target.roles.all():
+                if not role.protected:
+                    target.roles.remove(role)
+            for role in form.cleaned_data['roles']:
+                target.roles.add(role)
+        
         target.save(force_update=True)
         return target, BasicMessage(_('Changes in user\'s "%(name)s" account have been saved.' % {'name': self.original_name}), 'success')