Automated merge with ssh://oshahn.de/openslides

This commit is contained in:
Oskar Hahn 2011-09-05 09:08:20 +02:00
commit 90991f62e7
31 changed files with 326 additions and 280 deletions

View File

@ -176,9 +176,9 @@ class Item(InheritanceCastModel):
class Meta: class Meta:
permissions = ( permissions = (
('can_view_agenda', "Can see the agenda"), ('can_see_agenda', "Can see agenda"),
('can_manage_agenda', "Can manage the agenda and its items"), ('can_manage_agenda', "Can manage agenda"),
('can_see_beamer', "Can see the Beamer"), ('can_see_projector', "Can see projector"),
) )

View File

@ -8,9 +8,9 @@
<ul> <ul>
<li class="{% if request.path == url_itemoverview %}selected{% endif %}"><a href="{% url item_overview %}">{%trans "All items" %}</a></li> <li class="{% if request.path == url_itemoverview %}selected{% endif %}"><a href="{% url item_overview %}">{%trans "All items" %}</a></li>
{% if perms.agenda.can_manage_agenda %} {% if perms.agenda.can_manage_agenda %}
<li class="{% active request '/item/new/' %}"><a href="{% url item_new 'ItemText' %}">{%trans "New item" %}</a></li> <li class="{% active request '/agenda/new/' %}"><a href="{% url item_new 'ItemText' %}">{%trans "New item" %}</a></li>
{% endif %} {% endif %}
{% if perms.agenda.can_see_beamer %} {% if perms.agenda.can_see_projector %}
<li><a href="{% url item_beamer %}"><img src="/static/images/icons/view-presentation.png"> {%trans 'Beamer view' %}</a></li> <li><a href="{% url item_beamer %}"><img src="/static/images/icons/view-presentation.png"> {%trans 'Beamer view' %}</a></li>
{% endif %} {% endif %}
</ul> </ul>

View File

@ -10,13 +10,13 @@
<p>{%trans "Choose item type:" %}</p> <p>{%trans "Choose item type:" %}</p>
<p> <p>
<a href="{% url item_new 'ItemText' %}" <a href="{% url item_new 'ItemText' %}"
{% ifequal request.path '/item/new/ItemText/' %}style='font-size:15px; font-weight:bold;'{% endifequal %} {% ifequal request.path '/agenda/new/ItemText/' %}style='font-size:15px; font-weight:bold;'{% endifequal %}
>{%trans "Item of Text" %}</a> | >{%trans "Item of Text" %}</a> |
<a href="{% url item_new 'ItemApplication' %}" <a href="{% url item_new 'ItemApplication' %}"
{% ifequal request.path '/item/new/ItemApplication/' %}style='font-size:15px; font-weight:bold;'{% endifequal %} {% ifequal request.path '/agenda/new/ItemApplication/' %}style='font-size:15px; font-weight:bold;'{% endifequal %}
>{%trans "Item of Application" %}</a> | >{%trans "Item of Application" %}</a> |
<a href="{% url item_new 'ItemAssignment' %}" <a href="{% url item_new 'ItemAssignment' %}"
{% ifequal request.path '/item/new/ItemAssignment/' %}style='font-size:15px; font-weight:bold;'{% endifequal %} {% ifequal request.path '/agenda/new/ItemAssignment/' %}style='font-size:15px; font-weight:bold;'{% endifequal %}
>{%trans "Item of Election" %}</a> >{%trans "Item of Election" %}</a>
</p> </p>
{% endif %} {% endif %}

View File

@ -37,7 +37,7 @@
{% block content %} {% block content %}
<h1>{% trans "Agenda" %}</h1> <h1>{% trans "Agenda" %}</h1>
{% if items %} {% if items %}
<form action="/item/" method="post">{% csrf_token %} <form action="/agenda/" method="post">{% csrf_token %}
{% if perms.agenda.can_manage_agenda %} {% if perms.agenda.can_manage_agenda %}
<div id="changed-order-message" style="display:none" class="notification warning"> <div id="changed-order-message" style="display:none" class="notification warning">
<em>{% trans "Do you want to save the changed order of agenda items?" %}<br> <em>{% trans "Do you want to save the changed order of agenda items?" %}<br>
@ -45,9 +45,9 @@
<input type="button" onclick="window.location.href='{% url item_overview %}';" value="{%trans 'No' %}"> <input type="button" onclick="window.location.href='{% url item_overview %}';" value="{%trans 'No' %}">
</em> </em>
</div> </div>
<a class="beamer_edit" href="{% url beamer_bigger %}"><img src="/static/images/icons/zoom-in.png"></a> <a class="beamer_edit" href="{% url beamer_smaller %}"><img src="/static/images/icons/zoom-out.png"></a>
<a class="beamer_edit" href="{% url beamer_up %}"><img src="/static/images/icons/go-up.png"></a> <a class="beamer_edit" href="{% url beamer_down %}"><img src="/static/images/icons/go-down.png"></a> <br>
{% endif %} {% endif %}
<a class="beamer_edit" href="{% url beamer_bigger %}">+</a> <a class="beamer_edit" href="{% url beamer_smaller %}">-</a> <br>
<a class="beamer_edit" href="{% url beamer_up %}">+</a> <a class="beamer_edit" href="{% url beamer_down %}">-</a> <br>
<table id="menu-overview" class="agendatable"> <table id="menu-overview" class="agendatable">
<tr> <tr>
<th style="width: 1px;">{% trans "Beamer" %}</th> <th style="width: 1px;">{% trans "Beamer" %}</th>
@ -60,7 +60,7 @@
<th class="tabledrag-hide">{% trans "Weight" %}</th> <th class="tabledrag-hide">{% trans "Weight" %}</th>
{% endif %} {% endif %}
</tr> </tr>
<tr id="item_row_0"{% if overview %} class="activeline"{% else %}{% if perms.agenda.can_manage_agenda %} class="inactiveline"{% endif %}{% endif %}> <tr id="item_row_0" class="topline {% if overview %} activeline {% else %}{% if perms.agenda.can_manage_agenda %} inactiveline {% endif %}{% endif %}">
<td class="select"> <td class="select">
{% if perms.agenda.can_manage_agenda %} {% if perms.agenda.can_manage_agenda %}
<a href="{% url item_activate 0 %}" class="activate_link"> <a href="{% url item_activate 0 %}" class="activate_link">
@ -68,7 +68,7 @@
</a> </a>
{% endif %} {% endif %}
</td> </td>
<td><i>{% trans "Agenda" %} ({{ items|length }} {% trans "items" %}<span id="hiddencount"></span>)</i></td> <td><b>{% trans "Agenda" %} ({{ items|length }} {% trans "items" %}<span id="hiddencount"></span>)</b></td>
{% if perms.agenda.can_manage_agenda %} {% if perms.agenda.can_manage_agenda %}
<td></td> <td></td>
{% endif %} {% endif %}

View File

@ -119,7 +119,7 @@ class ViewTest(TestCase):
response = c.get('/beamer/') response = c.get('/beamer/')
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
response = c.get('/item/%d/' % self.item1.id) response = c.get('/agenda/%d/' % self.item1.id)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['item'], self.item1.cast()) self.assertEqual(response.context['item'], self.item1.cast())
self.assertEqual(response.templates[0].name, 'beamer/ItemText.html') self.assertEqual(response.templates[0].name, 'beamer/ItemText.html')
@ -127,26 +127,26 @@ class ViewTest(TestCase):
def testActivate(self): def testActivate(self):
c = self.adminClient c = self.adminClient
response = c.get('/item/%d/activate/' % self.item1.id) response = c.get('/agenda/%d/activate/' % self.item1.id)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertTrue(self.item1.active) self.assertTrue(self.item1.active)
self.assertFalse(self.item2.active) self.assertFalse(self.item2.active)
self.assertFalse(is_summary()) self.assertFalse(is_summary())
response = c.get('/item/%d/activate/summary/' % self.item2.id) response = c.get('/agenda/%d/activate/summary/' % self.item2.id)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertTrue(self.item2.active) self.assertTrue(self.item2.active)
self.assertFalse(self.item1.active) self.assertFalse(self.item1.active)
self.assertTrue(is_summary()) self.assertTrue(is_summary())
response = c.get('/item/%d/activate/' % 0) response = c.get('/agenda/%d/activate/' % 0)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertFalse(self.item2.active) self.assertFalse(self.item2.active)
self.assertFalse(self.item1.active) self.assertFalse(self.item1.active)
with self.assertRaises(Item.DoesNotExist): with self.assertRaises(Item.DoesNotExist):
get_active_item() get_active_item()
response = c.get('/item/%d/activate/' % 10000) response = c.get('/agenda/%d/activate/' % 10000)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertFalse(self.item2.active) self.assertFalse(self.item2.active)
self.assertFalse(self.item1.active) self.assertFalse(self.item1.active)
@ -154,40 +154,40 @@ class ViewTest(TestCase):
def testClose(self): def testClose(self):
c = self.adminClient c = self.adminClient
response = c.get('/item/%d/close/' % self.item1.id) response = c.get('/agenda/%d/close/' % self.item1.id)
self.refreshItems() self.refreshItems()
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertTrue(Item.objects.get(pk=self.item1.id).closed) self.assertTrue(Item.objects.get(pk=self.item1.id).closed)
response = c.get('/item/%d/open/' % self.item1.id) response = c.get('/agenda/%d/open/' % self.item1.id)
self.refreshItems() self.refreshItems()
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertFalse(self.item1.closed) self.assertFalse(self.item1.closed)
response = c.get('/item/%d/open/' % 1000) response = c.get('/agenda/%d/open/' % 1000)
self.refreshItems() self.refreshItems()
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
def testEdit(self): def testEdit(self):
c = self.adminClient c = self.adminClient
response = c.get('/item/%d/edit/' % self.item1.id) response = c.get('/agenda/%d/edit/' % self.item1.id)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['form'].instance, self.item1.cast()) self.assertEqual(response.context['form'].instance, self.item1.cast())
response = c.get('/item/%d/edit/' % 1000) response = c.get('/agenda/%d/edit/' % 1000)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
data = {'title': 'newitem1', 'text': 'item1-text', 'weight':'0'} data = {'title': 'newitem1', 'text': 'item1-text', 'weight':'0'}
response = c.post('/item/%d/edit/' % self.item1.id, data) response = c.post('/agenda/%d/edit/' % self.item1.id, data)
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.refreshItems() self.refreshItems()
self.assertEqual(self.item1.cast().title, 'newitem1') self.assertEqual(self.item1.cast().title, 'newitem1')
self.assertEqual(self.item1.cast().text, 'item1-text') self.assertEqual(self.item1.cast().text, 'item1-text')
data = {'title': '', 'text': 'item1-text', 'weight': '0'} data = {'title': '', 'text': 'item1-text', 'weight': '0'}
response = c.post('/item/%d/edit/' % self.item1.id, data) response = c.post('/agenda/%d/edit/' % self.item1.id, data)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.refreshItems() self.refreshItems()
self.assertEqual(self.item1.cast().title, 'newitem1') self.assertEqual(self.item1.cast().title, 'newitem1')

View File

@ -18,43 +18,43 @@ urlpatterns = patterns('agenda.views',
url(r'^$', 'overview'), url(r'^$', 'overview'),
url(r'^item/$', 'overview', url(r'^agenda/$', 'overview',
name='item_overview'), name='item_overview'),
url(r'^item/(?P<item_id>\d+)/$', 'view', url(r'^agenda/(?P<item_id>\d+)/$', 'view',
name='item_view'), name='item_view'),
url(r'^item/(?P<item_id>\d+)/activate/$', 'set_active', url(r'^agenda/(?P<item_id>\d+)/activate/$', 'set_active',
name='item_activate'), name='item_activate'),
url(r'^item/(?P<item_id>\d+)/activate/summary/$', 'set_active', url(r'^agenda/(?P<item_id>\d+)/activate/summary/$', 'set_active',
{'summary': True},\ {'summary': True},\
name='item_activate_summary'), name='item_activate_summary'),
url(r'^item/(?P<item_id>\d+)/close/$', 'set_closed', {'closed': True}, url(r'^agenda/(?P<item_id>\d+)/close/$', 'set_closed', {'closed': True},
name='item_close'), name='item_close'),
url(r'^item/(?P<item_id>\d+)/open/$', 'set_closed', {'closed': False}, url(r'^agenda/(?P<item_id>\d+)/open/$', 'set_closed', {'closed': False},
name='item_open'), name='item_open'),
url(r'^item/(?P<item_id>\d+)/edit/$', 'edit', url(r'^agenda/(?P<item_id>\d+)/edit/$', 'edit',
name='item_edit'), name='item_edit'),
url(r'^item/new/$', 'edit', url(r'^agenda/new/$', 'edit',
name='item_new_default'), name='item_new_default'),
url(r'^item/new/(?P<form>ItemText|ItemApplication|ItemPoll|' url(r'^agenda/new/(?P<form>ItemText|ItemApplication|ItemPoll|'
r'ItemAssignment)/$', 'edit', r'ItemAssignment)/$', 'edit',
name='item_new'), name='item_new'),
url(r'^item/new/(?P<form>ItemText|ItemApplication|ItemPoll|' url(r'^agenda/new/(?P<form>ItemText|ItemApplication|ItemPoll|'
r'ItemAssignment)/(?P<default>\d+)/$', 'edit', r'ItemAssignment)/(?P<default>\d+)/$', 'edit',
name='item_new_default'), name='item_new_default'),
url(r'^item/(?P<item_id>\d+)/del/$', 'delete', url(r'^agenda/(?P<item_id>\d+)/del/$', 'delete',
name='item_delete'), name='item_delete'),
url(r'^item/print/$', 'print_agenda', url(r'^agenda/print/$', 'print_agenda',
name='print_agenda'), name='print_agenda'),
url(r'^beamer/bigger$', 'beamer_edit', {'direction': 'bigger'}, name='beamer_bigger'), url(r'^beamer/bigger$', 'beamer_edit', {'direction': 'bigger'}, name='beamer_bigger'),

View File

@ -47,7 +47,7 @@ def view(request, item_id):
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@permission_required('agenda.can_see_beamer') @permission_required('agenda.can_see_projector')
def beamer(request): def beamer(request):
""" """
Shows a active Slide. Shows a active Slide.
@ -126,11 +126,10 @@ def assignment_votes(item):
else: else:
tmplist.append("-") tmplist.append("-")
votes.append(tmplist) votes.append(tmplist)
return votes return votes
@permission_required('agenda.can_view_agenda') @permission_required('agenda.can_see_agenda')
@template('agenda/overview.html') @template('agenda/overview.html')
def overview(request): def overview(request):
""" """

View File

@ -396,10 +396,10 @@ class Application(models.Model):
class Meta: class Meta:
permissions = ( permissions = (
('can_view_application', _("Can see applications")), ('can_see_application', "Can see application"),
('can_insert_application', _("Can insert new applications")), ('can_create_application', "Can create application"),
('can_support_application', _("Can support applications")), ('can_support_application', "Can support application"),
('can_manage_application', _("Can manage applications")), ('can_manage_application', "Can manage application"),
) )

View File

@ -6,7 +6,7 @@
<h4>{%trans "Applications" %}</h4> <h4>{%trans "Applications" %}</h4>
<ul> <ul>
<li class="{% if request.path == url_applicationoverview %}selected{% endif %}"><a href="{% url application_overview %}">{%trans "All applications" %}</a></li> <li class="{% if request.path == url_applicationoverview %}selected{% endif %}"><a href="{% url application_overview %}">{%trans "All applications" %}</a></li>
{% if perms.application.can_insert_application or perms.application.can_manage_application %} {% if perms.application.can_create_application or perms.application.can_manage_application %}
<li class="{% active request '/application/new' %}"><a href="{% url application_new %}">{%trans "New application" %}</a></li> <li class="{% active request '/application/new' %}"><a href="{% url application_new %}">{%trans "New application" %}</a></li>
{% endif %} {% endif %}
<li><a href="{% url print_applications %}"><img src="/static/images/icons/application-pdf.png"> {%trans 'Print all applications' %}</a></li> <li><a href="{% url print_applications %}"><img src="/static/images/icons/application-pdf.png"> {%trans 'Print all applications' %}</a></li>

View File

@ -29,7 +29,7 @@
<th><a href="?sort=number{% if 'number' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Number" %}</a></th> <th><a href="?sort=number{% if 'number' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Number" %}</a></th>
<th><a href="?sort=aversion__title{% if 'aversion__title' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Application title" %}</a></th> <th><a href="?sort=aversion__title{% if 'aversion__title' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Application title" %}</a></th>
{% if min_supporters > 0 %} {% if min_supporters > 0 %}
<th><a href="?sort=supporter{% if 'supporter' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Number of supporters" %}*</a></th> <th><a href="?sort=supporter{% if 'supporter' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Number of supporters" %}</a></th>
{% endif %} {% endif %}
<th><a href="?sort=status{% if 'status' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Status" %}</a></th> <th><a href="?sort=status{% if 'status' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Status" %}</a></th>
<th><a href="?sort=submitter{% if 'submitter' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Submitter" %}</a></th> <th><a href="?sort=submitter{% if 'submitter' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Submitter" %}</a></th>

View File

@ -211,7 +211,7 @@
{% else %} {% else %}
<i>[no number]</i> <i>[no number]</i>
{% endif %}</h1> {% endif %}</h1>
{% trans "Revision" %} {{ application.aid }} {% trans "Version" %} {{ application.aid }}
<h2>{{ application.title }}</h2> <h2>{{ application.title }}</h2>
@ -227,11 +227,12 @@
{% if application.versions|length > 1 %} {% if application.versions|length > 1 %}
<h2>{% trans "Revisions" %}:</h2> <h2>{% trans "Version History" %}:</h2>
<table class="table valigntop"> <table class="table valigntop" style="width: auto;">
<tr> <tr>
<th>#</th> <th></th>
<th>{% trans "Version" %}</th>
<th>{% trans "Time" %}</th> <th>{% trans "Time" %}</th>
<th>{% trans "Title" %}</th> <th>{% trans "Title" %}</th>
<th>{% trans "Text" %}</th> <th>{% trans "Text" %}</th>
@ -240,7 +241,7 @@
</tr> </tr>
{% for revision in application.versions %} {% for revision in application.versions %}
<tr class="{% cycle 'odd' '' %}"> <tr class="{% cycle 'odd' '' %}">
<td>{{ revision.aid }} <td style="white-space:nowrap;">
{% if application.status != "pub" %} {% if application.status != "pub" %}
{% if revision == application.permitted %} {% if revision == application.permitted %}
<img title="{%trans 'Version accepted' %}" src="/static/images/icons/task-accepted.png"> <img title="{%trans 'Version accepted' %}" src="/static/images/icons/task-accepted.png">
@ -257,6 +258,7 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
</td> </td>
<td>{{ revision.aid }}</td>
<td><i>{{ revision.time }}</i></td> <td><i>{{ revision.time }}</i></td>
<td> <td>
{% ifchanged %} {% ifchanged %}

View File

@ -27,7 +27,7 @@ from openslides.utils.pdf import print_application, print_application_poll
from openslides.system.api import config_get from openslides.system.api import config_get
@permission_required('application.can_view_application') @permission_required('application.can_see_application')
@template('application/overview.html') @template('application/overview.html')
def overview(request): def overview(request):
""" """
@ -61,7 +61,7 @@ def overview(request):
} }
@permission_required('application.can_view_application') @permission_required('application.can_see_application')
@template('application/view.html') @template('application/view.html')
def view(request, application_id): def view(request, application_id):
""" """
@ -91,8 +91,8 @@ def edit(request, application_id=None):
is_manager = False is_manager = False
if not is_manager \ if not is_manager \
and not request.user.has_perm('application.can_insert_application'): and not request.user.has_perm('application.can_create_application'):
messages.error(request, _("You have not the necessary rights to edit or insert applications.")) messages.error(request, _("You have not the necessary rights to create or edit applications."))
return redirect(reverse('application_overview')) return redirect(reverse('application_overview'))
if application_id is not None: if application_id is not None:
application = Application.objects.get(id=application_id) application = Application.objects.get(id=application_id)
@ -163,7 +163,7 @@ def edit(request, application_id=None):
'application': application, 'application': application,
} }
@permission_required('application.can_manage_application')
@template('application/view.html') @template('application/view.html')
def delete(request, application_id): def delete(request, application_id):
""" """
@ -362,7 +362,6 @@ def view_poll(request, poll_id):
def permit_version(request, aversion_id): def permit_version(request, aversion_id):
aversion = AVersion.objects.get(pk=aversion_id) aversion = AVersion.objects.get(pk=aversion_id)
application = aversion.application application = aversion.application
if request.method == 'POST': if request.method == 'POST':
application.accept_version(aversion) application.accept_version(aversion)
messages.success(request, _("Version <b>%s</b> accepted.") % (aversion.aid)) messages.success(request, _("Version <b>%s</b> accepted.") % (aversion.aid))
@ -374,10 +373,13 @@ def permit_version(request, aversion_id):
@permission_required('application.can_manage_application') @permission_required('application.can_manage_application')
def reject_version(request, aversion_id): def reject_version(request, aversion_id):
aversion = AVersion.objects.get(pk=aversion_id) aversion = AVersion.objects.get(pk=aversion_id)
application = aversion.application application = aversion.application
if application.reject_version(aversion): if request.method == 'POST':
messages.success(request, _("Version rejected") ) if application.reject_version(aversion):
messages.success(request, _("Version <b>%s</b> rejected.") % (aversion.aid))
else:
messages.error(request, _("ERROR by rejecting the version.") )
else: else:
messages.error(request, _("ERROR by rejecting the Version") ) gen_confirm_form(request, _('Do you really want to reject version <b>%s</b>?') % aversion.aid, reverse('application_version_reject', args=[aversion.id]))
return redirect(reverse('application_view', args=[application.id])) return redirect(reverse('application_view', args=[application.id]))

View File

@ -130,9 +130,8 @@ class Assignment(models.Model):
class Meta: class Meta:
permissions = ( permissions = (
('can_view_assignment', "Can see the assignments"), ('can_see_assignment', "Can see assignment"),
('can_nominate_other', "Can nominate another person" ('can_nominate_other', "Can nominate another person"),
" for a election"), ('can_nominate_self', "Can nominate themselves"),
('can_nominate_self', "Can nominate hisself for a election"), ('can_manage_assignment', "Can manage assignment"),
('can_manage_assignment', "Can manage assignments"),
) )

View File

@ -91,7 +91,7 @@
{% for field in form %} {% for field in form %}
<label>{{ field.label }}:</label> <label>{{ field.label }}:</label>
<nobr>{{ field }} <nobr>{{ field }}
{% if perms.participant.can_view_participants and perms.participant.can_manage_participants %} {% if perms.participant.can_see_participant and perms.participant.can_manage_participant %}
<a href="{% url user_new %}"><img src="/static/images/icons/list-add-user.png" title="{% trans 'Add new participant' %}"></a> <a href="{% url user_new %}"><img src="/static/images/icons/list-add-user.png" title="{% trans 'Add new participant' %}"></a>
{% endif %} {% endif %}
</nobr> </nobr>

View File

@ -25,7 +25,7 @@ from utils.pdf import print_assignment_poll
from participant.models import Profile from participant.models import Profile
@permission_required('assignment.can_view_assignment') @permission_required('assignment.can_see_assignment')
@template('assignment/overview.html') @template('assignment/overview.html')
def get_overview(request): def get_overview(request):
query = Assignment.objects query = Assignment.objects
@ -46,7 +46,7 @@ def get_overview(request):
} }
@permission_required('assignment.can_view_assignment') @permission_required('assignment.can_see_assignment')
@template('assignment/view.html') @template('assignment/view.html')
def view(request, assignment_id=None): def view(request, assignment_id=None):
form = None form = None

View File

@ -19,7 +19,7 @@ TEMPLATE_DEBUG = DEBUG
AUTH_PROFILE_MODULE = 'participant.Profile' AUTH_PROFILE_MODULE = 'participant.Profile'
LOGIN_URL = '/login/' LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/item/' LOGIN_REDIRECT_URL = '/agenda/'
ADMINS = ( ADMINS = (
# ('Your Name', 'your_email@domain.com'), # ('Your Name', 'your_email@domain.com'),

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-03 19:22+0200\n" "POT-Creation-Date: 2011-09-04 17:46+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -32,7 +32,7 @@ msgstr "Englisch"
#: application/templates/application/view.html:73 #: application/templates/application/view.html:73
#: assignment/templates/assignment/poll_view.html:15 #: assignment/templates/assignment/poll_view.html:15
#: assignment/templates/assignment/view.html:159 poll/forms.py:45 #: assignment/templates/assignment/view.html:159 poll/forms.py:45
#: utils/pdf.py:328 utils/pdf.py:368 utils/utils.py:35 #: utils/pdf.py:382 utils/pdf.py:424 utils/utils.py:35
msgid "Yes" msgid "Yes"
msgstr "Ja" msgstr "Ja"
@ -47,11 +47,11 @@ msgstr "Ja, mit allen Kindelementen."
#: application/templates/application/view.html:74 #: application/templates/application/view.html:74
#: assignment/templates/assignment/poll_view.html:16 #: assignment/templates/assignment/poll_view.html:16
#: assignment/templates/assignment/view.html:160 poll/forms.py:46 #: assignment/templates/assignment/view.html:160 poll/forms.py:46
#: utils/pdf.py:329 utils/pdf.py:368 utils/utils.py:35 #: utils/pdf.py:383 utils/pdf.py:424 utils/utils.py:35
msgid "No" msgid "No"
msgstr "Nein" msgstr "Nein"
#: agenda/api.py:67 participant/views.py:129 participant/views.py:207 #: agenda/api.py:67 participant/views.py:131 participant/views.py:209
#: utils/utils.py:40 #: utils/utils.py:40
#, python-format #, python-format
msgid "Do you really want to delete <b>%s</b>?" msgid "Do you really want to delete <b>%s</b>?"
@ -62,7 +62,7 @@ msgid "Parent item"
msgstr "Elternelement" msgstr "Elternelement"
#: agenda/models.py:35 application/forms.py:23 #: agenda/models.py:35 application/forms.py:23
#: application/templates/application/view.html:235 #: application/templates/application/view.html:237
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
@ -70,7 +70,7 @@ msgstr "Titel"
msgid "Closed" msgid "Closed"
msgstr "Abgeschlossen" msgstr "Abgeschlossen"
#: agenda/models.py:37 agenda/templates/agenda/overview.html:58 #: agenda/models.py:37 agenda/templates/agenda/overview.html:60
msgid "Weight" msgid "Weight"
msgstr "Gewichtung" msgstr "Gewichtung"
@ -84,80 +84,79 @@ msgid "No Form for itemtype %s"
msgstr "Kein Formular für Eintrag %s" msgstr "Kein Formular für Eintrag %s"
#: agenda/models.py:189 application/forms.py:24 #: agenda/models.py:189 application/forms.py:24
#: application/templates/application/view.html:236 poll/models.py:108 #: application/templates/application/view.html:238 poll/models.py:108
msgid "Text" msgid "Text"
msgstr "Text" msgstr "Text"
#: agenda/models.py:199 agenda/templates/agenda/overview.html:105 #: agenda/models.py:199 agenda/templates/agenda/overview.html:109
#: agenda/templates/beamer/ItemApplication.html:5 #: agenda/templates/beamer/ItemApplication.html:5
#: application/templates/application/edit.html:2 #: application/templates/application/edit.html:2
#: application/templates/application/poll_view.html:8 #: application/templates/application/poll_view.html:8
#: application/templates/application/poll_view.html:16 #: application/templates/application/poll_view.html:16
#: application/templates/application/view.html:2 #: application/templates/application/view.html:2
#: application/templates/application/view.html:208 poll/models.py:23 #: application/templates/application/view.html:208 poll/models.py:23
#: poll/models.py:110 system/templates/system/general.html:13 utils/pdf.py:263 #: poll/models.py:110 system/templates/system/general.html:13 utils/pdf.py:314
#: utils/pdf.py:265 utils/pdf.py:297 utils/pdf.py:305 utils/pdf.py:315 #: utils/pdf.py:316 utils/pdf.py:349 utils/pdf.py:357 utils/pdf.py:368
#: utils/pdf.py:323 #: utils/pdf.py:377
msgid "Application" msgid "Application"
msgstr "Antrag" msgstr "Antrag"
#: agenda/models.py:206 agenda/templates/agenda/overview.html:118 #: agenda/models.py:206 agenda/templates/agenda/overview.html:122
#: agenda/templates/beamer/ItemAssignment.html:4 #: agenda/templates/beamer/ItemAssignment.html:4
#: assignment/templates/assignment/edit.html:2 poll/models.py:24 #: assignment/templates/assignment/edit.html:2 poll/models.py:24
#: utils/pdf.py:346 utils/pdf.py:354 #: utils/pdf.py:401 utils/pdf.py:410
msgid "Election" msgid "Election"
msgstr "Wahl" msgstr "Wahl"
#: agenda/models.py:213 agenda/templates/beamer/ItemApplication.html:20 #: agenda/models.py:213 agenda/templates/beamer/ItemApplication.html:20
#: assignment/templates/assignment/poll_view.html:2 poll/models.py:111 #: assignment/templates/assignment/poll_view.html:2 poll/models.py:111
#: utils/pdf.py:315 #: utils/pdf.py:368
msgid "Poll" msgid "Poll"
msgstr "Abstimmung" msgstr "Abstimmung"
#: agenda/views.py:74 agenda/templates/agenda/base_agenda.html:7 #: agenda/views.py:74 agenda/templates/agenda/base_agenda.html:7
#: agenda/templates/agenda/overview.html:3 #: agenda/templates/agenda/overview.html:3
#: agenda/templates/agenda/overview.html:38 #: agenda/templates/agenda/overview.html:38
#: agenda/templates/agenda/overview.html:67 #: agenda/templates/agenda/overview.html:71
#: agenda/templates/beamer/overview.html:3 #: agenda/templates/beamer/overview.html:3
#: agenda/templates/beamer/overview.html:10 templates/403.html:8 #: agenda/templates/beamer/overview.html:10 templates/base.html:37
#: templates/404.html:8 templates/500.html:8 templates/base.html:48 #: utils/pdf.py:207 utils/pdf.py:212
#: utils/pdf.py:201 utils/pdf.py:206
msgid "Agenda" msgid "Agenda"
msgstr "Tagesordnung" msgstr "Tagesordnung"
#: agenda/views.py:158 agenda/views.py:174 agenda/views.py:197 #: agenda/views.py:174 agenda/views.py:192 agenda/views.py:215
#, python-format #, python-format
msgid "Item ID %d does not exist." msgid "Item ID %d does not exist."
msgstr "Eintrag %d existiert nicht." msgstr "Eintrag %d existiert nicht."
#: agenda/views.py:211 #: agenda/views.py:229
msgid "New item was successfully created." msgid "New item was successfully created."
msgstr "Neuer Eintrag erfolgreich angelegt." msgstr "Neuer Eintrag erfolgreich angelegt."
#: agenda/views.py:213 #: agenda/views.py:231
msgid "Agenda item created" msgid "Agenda item created"
msgstr "Tagesordnungseintrag angelegt" msgstr "Tagesordnungseintrag angelegt"
#: agenda/views.py:215 #: agenda/views.py:233
msgid "Item was successfully modified." msgid "Item was successfully modified."
msgstr "Eintrag wurde erfolgreich geändert." msgstr "Eintrag wurde erfolgreich geändert."
#: agenda/views.py:217 #: agenda/views.py:235
msgid "Agenda item modified" msgid "Agenda item modified"
msgstr "Tagesordnungseintrag geändert" msgstr "Tagesordnungseintrag geändert"
#: agenda/views.py:223 participant/views.py:108 participant/views.py:192 #: agenda/views.py:241 participant/views.py:108 participant/views.py:194
#: participant/views.py:221 participant/views.py:269 system/views.py:31 #: participant/views.py:223 participant/views.py:271 system/views.py:32
#: system/views.py:57 #: system/views.py:59
msgid "Please check the form for errors." msgid "Please check the form for errors."
msgstr "Bitte kontrollieren Sie das Formular nach Fehlern." msgstr "Bitte kontrollieren Sie das Formular nach Fehlern."
#: agenda/views.py:257 #: agenda/views.py:275
#, python-format #, python-format
msgid "Item <b>%s</b> and his children were successfully deleted." msgid "Item <b>%s</b> and his children were successfully deleted."
msgstr "Eintrag <b>%s</b> und seine Kindelemente wurde erfolgreich gelöscht." msgstr "Eintrag <b>%s</b> und seine Kindelemente wurde erfolgreich gelöscht."
#: agenda/views.py:263 #: agenda/views.py:281
#, python-format #, python-format
msgid "Item <b>%s</b> was successfully deleted." msgid "Item <b>%s</b> was successfully deleted."
msgstr "Eintrag <b>%s</b> wurde erfolgreich gelöscht." msgstr "Eintrag <b>%s</b> wurde erfolgreich gelöscht."
@ -176,12 +175,12 @@ msgid "Beamer view"
msgstr "Beameransicht" msgstr "Beameransicht"
#: agenda/templates/agenda/edit.html:2 #: agenda/templates/agenda/edit.html:2
#: agenda/templates/agenda/overview.html:52 #: agenda/templates/agenda/overview.html:54
msgid "Item" msgid "Item"
msgstr "Eintrag" msgstr "Eintrag"
#: agenda/templates/agenda/edit.html:6 #: agenda/templates/agenda/edit.html:6
#: agenda/templates/agenda/overview.html:130 #: agenda/templates/agenda/overview.html:134
msgid "Edit item" msgid "Edit item"
msgstr "Eintrag bearbeiten" msgstr "Eintrag bearbeiten"
@ -243,51 +242,51 @@ msgstr "Abbrechen"
msgid "Do you want to save the changed order of agenda items?" msgid "Do you want to save the changed order of agenda items?"
msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?" msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?"
#: agenda/templates/agenda/overview.html:51 #: agenda/templates/agenda/overview.html:53
msgid "Beamer" msgid "Beamer"
msgstr "Beamer" msgstr "Beamer"
#: agenda/templates/agenda/overview.html:54 #: agenda/templates/agenda/overview.html:56
#: participant/templates/participant/overview.html:23 #: participant/templates/participant/overview.html:23
#: participant/templates/participant/overview.html:45 utils/pdf.py:230 #: participant/templates/participant/overview.html:46 utils/pdf.py:237
msgid "Type" msgid "Type"
msgstr "Typ" msgstr "Typ"
#: agenda/templates/agenda/overview.html:56 #: agenda/templates/agenda/overview.html:58
#: assignment/templates/assignment/overview.html:24 #: assignment/templates/assignment/overview.html:24
#: participant/templates/participant/overview.html:51 #: participant/templates/participant/overview.html:50
msgid "Actions" msgid "Actions"
msgstr "Aktionen" msgstr "Aktionen"
#: agenda/templates/agenda/overview.html:67 #: agenda/templates/agenda/overview.html:71
msgid "items" msgid "items"
msgstr "Einträge" msgstr "Einträge"
#: agenda/templates/agenda/overview.html:73 #: agenda/templates/agenda/overview.html:77
msgid "Print agenda" msgid "Print agenda"
msgstr "Tagesordnung drucken" msgstr "Tagesordnung drucken"
#: agenda/templates/agenda/overview.html:110 #: agenda/templates/agenda/overview.html:114
msgid "Poll of Application" msgid "Poll of Application"
msgstr "Antragsabstimmung" msgstr "Antragsabstimmung"
#: agenda/templates/agenda/overview.html:113 #: agenda/templates/agenda/overview.html:117
msgid "Poll of Election" msgid "Poll of Election"
msgstr "Wahlen" msgstr "Wahlen"
#: agenda/templates/agenda/overview.html:127 #: agenda/templates/agenda/overview.html:131
msgid "Show beamer preview" msgid "Show beamer preview"
msgstr "Beamer-Vorschau anzeigen" msgstr "Beamer-Vorschau anzeigen"
#: agenda/templates/agenda/overview.html:131 #: agenda/templates/agenda/overview.html:135
msgid "Delete item" msgid "Delete item"
msgstr "Eintrag löschen" msgstr "Eintrag löschen"
#: agenda/templates/agenda/overview.html:138 #: agenda/templates/agenda/overview.html:142
msgid "Select item overview" msgid "Select item overview"
msgstr "Wähle Eintragsübersicht" msgstr "Wähle Eintragsübersicht"
#: agenda/templates/agenda/overview.html:158 #: agenda/templates/agenda/overview.html:162
msgid "No items available." msgid "No items available."
msgstr "Keine Einträge vorhanden." msgstr "Keine Einträge vorhanden."
@ -298,8 +297,8 @@ msgstr "Keine Einträge vorhanden."
#: application/templates/application/view.html:34 #: application/templates/application/view.html:34
#: assignment/templates/assignment/overview.html:10 #: assignment/templates/assignment/overview.html:10
#: assignment/templates/assignment/overview.html:22 #: assignment/templates/assignment/overview.html:22
#: assignment/templates/assignment/view.html:8 utils/pdf.py:280 #: assignment/templates/assignment/view.html:8 utils/pdf.py:331
#: utils/pdf.py:282 #: utils/pdf.py:333
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
@ -312,7 +311,7 @@ msgstr "Abstimmungsergebnis"
#: application/templates/application/view.html:75 #: application/templates/application/view.html:75
#: assignment/templates/assignment/poll_view.html:17 #: assignment/templates/assignment/poll_view.html:17
#: assignment/templates/assignment/view.html:161 poll/forms.py:35 #: assignment/templates/assignment/view.html:161 poll/forms.py:35
#: poll/forms.py:47 utils/pdf.py:330 utils/pdf.py:368 #: poll/forms.py:47 utils/pdf.py:384 utils/pdf.py:424
msgid "Abstention" msgid "Abstention"
msgstr "Enthaltung" msgstr "Enthaltung"
@ -321,8 +320,8 @@ msgid "No poll results available."
msgstr "Keine Abstimmungen vorhanden." msgstr "Keine Abstimmungen vorhanden."
#: agenda/templates/beamer/ItemApplication.html:44 application/forms.py:25 #: agenda/templates/beamer/ItemApplication.html:44 application/forms.py:25
#: application/templates/application/view.html:219 #: application/templates/application/view.html:220
#: application/templates/application/view.html:238 utils/pdf.py:268 #: application/templates/application/view.html:240 utils/pdf.py:319
msgid "Reason" msgid "Reason"
msgstr "Begründung" msgstr "Begründung"
@ -351,7 +350,7 @@ msgstr "Wahlergebnisse"
#: agenda/templates/beamer/ItemAssignment.html:42 #: agenda/templates/beamer/ItemAssignment.html:42
#: assignment/templates/assignment/poll_view.html:6 #: assignment/templates/assignment/poll_view.html:6
#: assignment/templates/assignment/view.html:119 utils/pdf.py:357 #: assignment/templates/assignment/view.html:119 utils/pdf.py:413
msgid "ballot" msgid "ballot"
msgstr "Wahlgang" msgstr "Wahlgang"
@ -405,7 +404,7 @@ msgid "Rejected (not permitted)"
msgstr "Verworfen (nicht zulässig)" msgstr "Verworfen (nicht zulässig)"
#: application/models.py:44 application/templates/application/overview.html:35 #: application/models.py:44 application/templates/application/overview.html:35
#: application/templates/application/view.html:9 utils/pdf.py:270 #: application/templates/application/view.html:9 utils/pdf.py:321
msgid "Submitter" msgid "Submitter"
msgstr "Antragsteller" msgstr "Antragsteller"
@ -413,85 +412,69 @@ msgstr "Antragsteller"
msgid "Supporters" msgid "Supporters"
msgstr "Unterstützer" msgstr "Unterstützer"
#: application/models.py:106 #: application/models.py:105
msgid "Searching for supporters." msgid "Searching for supporters."
msgstr "Auf Unterstützersuche." msgstr "Auf Unterstützersuche."
#: application/models.py:108 #: application/models.py:107
msgid "Not yet permitted." msgid "Not yet permitted."
msgstr "Noch nicht zugelassen." msgstr "Noch nicht zugelassen."
#: application/models.py:110 #: application/models.py:109
msgid "Not yet permitted changes." msgid "Not yet permitted changes."
msgstr "Noch nicht zugelassene Änderungen." msgstr "Noch nicht zugelassene Änderungen."
#: application/models.py:154 #: application/models.py:155
#, python-format #, python-format
msgid "Version %s created" msgid "Version %s created"
msgstr "Version %s erstellt" msgstr "Version %s erstellt"
#: application/models.py:163 #: application/models.py:164
msgid "Supporters removed" msgid "Supporters removed"
msgstr "Unterstützer gelöscht" msgstr "Unterstützer gelöscht"
#: application/models.py:172 #: application/models.py:173
#, python-format #, python-format
msgid "Status reseted to: %s" msgid "Status reseted to: %s"
msgstr "Status zurückgesetzt auf: %s" msgstr "Status zurückgesetzt auf: %s"
#: application/models.py:185 #: application/models.py:186
#, python-format #, python-format
msgid "Supporter: +%s" msgid "Supporter: +%s"
msgstr "Unterstützer: +%s" msgstr "Unterstützer: +%s"
#: application/models.py:195 #: application/models.py:196
#, python-format #, python-format
msgid "Supporter: -%s" msgid "Supporter: -%s"
msgstr "Unterstützer: -%s" msgstr "Unterstützer: -%s"
#: application/models.py:211 #: application/models.py:212
#, python-format #, python-format
msgid "Number set: %s" msgid "Number set: %s"
msgstr "Nummer gesetzt: %s" msgstr "Nummer gesetzt: %s"
#: application/models.py:224 #: application/models.py:225
#, python-format #, python-format
msgid "Version %s permitted" msgid "Version %s permitted"
msgstr "Version %s zugelassen" msgstr "Version %s zugelassen"
#: application/models.py:238 #: application/models.py:239
#, python-format #, python-format
msgid "Version %s not permitted" msgid "Version %s not permitted"
msgstr "Version %s nicht zugelassen" msgstr "Version %s nicht zugelassen"
#: application/models.py:264 #: application/models.py:265
msgid "Status modified" msgid "Status modified"
msgstr "Status geändert" msgstr "Status geändert"
#: application/models.py:375 #: application/models.py:381
msgid "Poll created" msgid "Poll created"
msgstr "Abstimmung erstellt" msgstr "Abstimmung erstellt"
#: application/models.py:393
msgid "Can see applications"
msgstr "Anträge anzeigen"
#: application/models.py:394
msgid "Can insert new applications"
msgstr "Anträge anlegen"
#: application/models.py:395
msgid "Can support applications"
msgstr "Anträge unterstützen"
#: application/models.py:396
msgid "Can manage applications"
msgstr "Anträge verwalten"
#: application/views.py:95 #: application/views.py:95
msgid "You have not the necessary rights to edit or insert applications." msgid "You have not the necessary rights to create or edit applications."
msgstr "" msgstr ""
"Sie haben nicht die nötigen Rechte um Anträge einzureichen oder zu " "Sie haben nicht die nötigen Rechte, um Anträge zu erstellen oder zu "
"bearbeiten." "bearbeiten."
#: application/views.py:100 #: application/views.py:100
@ -581,27 +564,33 @@ msgstr "die %s. Abstimmung"
msgid "Votes are successfully saved." msgid "Votes are successfully saved."
msgstr "Stimmen erfolgreich gespeichert." msgstr "Stimmen erfolgreich gespeichert."
#: application/views.py:366 #: application/views.py:367
msgid "Version accepted" #, python-format
msgstr "Version akzeptiert" msgid "Version <b>%s</b> accepted."
msgstr "Version <b>%s</b> akzeptiert."
#: application/views.py:368 #: application/views.py:369
msgid "ERROR by accepting the Version" #, python-format
msgstr "FEHLER beim Akzeptieren der Version" msgid "Do you really want to permit version <b>%s</b>?"
msgstr "Soll Version <b>%s</b> wirklich zugelassen werden?"
#: application/views.py:377
msgid "Version rejected"
msgstr "Version zurückgewiesen"
#: application/views.py:379 #: application/views.py:379
msgid "ERROR by rejecting the Version" msgid "Version <b>%s</b> rejected."
msgstr "Version <b>%s</b> zurückgewiesen."
#: application/views.py:381
#, fuzzy
msgid "ERROR by rejecting the version."
msgstr "FEHLER beim Zurückweisen der Version" msgstr "FEHLER beim Zurückweisen der Version"
#: application/views.py:383
msgid "Do you really want to reject version <b>%s</b>?"
msgstr "Soll Version <b>%s</b> wirklich zurückgewiesen werden?"
#: application/templates/application/base_application.html:6 #: application/templates/application/base_application.html:6
#: application/templates/application/overview.html:2 #: application/templates/application/overview.html:2
#: application/templates/application/overview.html:6 templates/403.html:12 #: application/templates/application/overview.html:6 templates/base.html:41
#: templates/404.html:12 templates/500.html:12 templates/base.html:52 #: utils/pdf.py:339 utils/pdf.py:346
#: utils/pdf.py:287 utils/pdf.py:294
msgid "Applications" msgid "Applications"
msgstr "Anträge" msgstr "Anträge"
@ -675,7 +664,7 @@ msgstr "Abstimmung drucken"
#: application/templates/application/poll_view.html:16 #: application/templates/application/poll_view.html:16
#: application/templates/application/poll_view.html:19 #: application/templates/application/poll_view.html:19
#: application/templates/application/view.html:65 utils/pdf.py:326 #: application/templates/application/view.html:65 utils/pdf.py:380
msgid "Vote" msgid "Vote"
msgstr "Abstimmung" msgstr "Abstimmung"
@ -812,21 +801,42 @@ msgstr "Nur zur Administration:"
msgid "Reset" msgid "Reset"
msgstr "Zurücksetzen" msgstr "Zurücksetzen"
#: application/templates/application/view.html:229 #: application/templates/application/view.html:214
msgid "Revisions" #: application/templates/application/view.html:235
msgstr "Überarbeitungen" msgid "Version"
msgstr "Version"
#: application/templates/application/view.html:234 #: application/templates/application/view.html:230
msgid "Version History"
msgstr "Versionshistorie"
#: application/templates/application/view.html:236
msgid "Time" msgid "Time"
msgstr "Zeit" msgstr "Zeit"
#: application/templates/application/view.html:259 #: application/templates/application/view.html:247
#: application/templates/application/view.html:266 msgid "Version accepted"
#: application/templates/application/view.html:273 msgstr "Version akzeptiert"
#: application/templates/application/view.html:250
msgid "Accept Version"
msgstr "Zugelassene Version"
#: application/templates/application/view.html:253
msgid "Reject Version"
msgstr "Verion zurückweisen"
#: application/templates/application/view.html:257
msgid "Version rejected"
msgstr "Version zurückgewiesen"
#: application/templates/application/view.html:267
#: application/templates/application/view.html:274
#: application/templates/application/view.html:281
msgid "unchanged" msgid "unchanged"
msgstr "unverändert" msgstr "unverändert"
#: application/templates/application/view.html:282 #: application/templates/application/view.html:290
msgid "Log" msgid "Log"
msgstr "Log" msgstr "Log"
@ -951,8 +961,7 @@ msgstr "gewählt"
#: assignment/templates/assignment/base_assignment.html:11 #: assignment/templates/assignment/base_assignment.html:11
#: assignment/templates/assignment/overview.html:2 #: assignment/templates/assignment/overview.html:2
#: assignment/templates/assignment/overview.html:5 #: assignment/templates/assignment/overview.html:5
#: assignment/templates/assignment/overview.html:20 templates/403.html:16 #: assignment/templates/assignment/overview.html:20 templates/base.html:45
#: templates/404.html:16 templates/500.html:16 templates/base.html:56
msgid "Elections" msgid "Elections"
msgstr "Wahlen" msgstr "Wahlen"
@ -981,7 +990,7 @@ msgstr "Wahl löschen"
msgid "No assignments available." msgid "No assignments available."
msgstr "Keine Wahlen vorhanden." msgstr "Keine Wahlen vorhanden."
#: assignment/templates/assignment/poll_view.html:7 utils/pdf.py:357 #: assignment/templates/assignment/poll_view.html:7 utils/pdf.py:413
msgid "candidate" msgid "candidate"
msgid_plural "candidates" msgid_plural "candidates"
msgstr[0] "Kandidat" msgstr[0] "Kandidat"
@ -1036,15 +1045,15 @@ msgstr "Abstimmung löschen"
msgid "New ballot" msgid "New ballot"
msgstr "Neuer Wahlgang" msgstr "Neuer Wahlgang"
#: participant/forms.py:23 #: participant/forms.py:23 participant/forms.py:34
msgid "First name" msgid "First name"
msgstr "Vorname" msgstr "Vorname"
#: participant/forms.py:24 #: participant/forms.py:24 participant/forms.py:35
msgid "Last name" msgid "Last name"
msgstr "Nachname" msgstr "Nachname"
#: participant/forms.py:64 #: participant/forms.py:72
msgid "CSV File" msgid "CSV File"
msgstr "CSV-Datei" msgstr "CSV-Datei"
@ -1053,12 +1062,10 @@ msgid "Not specified"
msgstr "Nicht angegeben" msgstr "Nicht angegeben"
#: participant/models.py:22 participant/templates/participant/overview.html:11 #: participant/models.py:22 participant/templates/participant/overview.html:11
#: participant/templates/participant/overview.html:60
msgid "Male" msgid "Male"
msgstr "Männlich" msgstr "Männlich"
#: participant/models.py:23 participant/templates/participant/overview.html:12 #: participant/models.py:23 participant/templates/participant/overview.html:12
#: participant/templates/participant/overview.html:62
msgid "Female" msgid "Female"
msgstr "Weiblich" msgstr "Weiblich"
@ -1079,12 +1086,11 @@ msgid "Staff"
msgstr "Mitarbeiter" msgstr "Mitarbeiter"
#: participant/models.py:33 participant/templates/participant/overview.html:10 #: participant/models.py:33 participant/templates/participant/overview.html:10
#: participant/templates/participant/overview.html:43
msgid "Gender" msgid "Gender"
msgstr "Geschlecht" msgstr "Geschlecht"
#: participant/models.py:34 participant/templates/participant/overview.html:16 #: participant/models.py:34 participant/templates/participant/overview.html:16
#: participant/templates/participant/overview.html:44 utils/pdf.py:230 #: participant/templates/participant/overview.html:43 utils/pdf.py:237
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
@ -1093,7 +1099,7 @@ msgid "Typ"
msgstr "Typ" msgstr "Typ"
#: participant/models.py:36 participant/templates/participant/overview.html:30 #: participant/models.py:36 participant/templates/participant/overview.html:30
#: participant/templates/participant/overview.html:46 utils/pdf.py:230 #: participant/templates/participant/overview.html:44 utils/pdf.py:237
msgid "Committee" msgid "Committee"
msgstr "Amt" msgstr "Amt"
@ -1109,54 +1115,54 @@ msgstr "Neuer Teilnehmer wurde erfolgreich angelegt."
msgid "Participant was successfully modified." msgid "Participant was successfully modified."
msgstr "Teilnehmer wurde erfolgreich geändert." msgstr "Teilnehmer wurde erfolgreich geändert."
#: participant/views.py:127 #: participant/views.py:129
#, python-format #, python-format
msgid "Participant <b>%s</b> was successfully deleted." msgid "Participant <b>%s</b> was successfully deleted."
msgstr "Teilnehmer <b>%s</b> wurde erfolgreich gelöscht." msgstr "Teilnehmer <b>%s</b> wurde erfolgreich gelöscht."
#: participant/views.py:139 #: participant/views.py:141
#, python-format #, python-format
msgid "Participant <b>%s</b> is now a normal user." msgid "Participant <b>%s</b> is now a normal user."
msgstr "Teilnehmer <b>%s</b> ist jetzt ein normaler Nutzer." msgstr "Teilnehmer <b>%s</b> ist jetzt ein normaler Nutzer."
#: participant/views.py:143 #: participant/views.py:145
#, python-format #, python-format
msgid "Participant <b>%s</b> is now administrator." msgid "Participant <b>%s</b> is now administrator."
msgstr "Teilnehmer <b>%s</b> ist jetzt ein Administrator." msgstr "Teilnehmer <b>%s</b> ist jetzt ein Administrator."
#: participant/views.py:153 #: participant/views.py:155
#, python-format #, python-format
msgid "Participant <b>%s</b> was successfully deactivated." msgid "Participant <b>%s</b> was successfully deactivated."
msgstr "Teilnehmer <b>%s</b> wurde erfolgreich deaktiviert." msgstr "Teilnehmer <b>%s</b> wurde erfolgreich deaktiviert."
#: participant/views.py:157 #: participant/views.py:159
#, python-format #, python-format
msgid "Participant <b>%s</b> was successfully activated." msgid "Participant <b>%s</b> was successfully activated."
msgstr "Teilnehmer <b>%s</b> wurde erfolgreich aktiviert." msgstr "Teilnehmer <b>%s</b> wurde erfolgreich aktiviert."
#: participant/views.py:184 #: participant/views.py:186
msgid "New group was successfully created." msgid "New group was successfully created."
msgstr "Neue Gruppe wurde erfolgreich angelegt." msgstr "Neue Gruppe wurde erfolgreich angelegt."
#: participant/views.py:186 #: participant/views.py:188
msgid "Group was successfully modified." msgid "Group was successfully modified."
msgstr "Gruppe wurde erfolgreich geändert." msgstr "Gruppe wurde erfolgreich geändert."
#: participant/views.py:205 #: participant/views.py:207
#, python-format #, python-format
msgid "Group <b>%s</b> was successfully deleted." msgid "Group <b>%s</b> was successfully deleted."
msgstr "Gruppe <b>%s</b> wurde erfolgreich gelöscht." msgstr "Gruppe <b>%s</b> wurde erfolgreich gelöscht."
#: participant/views.py:219 #: participant/views.py:221
msgid "User settings successfully saved." msgid "User settings successfully saved."
msgstr "Nutzereinstellungen wurden erfolgreich gespeichert." msgstr "Nutzereinstellungen wurden erfolgreich gespeichert."
#: participant/views.py:267 #: participant/views.py:269
#, python-format #, python-format
msgid "%d new participants were successfully imported." msgid "%d new participants were successfully imported."
msgstr "%d neue Teilnehmer wurden erfolgreich importiert." msgstr "%d neue Teilnehmer wurden erfolgreich importiert."
#: participant/views.py:271 #: participant/views.py:273
msgid "" msgid ""
"Attention: All existing participants will be removed if you import new " "Attention: All existing participants will be removed if you import new "
"participants." "participants."
@ -1164,20 +1170,19 @@ msgstr ""
"Achtung: Alle existierenden Teilnehmer werden gelöscht, wenn Sie neue " "Achtung: Alle existierenden Teilnehmer werden gelöscht, wenn Sie neue "
"Teilnehmer importieren." "Teilnehmer importieren."
#: participant/views.py:290 #: participant/views.py:292
#, python-format #, python-format
msgid "The Password for <b>%s</b> was successfully reset." msgid "The Password for <b>%s</b> was successfully reset."
msgstr "Das Passwort für <b>%s</b> wurde erfolgreich zurückgesetzt." msgstr "Das Passwort für <b>%s</b> wurde erfolgreich zurückgesetzt."
#: participant/views.py:292 #: participant/views.py:294
#, python-format #, python-format
msgid "Do you really want to reset the password for <b>%s</b>?" msgid "Do you really want to reset the password for <b>%s</b>?"
msgstr "Soll das Passwort für <b>%s</b> wirklich zurückgesetzt werden?" msgstr "Soll das Passwort für <b>%s</b> wirklich zurückgesetzt werden?"
#: participant/templates/participant/base_participant.html:6 #: participant/templates/participant/base_participant.html:6
#: participant/templates/participant/overview.html:2 #: participant/templates/participant/overview.html:2
#: participant/templates/participant/overview.html:5 templates/403.html:20 #: participant/templates/participant/overview.html:5 templates/base.html:49
#: templates/404.html:20 templates/500.html:20 templates/base.html:60
msgid "Participants" msgid "Participants"
msgstr "Teilnehmer" msgstr "Teilnehmer"
@ -1204,20 +1209,23 @@ msgid "Print participant list"
msgstr "Teilnehmerliste drucken" msgstr "Teilnehmerliste drucken"
#: participant/templates/participant/base_participant.html:16 #: participant/templates/participant/base_participant.html:16
#: participant/templates/participant/import.html:12 msgid "Import participant"
msgid "Import" msgstr "Teilnehmer importieren"
msgstr "Import"
#: participant/templates/participant/base_participant.html:17 #: participant/templates/participant/base_participant.html:17
msgid "Generate first passwords" msgid "Generate first passwords"
msgstr "Erste Passwörter generieren" msgstr "Erste Passwörter generieren"
#: participant/templates/participant/base_participant.html:18
msgid "Print password list"
msgstr "Passwortliste drucken"
#: participant/templates/participant/edit.html:2 poll/models.py:109 #: participant/templates/participant/edit.html:2 poll/models.py:109
msgid "Participant" msgid "Participant"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: participant/templates/participant/edit.html:6 #: participant/templates/participant/edit.html:6
#: participant/templates/participant/overview.html:74 #: participant/templates/participant/overview.html:66
msgid "Edit participant" msgid "Edit participant"
msgstr "Teilnehmer bearbeiten" msgstr "Teilnehmer bearbeiten"
@ -1255,7 +1263,7 @@ msgid "Delete group"
msgstr "Benutzergruppe löschen" msgstr "Benutzergruppe löschen"
#: participant/templates/participant/group_overview.html:20 #: participant/templates/participant/group_overview.html:20
#: participant/templates/participant/overview.html:91 #: participant/templates/participant/overview.html:83
msgid "No participants available." msgid "No participants available."
msgstr "Keine Teilnehmer vorhanden." msgstr "Keine Teilnehmer vorhanden."
@ -1275,13 +1283,17 @@ msgstr ""
"(Erfordert kommaseparierte Werte: <code>Nachname, Vorname, E-Mail, " "(Erfordert kommaseparierte Werte: <code>Nachname, Vorname, E-Mail, "
"Geschlecht, Gruppe, Typ, Amt</code>)" "Geschlecht, Gruppe, Typ, Amt</code>)"
#: participant/templates/participant/import.html:12
msgid "Import"
msgstr "Importiern"
#: participant/templates/participant/login.html:5 #: participant/templates/participant/login.html:5
#: participant/templates/participant/login.html:13 #: participant/templates/participant/login.html:13
#: participant/templates/participant/login.html:43 templates/base.html:26 #: participant/templates/participant/login.html:43 templates/base.html:26
msgid "Login" msgid "Login"
msgstr "Anmelden" msgstr "Anmelden"
#: participant/templates/participant/login.html:18 templates/base.html:77 #: participant/templates/participant/login.html:18 templates/base.html:66
msgid "Close this notification" msgid "Close this notification"
msgstr "Meldung ausblenden" msgstr "Meldung ausblenden"
@ -1298,15 +1310,15 @@ msgstr "Mitarbeiter"
msgid "guest" msgid "guest"
msgstr "Gast" msgstr "Gast"
#: participant/templates/participant/overview.html:41 utils/pdf.py:230 #: participant/templates/participant/overview.html:41 utils/pdf.py:237
msgid "First Name" msgid "First Name"
msgstr "Vorname" msgstr "Vorname"
#: participant/templates/participant/overview.html:42 utils/pdf.py:230 #: participant/templates/participant/overview.html:42 utils/pdf.py:237
msgid "Last Name" msgid "Last Name"
msgstr "Nachname" msgstr "Nachname"
#: participant/templates/participant/overview.html:47 #: participant/templates/participant/overview.html:47 utils/pdf.py:287
msgid "Username" msgid "Username"
msgstr "Nutzername" msgstr "Nutzername"
@ -1318,23 +1330,23 @@ msgstr "E-Mail"
msgid "Last Login" msgid "Last Login"
msgstr "Letzer Login" msgstr "Letzer Login"
#: participant/templates/participant/overview.html:75 #: participant/templates/participant/overview.html:67
msgid "Delete participant" msgid "Delete participant"
msgstr "Teilnehmer löschen" msgstr "Teilnehmer löschen"
#: participant/templates/participant/overview.html:77 #: participant/templates/participant/overview.html:69
msgid "Participiant is activated. Click to deactivate!" msgid "Participiant is activated. Click to deactivate!"
msgstr "Teilnehmer ist aktiviert. Zum Deaktivieren klicken!" msgstr "Teilnehmer ist aktiviert. Zum Deaktivieren klicken!"
#: participant/templates/participant/overview.html:79 #: participant/templates/participant/overview.html:71
msgid "Participiant is deactivated. Click to activate!" msgid "Participiant is deactivated. Click to activate!"
msgstr "Teilnehmer ist deaktiviert, Zum Aktivieren klicken!" msgstr "Teilnehmer ist deaktiviert, Zum Aktivieren klicken!"
#: participant/templates/participant/overview.html:82 #: participant/templates/participant/overview.html:74
msgid "Administrator. Click to get normal user!" msgid "Administrator. Click to get normal user!"
msgstr "Administrator. Klicken, um normaler Nutzer zu werden!" msgstr "Administrator. Klicken, um normaler Nutzer zu werden!"
#: participant/templates/participant/overview.html:84 #: participant/templates/participant/overview.html:76
msgid "Normal user. Click to get administrator!" msgid "Normal user. Click to get administrator!"
msgstr "Normaler Nutzer. Klicken, um Administrator zu werden!" msgstr "Normaler Nutzer. Klicken, um Administrator zu werden!"
@ -1366,50 +1378,53 @@ msgstr "Mehrheit"
msgid "No options" msgid "No options"
msgstr "Keine Wahlmöglichkeiten" msgstr "Keine Wahlmöglichkeiten"
#: system/forms.py:21 #: system/forms.py:22
msgid "User registration" msgid "System URL"
msgstr "Benutzerregistrierung" msgstr "System URL"
#: system/forms.py:27 #: system/forms.py:23
msgid "Welcome text (for password PDF)"
msgstr "Willkommenstext (für Passwort-PDF-Liste)"
#: system/forms.py:30
msgid "Event name" msgid "Event name"
msgstr "Veranstaltungsname" msgstr "Veranstaltungsname"
#: system/forms.py:28 #: system/forms.py:31
msgid "Short description of event" msgid "Short description of event"
msgstr "Kurzbeschreibung der Veranstaltung" msgstr "Kurzbeschreibung der Veranstaltung"
#: system/forms.py:29 #: system/forms.py:32
msgid "Event date" msgid "Event date"
msgstr "Veranstaltungszeitraum" msgstr "Veranstaltungszeitraum"
#: system/forms.py:30 #: system/forms.py:33
msgid "Event location" msgid "Event location"
msgstr "Veranstaltungsort" msgstr "Veranstaltungsort"
#: system/forms.py:31 #: system/forms.py:34
msgid "Event organizer" msgid "Event organizer"
msgstr "Veranstalter" msgstr "Veranstalter"
#: system/forms.py:37 #: system/forms.py:40
msgid "Number of (minimum) required supporters for a application" msgid "Number of (minimum) required supporters for a application"
msgstr "Mindestanzahl erforderlicher Unterstützer für einen Antrag" msgstr "Mindestanzahl erforderlicher Unterstützer für einen Antrag"
#: system/forms.py:38 #: system/forms.py:41
msgid "Application preamble" msgid "Application preamble"
msgstr "Antragseinleitung" msgstr "Antragseinleitung"
#: system/views.py:29 #: system/views.py:30
msgid "System settings successfully saved." msgid "System settings successfully saved."
msgstr "Systemeinstellungen erfolgreich gespeichert." msgstr "Systemeinstellungen erfolgreich gespeichert."
#: system/views.py:55 #: system/views.py:57
msgid "General settings successfully saved." msgid "General settings successfully saved."
msgstr "Allgemeine Einstellungen erfolgreich gespeichert." msgstr "Allgemeine Einstellungen erfolgreich gespeichert."
#: system/templates/system/base_system.html:7 #: system/templates/system/base_system.html:7
#: system/templates/system/general.html:2 #: system/templates/system/general.html:2
#: system/templates/system/system.html:2 templates/403.html:24 #: system/templates/system/system.html:2 templates/base.html:53
#: templates/404.html:24 templates/500.html:24 templates/base.html:64
msgid "Configuration" msgid "Configuration"
msgstr "Konfiguration" msgstr "Konfiguration"
@ -1418,19 +1433,20 @@ msgstr "Konfiguration"
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
#: system/templates/system/general.html:8 #: system/templates/system/base_system.html:10
msgid "Event"
msgstr "Veranstaltung"
#: system/templates/system/system.html:5 #: system/templates/system/system.html:5
msgid "System" msgid "System"
msgstr "System" msgstr "System"
#: templates/404.html:33 #: system/templates/system/general.html:8
msgid "Event"
msgstr "Veranstaltung"
#: templates/404.html:10
msgid "Page not found." msgid "Page not found."
msgstr "Seite nicht gefunden." msgstr "Seite nicht gefunden."
#: templates/500.html:33 #: templates/500.html:9
msgid "Server Error" msgid "Server Error"
msgstr "Serverfehler" msgstr "Serverfehler"
@ -1450,42 +1466,64 @@ msgstr "Einstellungen"
msgid "Welcome" msgid "Welcome"
msgstr "Willkommen" msgstr "Willkommen"
#: templates/base.html:31 #: utils/pdf.py:170 utils/pdf.py:322
msgid "Language"
msgstr "Sprache"
#: utils/pdf.py:165 utils/pdf.py:271
msgid "%Y-%m-%d %H:%Mh" msgid "%Y-%m-%d %H:%Mh"
msgstr "%d.%m.%Y %H:%Mh" msgstr "%d.%m.%Y %H:%Mh"
#: utils/pdf.py:178 #: utils/pdf.py:183
msgid "Printed" msgid "Printed"
msgstr "Gedruckt am" msgstr "Gedruckt am"
#: utils/pdf.py:188 utils/pdf.py:196 #: utils/pdf.py:193 utils/pdf.py:201
msgid "Page" msgid "Page"
msgstr "Seite" msgstr "Seite"
#: utils/pdf.py:223 #: utils/pdf.py:230
msgid "Participant-list" msgid "Participant-list"
msgstr "Teilnehmerliste" msgstr "Teilnehmerliste"
#: utils/pdf.py:228 #: utils/pdf.py:235
msgid "List of Participants" msgid "List of Participants"
msgstr "Teilnehmerliste" msgstr "Teilnehmerliste"
#: utils/pdf.py:271 #: utils/pdf.py:271
msgid "passwords"
msgstr "Passwörter"
#: utils/pdf.py:284
msgid "Your Account for OpenSlides"
msgstr "Ihr Zugang für OpenSlides"
#: utils/pdf.py:285
msgid "for"
msgstr "für"
#: utils/pdf.py:288
msgid "Password"
msgstr "Passwort"
#: utils/pdf.py:290
msgid "URL"
msgstr "URL"
#: utils/pdf.py:322
msgid "Created" msgid "Created"
msgstr "Erstellt am" msgstr "Erstellt am"
#: utils/pdf.py:275 #: utils/pdf.py:326
msgid "Supporter" msgid "Supporter"
msgstr "Unterstützer" msgstr "Unterstützer"
#: utils/pdf.py:357 #: utils/pdf.py:413
msgid "available posts" msgid "available posts"
msgstr "verfügbare Posten" msgstr "verfügbare Posten"
#: utils/utils.py:72 #: utils/utils.py:72
msgid "Sorry, you have no rights to see this page." msgid "Sorry, you have no rights to see this page."
msgstr "Bedaure, Sie haben keine Berechtigung diese Seite zu sehen." msgstr "Bedaure, Sie haben keine Berechtigung diese Seite zu sehen."
#~ msgid "Revision"
#~ msgstr "Überarbeitungen"
#~ msgid "Revisions"
#~ msgstr "Überarbeitungen"

View File

@ -50,8 +50,8 @@ class Profile(models.Model):
class Meta: class Meta:
permissions = ( permissions = (
('can_view_participants', "Can see the list of participants"), ('can_see_participant', "Can see participant"),
('can_manage_participants', "Can manage the participant list"), ('can_manage_participant', "Can manage participant"),
) )
def set_first_user_passwords(): def set_first_user_passwords():

View File

@ -5,17 +5,17 @@
{% url user_overview as url_useroverview %} {% url user_overview as url_useroverview %}
<h4 class="sectiontitle">{%trans "Participants" %}</h4> <h4 class="sectiontitle">{%trans "Participants" %}</h4>
<ul> <ul>
{% if perms.participant.can_view_participants %} {% if perms.participant.can_see_participant %}
<li class="{% if request.path == url_useroverview %}selected{% endif %}"><a href="{% url user_overview %}">{%trans "All participants" %}</a></li> <li class="{% if request.path == url_useroverview %}selected{% endif %}"><a href="{% url user_overview %}">{%trans "All participants" %}</a></li>
{% endif %} {% endif %}
{% if perms.participant.can_manage_participants %} {% if perms.participant.can_manage_participant %}
<li class="{% active request '/user/new' %}"><a href="{% url user_new %}">{%trans "New participant" %}</a></li> <li class="{% active request '/user/new' %}"><a href="{% url user_new %}">{%trans "New participant" %}</a></li>
<li><a href="{% url user_group_overview %}">{%trans "All user groups" %}</a></li> <li><a href="{% url user_group_overview %}">{%trans "All user groups" %}</a></li>
<li><a href="{% url user_group_new %}">{%trans "New user group" %}</a></li> <li><a href="{% url user_group_new %}">{%trans "New user group" %}</a></li>
<li><a href="{% url user_print %}"><img src="/static/images/icons/application-pdf.png"> {%trans 'Print participant list' %}</a></li> <li><a href="{% url user_print %}"><img src="/static/images/icons/application-pdf.png"> {%trans 'Print participant list' %}</a></li>
<li><a href="{% url user_import %}"> {%trans 'Import' %}</a></li> <li><a href="{% url user_import %}"> {%trans 'Import participant' %}</a></li>
<li><a href="{% url user_gen_passwords %}">{% trans 'Generate first passwords' %}</a></li> <li><a href="{% url user_gen_passwords %}">{% trans 'Generate first passwords' %}</a></li>
<li><a href="{% url print_passwords %}"><img src="/static/images/icons/application-pdf.png">{% trans 'Print password list' %}</a></li> <li><a href="{% url print_passwords %}"><img src="/static/images/icons/application-pdf.png"> {% trans 'Print password list' %}</a></li>
{% endif %} {% endif %}
</ul> </ul>
{% endblock %} {% endblock %}

View File

@ -42,7 +42,7 @@
<th><a href="?sort=last_name{% if 'last_name' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Last Name" %}</a></th> <th><a href="?sort=last_name{% if 'last_name' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Last Name" %}</a></th>
<th><a href="?sort=group{% if 'group' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Group" %}</a></th> <th><a href="?sort=group{% if 'group' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Group" %}</a></th>
<th><a href="?sort=committee{% if 'committee' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Committee" %}</a></th> <th><a href="?sort=committee{% if 'committee' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Committee" %}</a></th>
{% if perms.participant.can_manage_participants %} {% if perms.participant.can_manage_participant %}
<th><a href="?sort=type{% if 'type' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Type" %}</a></th> <th><a href="?sort=type{% if 'type' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Type" %}</a></th>
<th><a href="?sort=username{% if 'username' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Username" %}</a></th> <th><a href="?sort=username{% if 'username' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Username" %}</a></th>
<th><a href="?sort=email{% if 'email' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Email" %}</a></th> <th><a href="?sort=email{% if 'email' in request.GET.sort and 'reverse' not in request.GET %}&reverse{%endif%}">{%trans "Email" %}</a></th>
@ -56,7 +56,7 @@
<td>{{ user.last_name }}</td> <td>{{ user.last_name }}</td>
<td>{{ user.profile.group }}</td> <td>{{ user.profile.group }}</td>
<td>{{ user.profile.committee }}</td> <td>{{ user.profile.committee }}</td>
{% if perms.participant.can_manage_participants %} {% if perms.participant.can_manage_participant %}
<td>{{ user.profile.type }}</td> <td>{{ user.profile.type }}</td>
<td>{{ user.username }}</td> <td>{{ user.username }}</td>
<td>{{ user.email }}</td> <td>{{ user.email }}</td>

View File

@ -30,7 +30,7 @@ from utils.pdf import print_userlist, print_passwords
from django.db.models import Avg, Max, Min, Count from django.db.models import Avg, Max, Min, Count
@permission_required('participant.can_view_participants') @permission_required('participant.can_see_participant')
@template('participant/overview.html') @template('participant/overview.html')
def get_overview(request): def get_overview(request):
query = User.objects query = User.objects
@ -69,7 +69,7 @@ def get_overview(request):
'committees': committees, 'committees': committees,
} }
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('participant/edit.html') @template('participant/edit.html')
def edit(request, user_id=None): def edit(request, user_id=None):
""" """
@ -120,7 +120,7 @@ def edit(request, user_id=None):
'edituser': user, 'edituser': user,
} }
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('confirm.html') @template('confirm.html')
def user_delete(request, user_id): def user_delete(request, user_id):
user = User.objects.get(pk=user_id) user = User.objects.get(pk=user_id)
@ -131,7 +131,7 @@ def user_delete(request, user_id):
gen_confirm_form(request, _('Do you really want to delete <b>%s</b>?') % user, reverse('user_delete', args=[user_id])) gen_confirm_form(request, _('Do you really want to delete <b>%s</b>?') % user, reverse('user_delete', args=[user_id]))
return redirect(reverse('user_overview')) return redirect(reverse('user_overview'))
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('confirm.html') @template('confirm.html')
def user_set_superuser(request, user_id): def user_set_superuser(request, user_id):
user = User.objects.get(pk=user_id) user = User.objects.get(pk=user_id)
@ -145,7 +145,7 @@ def user_set_superuser(request, user_id):
messages.success(request, _('Participant <b>%s</b> is now administrator.') % user) messages.success(request, _('Participant <b>%s</b> is now administrator.') % user)
return redirect(reverse('user_overview')) return redirect(reverse('user_overview'))
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('confirm.html') @template('confirm.html')
def user_set_active(request, user_id): def user_set_active(request, user_id):
user = User.objects.get(pk=user_id) user = User.objects.get(pk=user_id)
@ -159,7 +159,7 @@ def user_set_active(request, user_id):
messages.success(request, _('Participant <b>%s</b> was successfully activated.') % user) messages.success(request, _('Participant <b>%s</b> was successfully activated.') % user)
return redirect(reverse('user_overview')) return redirect(reverse('user_overview'))
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('participant/group_overview.html') @template('participant/group_overview.html')
def get_group_overview(request): def get_group_overview(request):
groups = Group.objects.all() groups = Group.objects.all()
@ -167,7 +167,7 @@ def get_group_overview(request):
'groups': groups, 'groups': groups,
} }
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('participant/group_edit.html') @template('participant/group_edit.html')
def group_edit(request, group_id=None): def group_edit(request, group_id=None):
if group_id is not None: if group_id is not None:
@ -199,7 +199,7 @@ def group_edit(request, group_id=None):
'group': group, 'group': group,
} }
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
def group_delete(request, group_id): def group_delete(request, group_id):
group = Group.objects.get(pk=group_id) group = Group.objects.get(pk=group_id)
if request.method == 'POST': if request.method == 'POST':
@ -231,7 +231,7 @@ def user_settings(request):
'edituser': request.user, 'edituser': request.user,
} }
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
@template('participant/import.html') @template('participant/import.html')
def user_import(request): def user_import(request):
try: try:
@ -277,13 +277,13 @@ def user_import(request):
} }
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
def gen_passwords(request): def gen_passwords(request):
set_first_user_passwords() set_first_user_passwords()
return redirect(reverse('user_overview')) return redirect(reverse('user_overview'))
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
def reset_password(request, user_id): def reset_password(request, user_id):
user = User.objects.get(pk=user_id) user = User.objects.get(pk=user_id)
if request.method == 'POST': if request.method == 'POST':

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

View File

@ -42,7 +42,7 @@ function hideClosedSlides(hide) {
hideLine($(this)); hideLine($(this));
}); });
hidden = $('#menu-overview tr:hidden').size(); hidden = $('#menu-overview tr:hidden').size();
$('#hiddencount').text(' ' + hidden + ' davon verborgen.'); $('#hiddencount').text(', davon ' + hidden + ' verborgen.');
} else { } else {
$('#menu-overview tr').show(); $('#menu-overview tr').show();
$('#hidelink').attr('title','hide'); $('#hidelink').attr('title','hide');

View File

@ -253,6 +253,10 @@ tr.total td {
border-top: 1px solid #333333; border-top: 1px solid #333333;
background-color: #e3e3e3; background-color: #e3e3e3;
} }
tr.topline td {
border-bottom: 1px solid #333333;
background-color: #e3e3e3;
}
/* Links and Images */ /* Links and Images */

View File

@ -29,5 +29,5 @@ class Config(models.Model):
class Meta: class Meta:
permissions = ( permissions = (
('can_manage_system', "Can manage the system"), ('can_manage_system', "Can manage system configuration"),
) )

View File

@ -31,20 +31,20 @@
<div id="mainmenu"> <div id="mainmenu">
{% block mainmenu %} {% block mainmenu %}
<ul> <ul>
{% if perms.agenda.can_view_agenda or perms.agenda.can_manage_agenda %} {% if perms.agenda.can_see_agenda or perms.agenda.can_manage_agenda %}
<li class="{% active request '/item' %} <li class="{% active request '/agenda' %}
{% if request.path == '/'%}selected{% endif %}"> {% if request.path == '/'%}selected{% endif %}">
<a href="{% url item_overview %}" title="">{%trans "Agenda" %}</a></li> <a href="{% url item_overview %}" title="">{%trans "Agenda" %}</a></li>
{% endif %} {% endif %}
{% if perms.application.can_view_application or perms.application.can_insert_application or perms.application.can_support_application or perms.application.can_manage_application %} {% if perms.application.can_see_application or perms.application.can_create_application or perms.application.can_support_application or perms.application.can_manage_application %}
<li class="{% active request '/application' %}"> <li class="{% active request '/application' %}">
<a href="{% url application_overview %}" title="">{%trans "Applications" %}</a></li> <a href="{% url application_overview %}" title="">{%trans "Applications" %}</a></li>
{% endif %} {% endif %}
{% if perms.assignment.can_view_assignment or perms.assignment.can_nominate_other or perms.assignment.can_nominate_self or perms.assignment.can_manage_assignment %} {% if perms.assignment.can_see_assignment or perms.assignment.can_nominate_other or perms.assignment.can_nominate_self or perms.assignment.can_manage_assignment %}
<li class="{% active request '/assignment' %}"> <li class="{% active request '/assignment' %}">
<a href="{% url assignment_overview %}" title="">{%trans "Elections" %}</a></li> <a href="{% url assignment_overview %}" title="">{%trans "Elections" %}</a></li>
{% endif %} {% endif %}
{% if perms.participant.can_view_participants or perms.participant.can_manage_participants %} {% if perms.participant.can_see_participant or perms.participant.can_manage_participant %}
<li class="{% active request '/participant' %}"> <li class="{% active request '/participant' %}">
<a href="{% url user_overview %}" title="">{%trans "Participants" %}</a></li> <a href="{% url user_overview %}" title="">{%trans "Participants" %}</a></li>
{% endif %} {% endif %}

View File

@ -201,7 +201,7 @@ def laterPages(canvas, doc):
canvas.drawString(10*cm, 1*cm, _("Page")+" %s" % doc.page) canvas.drawString(10*cm, 1*cm, _("Page")+" %s" % doc.page)
canvas.restoreState() canvas.restoreState()
@permission_required('agenda.can_view_agenda') @permission_required('agenda.can_see_agenda')
def print_agenda(request): def print_agenda(request):
response = HttpResponse(mimetype='application/pdf') response = HttpResponse(mimetype='application/pdf')
filename = u'filename=%s.pdf;' % _("Agenda") filename = u'filename=%s.pdf;' % _("Agenda")
@ -210,21 +210,23 @@ def print_agenda(request):
story = [Spacer(1,3*cm)] story = [Spacer(1,3*cm)]
doc.title = _("Agenda") doc.title = _("Agenda")
# print item list # print item list
items = children_list(Item.objects.filter(parent=None).order_by('weight')) items = children_list(Item.objects.filter(parent=None).order_by('weight'))
for item in items: for item in items:
if item.hidden is False: if item.hidden is False:
# print all items # print all items"
if item.parents: if item.parents:
story.append(Paragraph(item.title, stylesheet['Subitem'])) space = ""
for p in item.parents:
space += "&nbsp;&nbsp;&nbsp;"
story.append(Paragraph(space+item.title, stylesheet['Subitem']))
else: else:
story.append(Paragraph(item.title, stylesheet['Item'])) story.append(Paragraph(item.title, stylesheet['Item']))
doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages) doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages)
return response return response
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
def print_userlist(request): def print_userlist(request):
response = HttpResponse(mimetype='application/pdf') response = HttpResponse(mimetype='application/pdf')
filename = u'filename=%s.pdf;' % _("Participant-list") filename = u'filename=%s.pdf;' % _("Participant-list")
@ -265,7 +267,7 @@ def print_userlist(request):
doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages) doc.build(story, onFirstPage=firstPage, onLaterPages=laterPages)
return response return response
@permission_required('participant.can_manage_participants') @permission_required('participant.can_manage_participant')
def print_passwords(request): def print_passwords(request):
response = HttpResponse(mimetype='application/pdf') response = HttpResponse(mimetype='application/pdf')
filename = u'filename=%s.pdf;' % _("passwords") filename = u'filename=%s.pdf;' % _("passwords")
@ -281,7 +283,7 @@ def print_passwords(request):
user.get_profile() user.get_profile()
cell = [] cell = []
cell.append(Spacer(0,0.8*cm)) cell.append(Spacer(0,0.8*cm))
cell.append(Paragraph(_("Your Password for OpenSlides"), stylesheet['Ballot_title'])) cell.append(Paragraph(_("Your Account for OpenSlides"), stylesheet['Ballot_title']))
cell.append(Paragraph("%s %s %s" % (_("for"), user.first_name, user.last_name), stylesheet['Ballot_subtitle'])) cell.append(Paragraph("%s %s %s" % (_("for"), user.first_name, user.last_name), stylesheet['Ballot_subtitle']))
cell.append(Spacer(0,0.5*cm)) cell.append(Spacer(0,0.5*cm))
cell.append(Paragraph("%s: %s" % (_("Username"), user.username), stylesheet['Ballot_option'])) cell.append(Paragraph("%s: %s" % (_("Username"), user.username), stylesheet['Ballot_option']))
@ -308,7 +310,7 @@ def print_passwords(request):
doc.build(story) doc.build(story)
return response return response
@permission_required('application.can_view_application') @permission_required('application.can_see_application')
def get_application(application, story): def get_application(application, story):
if application.number is None: if application.number is None:
story.append(Paragraph(_("Application")+" #[-]", stylesheet['Heading1'])) story.append(Paragraph(_("Application")+" #[-]", stylesheet['Heading1']))
@ -333,7 +335,7 @@ def get_application(application, story):
story.append(Paragraph(_("Status")+": %s" % (application.get_status_display()), stylesheet['Italic'])) story.append(Paragraph(_("Status")+": %s" % (application.get_status_display()), stylesheet['Italic']))
return story return story
@permission_required('application.can_view_application') @permission_required('application.can_see_application')
def print_application(request, application_id=None): def print_application(request, application_id=None):
response = HttpResponse(mimetype='application/pdf') response = HttpResponse(mimetype='application/pdf')
filename = u'filename=%s.pdf;' % _("Applications") filename = u'filename=%s.pdf;' % _("Applications")