From afa81021b33bf7482933a7ca4b180baa272b822f Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Wed, 9 Nov 2011 22:11:48 +0100 Subject: [PATCH] Make it possible to add and remove managers from an organisation (from the general interface, not just from /admin/) --- pgweb/core/forms.py | 39 +++++++++++++++++++++++++++++++++++++++ pgweb/core/views.py | 4 +--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/pgweb/core/forms.py b/pgweb/core/forms.py index 295c31bc..366fc006 100644 --- a/pgweb/core/forms.py +++ b/pgweb/core/forms.py @@ -2,12 +2,51 @@ from django import forms from django.forms import ValidationError from models import Organisation +from django.contrib.auth.models import User class OrganisationForm(forms.ModelForm): + remove_manager = forms.ModelMultipleChoiceField(required=False, queryset=None, label="Current manage", help_text="Select one or more managers to remove") + add_manager = forms.EmailField(required=False) + class Meta: model = Organisation exclude = ('lastconfirmed', 'approved', 'managers', ) + def __init__(self, *args, **kwargs): + super(OrganisationForm, self).__init__(*args, **kwargs) + self.fields['remove_manager'].queryset = self.instance.managers.all() + + def clean_add_manager(self): + if self.cleaned_data['add_manager']: + # Something was added as manager - let's make sure the user exists + try: + u = User.objects.get(email=self.cleaned_data['add_manager']) + except User.DoesNotExist: + raise ValidationError("User with email %s not found" % self.cleaned_data['add_manager']) + + return self.cleaned_data['add_manager'] + + def clean_remove_manager(self): + if self.cleaned_data['remove_manager']: + removecount = 0 + for toremove in self.cleaned_data['remove_manager']: + if toremove in self.instance.managers.all(): + removecount += 1 + + if len(self.instance.managers.all()) - removecount <= 0: + raise ValidationError("Cannot remove all managers from an organsation!") + return self.cleaned_data['remove_manager'] + + def save(self, commit=True): + model = super(OrganisationForm, self).save(commit=False) + if self.cleaned_data['add_manager']: + model.managers.add(User.objects.get(email=self.cleaned_data['add_manager'])) + if self.cleaned_data['remove_manager']: + for toremove in self.cleaned_data['remove_manager']: + model.managers.remove(toremove) + + return model + class MergeOrgsForm(forms.Form): merge_into = forms.ModelChoiceField(queryset=Organisation.objects.all()) merge_from = forms.ModelChoiceField(queryset=Organisation.objects.all()) diff --git a/pgweb/core/views.py b/pgweb/core/views.py index 398c6d4b..24c00c15 100644 --- a/pgweb/core/views.py +++ b/pgweb/core/views.py @@ -96,9 +96,7 @@ def fallback(request, url): @ssl_required @login_required def organisationform(request, itemid): - return simple_form(Organisation, itemid, request, OrganisationForm, fixedfields={ - 'managers': (request.user, ), - }) + return simple_form(Organisation, itemid, request, OrganisationForm) # robots.txt def robots(request): -- 2.39.5