Commit 5dd3d9fb authored by Michal Čihař's avatar Michal Čihař

Share user management form validation

We need valid user in the end, so this belongs to the form rather than
to view.
Signed-off-by: default avatarMichal Čihař <michal@cihar.com>
parent 778b9222
......@@ -26,6 +26,8 @@ from django.utils.safestring import mark_safe
from django.utils.encoding import smart_unicode
from django.forms import ValidationError
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.contrib.auth.models import User
from crispy_forms.helper import FormHelper
from weblate.lang.models import Language
from weblate.trans.models.unit import Unit, SEARCH_FILTERS
......@@ -771,3 +773,14 @@ class UserManageForm(forms.Form):
'User needs to already have an active account in Weblate.'
),
)
def clean(self):
try:
self.cleaned_data['user'] = User.objects.get(
Q(username=self.cleaned_data['name']) |
Q(email=self.cleaned_data['name'])
)
except User.DoesNotExist:
raise ValidationError(_('No matching user found!'))
except User.MultipleObjectsReturned:
raise ValidationError(_('More users matched!'))
......@@ -43,7 +43,9 @@ def check_user_form(request, project):
if form.is_valid():
return obj, form
else:
messages.error(request, _('Invalid user specified!'))
for error in form.errors:
for message in form.errors[error]:
messages.error(request, message)
return obj, None
......@@ -86,19 +88,10 @@ def add_user(request, project):
obj, form = check_user_form(request, project)
if form is not None:
try:
user = User.objects.get(
Q(username=form.cleaned_data['name']) |
Q(email=form.cleaned_data['name'])
)
obj.add_user(user)
obj.add_user(form.cleaned_data['user'])
messages.success(
request, _('User has been added to this project.')
)
except User.DoesNotExist:
messages.error(request, _('No matching user found!'))
except User.MultipleObjectsReturned:
messages.error(request, _('More users matched!'))
return redirect_param(
'project',
......@@ -113,18 +106,10 @@ def delete_user(request, project):
obj, form = check_user_form(request, project)
if form is not None:
try:
user = User.objects.get(
username=form.cleaned_data['name']
)
obj.remove_user(user)
obj.remove_user(form.cleaned_data['user'])
messages.success(
request, _('User has been removed from this project.')
)
except User.DoesNotExist:
messages.error(request, _('No matching user found!'))
except User.MultipleObjectsReturned:
messages.error(request, _('More users matched!'))
return redirect_param(
'project',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment