e1b149cde3
Changes after some reviews are done. Problematic is still that the JS can not be moved to an extra file because of the template tags in the code.
115 lines
3.8 KiB
Python
115 lines
3.8 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
openslides.participant.forms
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Forms for the participant app.
|
||
|
||
:copyright: 2011–2013 by OpenSlides team, see AUTHORS.
|
||
: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 _ # TODO: Change this in the code
|
||
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_registered_group
|
||
|
||
|
||
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_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')
|
||
|
||
|
||
class UserUpdateForm(UserCreateForm):
|
||
class Meta:
|
||
model = User
|
||
fields = ('username', 'first_name', 'last_name', 'is_active', 'groups',
|
||
'structure_level', 'gender', 'type', 'committee', 'about_me', 'comment',
|
||
'default_password')
|
||
|
||
|
||
class GroupForm(forms.ModelForm, CssClassMixin):
|
||
permissions = LocalizedModelMultipleChoiceField(
|
||
queryset=Permission.objects.all(), label=_("Permissions"),
|
||
required=False)
|
||
users = forms.ModelMultipleChoiceField(
|
||
queryset=User.objects.all(), label=_("Participants"), required=False)
|
||
|
||
def __init__(self, *args, **kwargs):
|
||
# Initial users
|
||
if kwargs.get('instance', None) is not None:
|
||
initial = kwargs.setdefault('initial', {})
|
||
initial['users'] = [django_user.user.pk for django_user in kwargs['instance'].user_set.all()]
|
||
|
||
super(GroupForm, self).__init__(*args, **kwargs)
|
||
|
||
def save(self, commit=True):
|
||
instance = forms.ModelForm.save(self, False)
|
||
|
||
old_save_m2m = self.save_m2m
|
||
|
||
def save_m2m():
|
||
old_save_m2m()
|
||
|
||
instance.user_set.clear()
|
||
for user in self.cleaned_data['users']:
|
||
instance.user_set.add(user)
|
||
self.save_m2m = save_m2m
|
||
|
||
if commit:
|
||
instance.save()
|
||
self.save_m2m()
|
||
|
||
return instance
|
||
|
||
def clean_name(self):
|
||
# 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
|
||
|
||
class Meta:
|
||
model = Group
|
||
|
||
|
||
class UsersettingsForm(forms.ModelForm, CssClassMixin):
|
||
language = forms.ChoiceField(choices=settings.LANGUAGES)
|
||
|
||
class Meta:
|
||
model = User
|
||
fields = ('username', 'first_name', 'last_name', 'gender', 'email', 'committee', 'about_me')
|
||
|
||
|
||
class UserImportForm(forms.Form, CssClassMixin):
|
||
csvfile = forms.FileField(widget=forms.FileInput(attrs={'size': '50'}),
|
||
label=_("CSV File"))
|