diff --git a/openslides/participant/api.py b/openslides/participant/api.py
index 84077a0e4..9fdccc47b 100644
--- a/openslides/participant/api.py
+++ b/openslides/participant/api.py
@@ -21,7 +21,6 @@ from django.contrib.auth.models import User
from django.db import transaction
from openslides.utils import csv_ext
-from openslides.utils.person import get_person
from openslides.participant.models import OpenSlidesUser
@@ -55,6 +54,7 @@ def gen_username(first_name, last_name):
except User.DoesNotExist:
return testname
+
def import_users(csv_file):
error_messages = []
count_success = 0
@@ -68,7 +68,8 @@ def import_users(csv_file):
dialect = csv_ext.patchup(dialect)
csv_file.seek(0)
- for (line_no, line) in enumerate(csv.reader(csv_file, dialect=dialect)):
+ for (line_no, line) in enumerate(csv.reader(csv_file,
+ dialect=dialect)):
if line_no:
try:
(first_name, last_name, gender, category, type, committee, comment) = line[:7]
diff --git a/openslides/participant/forms.py b/openslides/participant/forms.py
index f766c247b..f37a28420 100644
--- a/openslides/participant/forms.py
+++ b/openslides/participant/forms.py
@@ -11,9 +11,8 @@
"""
from django import forms
-from django.contrib.auth.forms import AdminPasswordChangeForm
-from django.contrib.auth.models import User, Group, Permission
-from django.utils.translation import ugettext_lazy as _, ugettext_noop
+from django.contrib.auth.models import Permission
+from django.utils.translation import ugettext_lazy as _
from openslides.utils.forms import (
CssClassMixin, LocalizedModelMultipleChoiceField)
@@ -25,7 +24,8 @@ class UserCreateForm(forms.ModelForm, CssClassMixin):
first_name = forms.CharField(label=_("First name"))
last_name = forms.CharField(label=_("Last name"))
groups = forms.ModelMultipleChoiceField(
- queryset=Group.objects.all(), label=_("User groups"), required=False)
+ queryset=OpenSlidesGroup.objects.all(), label=_("User groups"),
+ required=False)
is_active = forms.BooleanField(
label=_("Active"), required=False, initial=True)
@@ -67,14 +67,13 @@ class GroupForm(forms.ModelForm, CssClassMixin):
_('Group name "%s" is reserved for internal use.') % data)
return data
-
class Meta:
model = OpenSlidesGroup
class UsersettingsForm(forms.ModelForm, CssClassMixin):
class Meta:
- model = User
+ model = OpenSlidesUser
fields = ('username', 'first_name', 'last_name', 'email')
diff --git a/openslides/participant/models.py b/openslides/participant/models.py
index 625a82ec9..3bc597ad8 100644
--- a/openslides/participant/models.py
+++ b/openslides/participant/models.py
@@ -12,7 +12,7 @@
from django.contrib.auth.models import User, Group
from django.db import models
-from django.db.models import Q, signals
+from django.db.models import signals
from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _, ugettext_noop
diff --git a/openslides/participant/tests.py b/openslides/participant/tests.py
index fc76ae0f3..99cfcb009 100644
--- a/openslides/participant/tests.py
+++ b/openslides/participant/tests.py
@@ -12,8 +12,6 @@
from django.test import TestCase
from django.test.client import Client
-from django.contrib.auth.models import User, Group
-from django.db.models.query import EmptyQuerySet
from django.contrib.auth.hashers import check_password
from openslides.utils.person import get_person, Persons
@@ -23,10 +21,11 @@ from openslides.participant.models import OpenSlidesUser, OpenSlidesGroup
class OpenSlidesUserTest(TestCase):
def setUp(self):
- self.user1 = User(first_name=u'Max', last_name=u'Mustermann')
- self.user1.username = gen_username(self.user1.first_name, self.user1.last_name)
- self.user1.save()
- self.openslidesuser1 = self.user1.openslidesuser
+ self.openslidesuser1 = OpenSlidesUser()
+ self.openslidesuser1.first_name = u'Max'
+ self.openslidesuser1.last_name = u'Mustermann'
+ self.openslidesuser1.username = gen_username(
+ self.openslidesuser1.first_name, self.openslidesuser1.last_name)
self.openslidesuser1.firstpassword = gen_password()
self.openslidesuser1.save()
self.user1 = self.openslidesuser1.user
@@ -57,27 +56,17 @@ class OpenSlidesUserTest(TestCase):
self.assertEqual(get_person('openslides_user:1'), self.openslidesuser1)
self.assertEqual(len(Persons(person_prefix='openslides_user')), 1)
- def test_save_name(self):
- self.assertEqual(self.openslidesuser1.first_name, self.user1.first_name)
- self.assertEqual(self.openslidesuser1.last_name, self.user1.last_name)
- self.openslidesuser1.first_name = 'foo'
- self.openslidesuser1.last_name = 'bar'
- self.openslidesuser1.save()
- user1 = User.objects.get(pk=1)
- self.assertEqual(user1.first_name, 'foo')
- self.assertEqual(user1.last_name, 'bar')
- self.assertEqual(user1.get_full_name(), 'foo bar')
-
class OpenSlidesGroupTest(TestCase):
def setUp(self):
- self.group1 = Group.objects.create(name='Test Group')
- self.openslidesgroup1 = OpenSlidesGroup.objects.create(group=self.group1)
+ self.openslidesgroup1 = OpenSlidesGroup.objects.create(name='Test Group')
+ self.group1 = self.openslidesgroup1.group
def test_group_openslidesgroup(self):
self.assertEqual(self.openslidesgroup1.group, self.group1)
def test_person_api(self):
self.assertTrue(hasattr(self.openslidesgroup1, 'person_id'))
- self.assertEqual(self.openslidesgroup1.person_id, 'openslides_group:1')
- self.assertEqual(get_person('openslides_group:1'), self.openslidesgroup1)
+ person_id = "openslides_group:%d" % self.openslidesgroup1.id
+ self.assertEqual(self.openslidesgroup1.person_id, person_id)
+ self.assertEqual(get_person(person_id), self.openslidesgroup1)
diff --git a/openslides/participant/views.py b/openslides/participant/views.py
index 4854c29af..4ee452681 100644
--- a/openslides/participant/views.py
+++ b/openslides/participant/views.py
@@ -13,7 +13,6 @@
# for python 2.5 support
from __future__ import with_statement
-import csv
from urllib import urlencode
try:
@@ -24,36 +23,31 @@ except ImportError: # python <= 2.5 grab it from cgi
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
- SimpleDocTemplate, PageBreak, Paragraph, LongTable, Spacer, Table,
- TableStyle)
+ SimpleDocTemplate, Paragraph, LongTable, Spacer, Table, TableStyle)
-from django.db import transaction
from django.contrib import messages
from django.contrib.auth.decorators import login_required
-from django.contrib.auth.models import User, Group
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth.views import login as django_login
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
-from django.utils.translation import ugettext as _, ungettext, ugettext_lazy
+from django.utils.translation import ugettext as _, ugettext_lazy
-from openslides.utils import csv_ext
from openslides.utils.pdf import stylesheet
from openslides.utils.template import Tab
from openslides.utils.utils import (
- template, permission_required, gen_confirm_form, ajax_request, decodedict,
- encodedict, delete_default_permissions, html_strong)
+ template, decodedict, encodedict, delete_default_permissions, html_strong)
from openslides.utils.views import (
- FormView, PDFView, TemplateView, CreateView, UpdateView, DeleteView,
+ FormView, PDFView, CreateView, UpdateView, DeleteView,
RedirectView, SingleObjectMixin, ListView, QuestionMixin)
from openslides.config.models import config
-from openslides.participant.models import OpenSlidesUser, OpenSlidesGroup
from openslides.participant.api import gen_username, gen_password, import_users
from openslides.participant.forms import (
UserCreateForm, UserUpdateForm, UsersettingsForm,
- UserImportForm, GroupForm, AdminPasswordChangeForm, ConfigForm)
+ UserImportForm, GroupForm, ConfigForm)
+from openslides.participant.models import OpenSlidesUser, OpenSlidesGroup
class Overview(ListView):
@@ -152,7 +146,8 @@ class UserCreateView(CreateView):
apply_url = 'participant_edit'
def manipulate_object(self, form):
- self.object.username = gen_username(form.cleaned_data['first_name'], form.cleaned_data['last_name'])
+ self.object.username = gen_username(form.cleaned_data['first_name'],
+ form.cleaned_data['last_name'])
if not self.object.firstpassword:
self.object.firstpassword = gen_password()
@@ -216,7 +211,7 @@ class ParticipantsListPDF(PDFView):
def append_to_pdf(self, story):
data = [['#', _('Last Name'), _('First Name'), _('Group'), _('Type'),
- _('Committee')]]
+ _('Committee')]]
sort = 'last_name'
counter = 0
for user in OpenSlidesUser.objects.all().order_by(sort):
@@ -227,16 +222,14 @@ class ParticipantsListPDF(PDFView):
Paragraph(user.first_name, stylesheet['Tablecell']),
Paragraph(user.category, stylesheet['Tablecell']),
Paragraph(user.type, stylesheet['Tablecell']),
- Paragraph(user.committee, stylesheet['Tablecell'])
- ])
- t = LongTable(data,
- style=[
- ('VALIGN', (0, 0), (-1, -1), 'TOP'),
- ('LINEABOVE', (0, 0), (-1, 0), 2, colors.black),
- ('LINEABOVE', (0, 1), (-1, 1), 1, colors.black),
- ('LINEBELOW', (0, -1), (-1, -1), 2, colors.black),
- ('ROWBACKGROUNDS', (0, 1), (-1, -1),
- (colors.white, (.9, .9, .9)))])
+ Paragraph(user.committee, stylesheet['Tablecell'])])
+ t = LongTable(data, style=[
+ ('VALIGN', (0, 0), (-1, -1), 'TOP'),
+ ('LINEABOVE', (0, 0), (-1, 0), 2, colors.black),
+ ('LINEABOVE', (0, 1), (-1, 1), 1, colors.black),
+ ('LINEBELOW', (0, -1), (-1, -1), 2, colors.black),
+ ('ROWBACKGROUNDS', (0, 1), (-1, -1),
+ (colors.white, (.9, .9, .9)))])
t._argW[0] = 0.75 * cm
story.append(t)
@@ -250,7 +243,8 @@ class ParticipantsPasswordsPDF(PDFView):
top_space = 0
def get_template(self, buffer):
- return SimpleDocTemplate(buffer, topMargin=-6, bottomMargin=-6,
+ return SimpleDocTemplate(
+ buffer, topMargin=-6, bottomMargin=-6,
leftMargin=0, rightMargin=0, showBoundary=False)
def build_document(self, pdf_document, story):
@@ -270,12 +264,15 @@ class ParticipantsPasswordsPDF(PDFView):
cell.append(Spacer(0, 0.5 * cm))
cell.append(Paragraph(_("User: %s") % (user.username),
stylesheet['Monotype']))
- cell.append(Paragraph(_("Password: %s")
- % (user.firstpassword), stylesheet['Monotype']))
+ cell.append(
+ Paragraph(
+ _("Password: %s")
+ % (user.firstpassword), stylesheet['Monotype']))
cell.append(Spacer(0, 0.5 * cm))
- cell.append(Paragraph(_("URL: %s")
- % (participant_pdf_system_url),
- stylesheet['Ballot_option']))
+ cell.append(
+ Paragraph(
+ _("URL: %s") % (participant_pdf_system_url),
+ stylesheet['Ballot_option']))
cell.append(Spacer(0, 0.5 * cm))
cell2 = []
cell2.append(Spacer(0, 0.8 * cm))
@@ -314,7 +311,9 @@ class UserImportView(FormView):
for message in error_messages:
messages.error(self.request, message)
if success:
- messages.success(self.request, _('%d new participants were successfully imported.') % success)
+ messages.success(
+ self.request,
+ _('%d new participants were successfully imported.') % success)
return super(UserImportView, self).form_valid(form)
@@ -341,7 +340,7 @@ class ResetPasswordView(RedirectView, SingleObjectMixin, QuestionMixin):
if self.get_answer().lower() == 'yes':
self.object.reset_password()
messages.success(request,
- _('The Password for %s was successfully reset.') % self.object)
+ _('The Password for %s was successfully reset.') % html_strong(self.object))
def get_answer_url(self):
return reverse('user_reset_password', args=[self.object.id])
@@ -412,15 +411,15 @@ class Config(FormView):
def get_initial(self):
return {
'participant_pdf_system_url': config['participant_pdf_system_url'],
- 'participant_pdf_welcometext': config['participant_pdf_welcometext']
- }
+ 'participant_pdf_welcometext': config['participant_pdf_welcometext']}
def form_valid(self, form):
- config['participant_pdf_system_url'] = \
- form.cleaned_data['participant_pdf_system_url']
- config['participant_pdf_welcometext'] = \
- form.cleaned_data['participant_pdf_welcometext']
- messages.success(self.request,
+ config['participant_pdf_system_url'] = (
+ form.cleaned_data['participant_pdf_system_url'])
+ config['participant_pdf_welcometext'] = (
+ form.cleaned_data['participant_pdf_welcometext'])
+ messages.success(
+ self.request,
_('Participants settings successfully saved.'))
return super(Config, self).form_valid(form)
@@ -478,10 +477,10 @@ def login(request):
"Installation was successfully! Use %(user)s "
"(password: %(password)s) for first login.
"
"Important: Please change the password after "
- "first login! Otherwise this message still appears for everyone "
- "and could be a security risk.") % {
- 'user': html_strong(admin.username),
- 'password': html_strong(config['admin_password'])}
+ "first login! Otherwise this message still appears for "
+ "everyone and could be a security risk.") % {
+ 'user': html_strong(admin.username),
+ 'password': html_strong(config['admin_password'])}
extra_content['next'] = reverse('password_change')
except User.DoesNotExist:
pass
@@ -496,7 +495,6 @@ def register_tab(request):
return Tab(
title=_('Participants'),
url=reverse('user_overview'),
- permission=request.user.has_perm('participant.can_see_participant')
- or request.user.has_perm('participant.can_manage_participant'),
- selected=selected,
- )
+ permission=request.user.has_perm('participant.can_see_participant') or
+ request.user.has_perm('participant.can_manage_participant'),
+ selected=selected)