OpenSlides/openslides/participant/forms.py

132 lines
4.5 KiB
Python
Raw Normal View History

2011-07-31 10:46:29 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.participant.forms
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Forms for the participant app.
2012-04-25 22:29:19 +02:00
:copyright: 2011, 2012 by OpenSlides team, see AUTHORS.
2011-07-31 10:46:29 +02:00
:license: GNU GPL, see LICENSE for more details.
"""
from django import forms
from django.contrib.auth.models import Permission
from django.utils.translation import ugettext_lazy as _
2013-01-05 15:29:57 +01:00
from django.conf import settings
from openslides.utils.forms import (
CssClassMixin, LocalizedModelMultipleChoiceField)
from openslides.participant.models import User, Group
from openslides.participant.api import get_or_create_registered_group
2012-07-10 13:19:12 +02:00
class UserCreateForm(forms.ModelForm, CssClassMixin):
groups = forms.ModelMultipleChoiceField(
queryset=Group.objects.exclude(name__iexact='anonymous'),
label=_("Groups"), required=False)
def __init__(self, *args, **kwargs):
if kwargs.get('instance', None) is None:
initial = kwargs.setdefault('initial', {})
registered = get_or_create_registered_group()
initial['groups'] = [registered.pk]
super(UserCreateForm, self).__init__(*args, **kwargs)
class Meta:
model = User
fields = ('first_name', 'last_name', 'is_active', 'groups', 'structure_level',
'gender', 'type', 'committee', 'about_me', 'comment', 'default_password')
2011-09-03 17:17:29 +02:00
class UserUpdateForm(UserCreateForm):
2011-07-31 10:46:29 +02:00
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'is_active', 'groups',
'structure_level', 'gender', 'type', 'committee', 'about_me', 'comment',
2012-08-13 14:37:49 +02:00
'default_password')
2011-07-31 10:46:29 +02:00
2011-09-03 17:17:29 +02:00
class GroupForm(forms.ModelForm, CssClassMixin):
permissions = LocalizedModelMultipleChoiceField(
2012-10-30 22:16:43 +01:00
queryset=Permission.objects.all(), label=_("Permissions"),
required=False)
2012-08-11 11:36:55 +02:00
users = forms.ModelMultipleChoiceField(
2012-10-30 22:16:43 +01:00
queryset=User.objects.all(), label=_("Participants"), required=False)
2011-07-31 10:46:29 +02:00
def __init__(self, *args, **kwargs):
2012-08-11 11:36:55 +02:00
# Initial users
if kwargs.get('instance', None) is not None:
2012-08-11 11:36:55 +02:00
initial = kwargs.setdefault('initial', {})
initial['users'] = [django_user.user.pk for django_user in kwargs['instance'].user_set.all()]
2012-08-11 11:36:55 +02:00
super(GroupForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
instance = forms.ModelForm.save(self, False)
old_save_m2m = self.save_m2m
2012-08-11 11:36:55 +02:00
def save_m2m():
old_save_m2m()
2012-08-11 11:36:55 +02:00
instance.user_set.clear()
for user in self.cleaned_data['users']:
instance.user_set.add(user)
2012-08-11 11:36:55 +02:00
self.save_m2m = save_m2m
if commit:
instance.save()
self.save_m2m()
return instance
def clean_name(self):
2012-08-11 11:36:55 +02:00
# Do not allow to change the name "anonymous" or give another group
# this name
data = self.cleaned_data['name']
if self.instance.name.lower() in ['anonymous', 'registered']:
# Editing the anonymous-user
if self.instance.name.lower() != data.lower():
raise forms.ValidationError(
_('You can not edit the name for this group.'))
else:
if data.lower() in ['anonymous', 'registered']:
raise forms.ValidationError(
_('Group name "%s" is reserved for internal use.') % data)
return data
2011-07-31 10:46:29 +02:00
class Meta:
model = Group
2011-07-31 10:46:29 +02:00
2012-04-14 14:31:09 +02:00
class UsersettingsForm(forms.ModelForm, CssClassMixin):
2013-01-05 15:29:57 +01:00
language = forms.ChoiceField(choices=settings.LANGUAGES)
2011-07-31 10:46:29 +02:00
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'gender', 'email', 'committee', 'about_me')
2011-07-31 10:46:29 +02:00
2012-08-15 10:58:29 +02:00
class UserImportForm(forms.Form, CssClassMixin):
csvfile = forms.FileField(widget=forms.FileInput(attrs={'size': '50'}),
label=_("CSV File"))
class ConfigForm(forms.Form, CssClassMixin):
participant_pdf_system_url = forms.CharField(
widget=forms.TextInput(),
required=False,
label=_("System URL"),
help_text=_("Printed in PDF of first time passwords only."))
participant_pdf_welcometext = forms.CharField(
widget=forms.Textarea(),
required=False,
label=_("Welcome text"),
help_text=_("Printed in PDF of first time passwords only."))
participant_sort_users_by_first_name = forms.BooleanField(
required=False,
label=_("Sort participants by first name"),
help_text=_("Disable for sorting by last name"))