Merge pull request #44 from emanuelschuetze/master

Some fixes for 1.3
This commit is contained in:
Oskar Hahn 2012-11-20 08:38:19 -08:00
commit 9122052ba6
25 changed files with 244 additions and 317 deletions

View File

@ -32,10 +32,11 @@
{% if assignment.active %}activeline{% endif %}"> {% if assignment.active %}activeline{% endif %}">
<td><a href="{% url assignment_view assignment.id %}">{{ assignment }}</a></td> <td><a href="{% url assignment_view assignment.id %}">{{ assignment }}</a></td>
<td> <td>
{{ assignment.posts }} {% trans "posts" %} / {{ assignment.elected|length }} {% trans "elected" %} {% blocktrans with posts=assignment.posts %}posts: {{ posts }}{% endblocktrans %}
{% if assignment.status != 'fin' %} {% if assignment.status != 'fin' %}
/ {{ assignment.candidates|length }} {% trans "candidates" %} | {% blocktrans with candidates=assignment.get_participants|length %}candidates: {{ candidates }}{% endblocktrans %}
{% endif %} {% endif %}
| {% blocktrans with elected=assignment.elected|length %}elected: {{ elected }}{% endblocktrans %}
</td> </td>
<td>{{ assignment.get_status_display }}</td> <td>{{ assignment.get_status_display }}</td>
<td> <td>

View File

@ -33,9 +33,10 @@
<h1>{{ assignment }}</h1> <h1>{{ assignment }}</h1>
<p>{{ assignment.description|linebreaks }}</p> <p>{{ assignment.description|linebreaks }}</p>
{% if assignment.status != "fin" %}
<h3>{% trans "Candidates" %}</h3> <h3>{% trans "Candidates" %}</h3>
<ol> <ol>
{% for person in assignment.candidates %} {% for person in assignment.get_participants %}
<li> <li>
{{ person }} {{ person }}
{% if perms.assignment.can_manage_assignment %} {% if perms.assignment.can_manage_assignment %}
@ -43,6 +44,14 @@
<a href="{% url assignment_delother assignment.id person.person_id %}"><img src="{% static 'images/icons/delete.png' %}" title="{% trans 'Remove candidate' %}"></a> <a href="{% url assignment_delother assignment.id person.person_id %}"><img src="{% static 'images/icons/delete.png' %}" title="{% trans 'Remove candidate' %}"></a>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if person in assignment.elected %}
| <b>{% trans "elected" %}</b>
{% if perms.assignment.can_manage_assignment %}
{% if assignment.status == "sea" or assignment.status == "vot" %}
<a href="{% url assignment_user_not_elected assignment.id person.person_id %}"><img src="{% static 'images/icons/dialog-cancel.png' %}" title="{% trans 'Mark candidate as not elected' %}"></a>
{% endif %}
{% endif %}
{% endif %}
</li> </li>
{% empty %} {% empty %}
<li style="list-style: none outside none;"><i>{% trans "No candidates available." %}</i></li> <li style="list-style: none outside none;"><i>{% trans "No candidates available." %}</i></li>
@ -85,27 +94,11 @@
</p> </p>
{% endif %} {% endif %}
</form> </form>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% endif %}
<h3>{% trans "Elected Candidates" %}</h3> {% if perms.assignment.can_manage_assignments and blocked_candidates and assignment.status != "fin" %}
<ul>
{% for person in assignment.elected %}
<li>
{{ person }}
{% if perms.assignment.can_manage_assignment %}
{% if assignment.status == "sea" or assignment.status == "vot" %}
<a href="{% url assignment_user_not_elected assignment.id person.person_id %}"><img src="{% static 'images/icons/delete.png' %}" title="{% trans 'Remove candidate' %}"></a>
{% endif %}
{% endif %}
</li>
{% empty %}
<li>{% trans "No elected candidates available." %}</li>
{% endfor %}
</ul>
{% if perms.assignment.can_manage_assignments %}
<h3>{% trans "Blocked Candidates" %}</h3> <h3>{% trans "Blocked Candidates" %}</h3>
<ul> <ul>
{% for person in blocked_candidates %} {% for person in blocked_candidates %}
@ -118,20 +111,11 @@
</ul> </ul>
{% endif %} {% endif %}
{% if assignment.status != "sea" %}
<h3>{% trans "Election results" %}</h3> <h3>{% trans "Election results" %}</h3>
{% if polls.exists %} {% if polls.exists %}
<table id="election_table" style="width: auto;"> <table id="election_table" style="width: auto;">
<tr>
<th></th>
{% with ballotnumber=polls.count %}
<th colspan="{{ ballotnumber|add:'1' }}" style="text-align: center;">
{% trans "ballot" %}
</th>
{% endwith %}
</tr>
<tr> <tr>
<th>{% trans "Candidates" %}</th> <th>{% trans "Candidates" %}</th>
{% for poll in polls %} {% for poll in polls %}
@ -161,7 +145,7 @@
</tr> </tr>
{% for candidate, poll_list in vote_results.items %} {% for candidate, poll_list in vote_results.items %}
<tr class="{% cycle 'odd' '' %}"> <tr class="{% cycle 'odd' '' as rowcolors %}">
<td class="candidate"> <td class="candidate">
{% if candidate in assignment.elected %} {% if candidate in assignment.elected %}
{% if perms.assignment.can_manage_assignment %} {% if perms.assignment.can_manage_assignment %}
@ -198,8 +182,7 @@
{% endif %} {% endif %}
</tr> </tr>
{% endfor %} {% endfor %}
<tr class="{% cycle rowcolors %}">
<tr>
<td>{% trans 'Invalid votes' %}</td> <td>{% trans 'Invalid votes' %}</td>
{% for poll in polls %} {% for poll in polls %}
{% if poll.published or perms.assignment.can_manage_assignment %} {% if poll.published or perms.assignment.can_manage_assignment %}
@ -215,7 +198,6 @@
<td></td> <td></td>
{% endif %} {% endif %}
</tr> </tr>
<tr class="total"> <tr class="total">
<td><strong>{% trans 'Votes cast' %}</strong></td> <td><strong>{% trans 'Votes cast' %}</strong></td>
{% for poll in polls %} {% for poll in polls %}
@ -233,11 +215,8 @@
{% endif %} {% endif %}
</tr> </tr>
</table> </table>
{% else %}
{% else %} <i>{% trans "No results available." %}</i>
<i>{% trans "No ballots available." %}</i>
{% if assignment.candidates and perms.assignment.can_manage_assignment and assignment.status == "vot" %} {% if assignment.candidates and perms.assignment.can_manage_assignment and assignment.status == "vot" %}
<p><a href='{% url assignment_gen_poll assignment.id %}'> <p><a href='{% url assignment_gen_poll assignment.id %}'>
<span class="button"> <span class="button">
@ -245,9 +224,7 @@
</span> </span>
</a></p> </a></p>
{% endif %} {% endif %}
{% endif %}
{% endif %} {% endif %}
</div> </div>
{% endblock %} {% endblock %}

View File

@ -62,7 +62,7 @@
</tr> </tr>
{% for candidate, poll_list in vote_results.items %} {% for candidate, poll_list in vote_results.items %}
<tr class="{% cycle 'odd' '' %}"> <tr class="{% cycle 'odd' '' as rowcolors %}">
<td class="candidate{% if candidate in assignment.elected %} elected{% endif %}"> <td class="candidate{% if candidate in assignment.elected %} elected{% endif %}">
{% if candidate in assignment.elected %} {% if candidate in assignment.elected %}
<a class="elected"> <a class="elected">
@ -92,8 +92,7 @@
{% endfor %} {% endfor %}
</tr> </tr>
{% endfor %} {% endfor %}
<tr class="{% cycle rowcolors %}">
<tr>
<td>{% trans 'Invalid votes' %}</td> <td>{% trans 'Invalid votes' %}</td>
{% for poll in polls %} {% for poll in polls %}
<td style="white-space:nowrap;"> <td style="white-space:nowrap;">
@ -105,7 +104,6 @@
{% endfor %} {% endfor %}
</tr> </tr>
<tr class="total"> <tr class="total">
<td> <td>
<strong>{% trans 'Votes cast' %}</strong> <strong>{% trans 'Votes cast' %}</strong>
@ -120,12 +118,6 @@
</td> </td>
{% endfor %} {% endfor %}
</tr> </tr>
</table> </table>
{% elif some_polls_available %}
<i>{% trans "Vote results are not published yet." %}</i>
{% elif assignment.candidates %}
<i>{% trans "No ballots available." %}</i>
{% endif %} {% endif %}
<br>
{% endblock %} {% endblock %}

View File

@ -56,13 +56,13 @@ class GeneralConfigForm(forms.Form, CssClassMixin):
required=False, required=False,
) )
frontpage_title = forms.CharField( welcome_title = forms.CharField(
widget=forms.TextInput(), widget=forms.TextInput(),
label=_("Title"), label=_("Title"),
required=False, required=False,
) )
frontpage_welcometext = forms.CharField( welcome_text = forms.CharField(
widget=forms.Textarea(), widget=forms.Textarea(),
label=_("Welcome text"), label=_("Welcome text"),
required=False, required=False,

View File

@ -86,8 +86,8 @@ def default_config(sender, key, **kwargs):
'event_location': '', 'event_location': '',
'event_organizer': '', 'event_organizer': '',
'presentation': '', 'presentation': '',
'frontpage_title': _('Welcome to OpenSlides'), 'welcome_title': _('Welcome to OpenSlides'),
'frontpage_welcometext': _('[Place for your welcome text.]'), 'welcome_text': _('[Place for your welcome text.]'),
'system_enable_anonymous': False, 'system_enable_anonymous': False,
}.get(key) }.get(key)

View File

@ -23,9 +23,9 @@
</fieldset> </fieldset>
<p></p> <p></p>
<fieldset> <fieldset>
<legend>{% trans "Frontpage" %}</legend> <legend>{% trans "Welcome Widget" %}</legend>
{% for field in form %} {% for field in form %}
{% if "id_frontpage" in field.label_tag %} {% if "id_welcome" in field.label_tag %}
<p> <p>
{{ field.errors }} {{ field.errors }}
{{ field.required }} {{ field.required }}

View File

@ -41,8 +41,8 @@ class GeneralConfig(FormView):
'event_date': config['event_date'], 'event_date': config['event_date'],
'event_location': config['event_location'], 'event_location': config['event_location'],
'event_organizer': config['event_organizer'], 'event_organizer': config['event_organizer'],
'frontpage_title': config['frontpage_title'], 'welcome_title': config['welcome_title'],
'frontpage_welcometext': config['frontpage_welcometext'], 'welcome_text': config['welcome_text'],
'system_enable_anonymous': config['system_enable_anonymous'], 'system_enable_anonymous': config['system_enable_anonymous'],
} }
@ -54,10 +54,9 @@ class GeneralConfig(FormView):
config['event_location'] = form.cleaned_data['event_location'] config['event_location'] = form.cleaned_data['event_location']
config['event_organizer'] = form.cleaned_data['event_organizer'] config['event_organizer'] = form.cleaned_data['event_organizer']
# frontpage # welcome widget
config['frontpage_title'] = form.cleaned_data['frontpage_title'] config['welcome_title'] = form.cleaned_data['welcome_title']
config['frontpage_welcometext'] = \ config['welcome_text'] = form.cleaned_data['welcome_text']
form.cleaned_data['frontpage_welcometext']
# system # system
if form.cleaned_data['system_enable_anonymous']: if form.cleaned_data['system_enable_anonymous']:

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OpenSlides 1.x\n" "Project-Id-Version: OpenSlides 1.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-11-08 09:41+0100\n" "POT-Creation-Date: 2012-11-20 12:34+0100\n"
"PO-Revision-Date: 2012-07-28 11:07+0200\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n"
"Last-Translator: Emanuel Schuetze <emanuel@intevation.de>\n" "Last-Translator: Emanuel Schuetze <emanuel@intevation.de>\n"
"Language-Team: support@openslides.de\n" "Language-Team: support@openslides.de\n"
@ -27,7 +27,7 @@ msgstr "Englisch"
#: global_settings.py:38 #: global_settings.py:38
msgid "French" msgid "French"
msgstr "" msgstr "Französisch"
#: agenda/forms.py:28 #: agenda/forms.py:28
msgid "Parent item" msgid "Parent item"
@ -185,7 +185,7 @@ msgstr "Abbrechen"
#: agenda/templates/agenda/edit.html:27 #: agenda/templates/agenda/edit.html:27
#: assignment/templates/assignment/edit.html:29 #: assignment/templates/assignment/edit.html:29
#: assignment/templates/assignment/poll_view.html:69 #: assignment/templates/assignment/poll_view.html:69
#: assignment/templates/assignment/view.html:83 #: assignment/templates/assignment/view.html:92
#: motion/templates/motion/edit.html:29 #: motion/templates/motion/edit.html:29
#: motion/templates/motion/poll_view.html:55 #: motion/templates/motion/poll_view.html:55
#: participant/templates/participant/edit.html:34 #: participant/templates/participant/edit.html:34
@ -227,8 +227,8 @@ 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:46 assignment/models.py:302 #: agenda/templates/agenda/overview.html:46 assignment/models.py:302
#: assignment/views.py:577 assignment/templates/assignment/view.html:184 #: assignment/views.py:577 assignment/templates/assignment/view.html:168
#: assignment/templates/assignment/view.html:188 #: assignment/templates/assignment/view.html:172
#: assignment/templates/projector/Assignment.html:78 #: assignment/templates/projector/Assignment.html:78
#: assignment/templates/projector/Assignment.html:82 motion/models.py:574 #: assignment/templates/projector/Assignment.html:82 motion/models.py:574
#: motion/views.py:804 motion/views.py:855 #: motion/views.py:804 motion/views.py:855
@ -239,7 +239,7 @@ msgid "Yes"
msgstr "Ja" msgstr "Ja"
#: agenda/templates/agenda/overview.html:47 assignment/models.py:302 #: agenda/templates/agenda/overview.html:47 assignment/models.py:302
#: assignment/views.py:578 assignment/templates/assignment/view.html:185 #: assignment/views.py:578 assignment/templates/assignment/view.html:169
#: assignment/templates/projector/Assignment.html:79 motion/models.py:574 #: assignment/templates/projector/Assignment.html:79 motion/models.py:574
#: motion/views.py:804 motion/views.py:856 #: motion/views.py:804 motion/views.py:856
#: motion/templates/motion/view.html:80 #: motion/templates/motion/view.html:80
@ -299,7 +299,7 @@ msgid "Preview"
msgstr "Vorschau" msgstr "Vorschau"
#: agenda/templates/agenda/widget.html:23 #: agenda/templates/agenda/widget.html:23
#: assignment/templates/assignment/view.html:148 #: assignment/templates/assignment/view.html:132
#: assignment/templates/assignment/widget.html:11 #: assignment/templates/assignment/widget.html:11
#: motion/templates/motion/widget.html:11 #: motion/templates/motion/widget.html:11
#: participant/templates/participant/group_widget.html:11 #: participant/templates/participant/group_widget.html:11
@ -309,7 +309,7 @@ msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: agenda/templates/agenda/widget.html:26 #: agenda/templates/agenda/widget.html:26
#: assignment/templates/assignment/view.html:147 #: assignment/templates/assignment/view.html:131
#: assignment/templates/assignment/widget.html:14 #: assignment/templates/assignment/widget.html:14
#: motion/templates/motion/widget.html:14 #: motion/templates/motion/widget.html:14
#: participant/templates/participant/group_widget.html:14 #: participant/templates/participant/group_widget.html:14
@ -484,7 +484,7 @@ msgid "Election was successfully modified."
msgstr "Wahl wurde erfolgreich geändert." msgstr "Wahl wurde erfolgreich geändert."
#: assignment/views.py:138 motion/views.py:257 motion/views.py:663 #: assignment/views.py:138 motion/views.py:257 motion/views.py:663
#: participant/views.py:492 participant/views.py:515 utils/views.py:225 #: participant/views.py:506 participant/views.py:529 utils/views.py:225
#: utils/views.py:243 utils/views.py:267 #: utils/views.py:243 utils/views.py:267
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."
@ -553,7 +553,7 @@ msgid "not elected"
msgstr "nicht gewählt" msgstr "nicht gewählt"
#: assignment/views.py:298 assignment/views.py:481 #: assignment/views.py:298 assignment/views.py:481
#: assignment/templates/assignment/overview.html:35 #: assignment/templates/assignment/view.html:48
msgid "elected" msgid "elected"
msgstr "gewählt" msgstr "gewählt"
@ -565,7 +565,7 @@ msgstr "Abstimmung wurde erfolgreich gelöscht."
msgid "Assignment" msgid "Assignment"
msgstr "Wahl" msgstr "Wahl"
#: assignment/views.py:358 assignment/templates/assignment/overview.html:58 #: assignment/views.py:358 assignment/templates/assignment/overview.html:59
#: assignment/templates/assignment/widget.html:23 #: assignment/templates/assignment/widget.html:23
msgid "No assignments available." msgid "No assignments available."
msgstr "Keine Wahlen vorhanden." msgstr "Keine Wahlen vorhanden."
@ -578,8 +578,8 @@ msgstr "Wahlen: %s"
#: assignment/views.py:389 assignment/views.py:422 #: assignment/views.py:389 assignment/views.py:422
#: assignment/templates/assignment/overview.html:26 #: assignment/templates/assignment/overview.html:26
#: assignment/templates/assignment/poll_view.html:18 #: assignment/templates/assignment/poll_view.html:18
#: assignment/templates/assignment/view.html:36 #: assignment/templates/assignment/view.html:37
#: assignment/templates/assignment/view.html:136 #: assignment/templates/assignment/view.html:120
#: assignment/templates/projector/Assignment.html:38 #: assignment/templates/projector/Assignment.html:38
#: assignment/templates/projector/Assignment.html:56 #: assignment/templates/projector/Assignment.html:56
msgid "Candidates" msgid "Candidates"
@ -594,8 +594,7 @@ msgstr "Abstimmungsergebnis"
#: assignment/templates/assignment/base_assignment.html:71 #: assignment/templates/assignment/base_assignment.html:71
#: assignment/templates/assignment/poll_view.html:5 #: assignment/templates/assignment/poll_view.html:5
#: assignment/templates/assignment/poll_view.html:8 #: assignment/templates/assignment/poll_view.html:8
#: assignment/templates/assignment/view.html:130 #: assignment/templates/assignment/view.html:123
#: assignment/templates/assignment/view.html:139
#: assignment/templates/projector/Assignment.html:59 #: assignment/templates/projector/Assignment.html:59
msgid "ballot" msgid "ballot"
msgstr "Wahlgang" msgstr "Wahlgang"
@ -616,17 +615,17 @@ msgstr ""
"E: %(ABSTAIN)s" "E: %(ABSTAIN)s"
#: assignment/views.py:454 assignment/templates/assignment/poll_view.html:35 #: assignment/views.py:454 assignment/templates/assignment/poll_view.html:35
#: assignment/templates/assignment/view.html:203 #: assignment/templates/assignment/view.html:186
#: assignment/templates/projector/Assignment.html:97 #: assignment/templates/projector/Assignment.html:96
#: motion/templates/motion/poll_view.html:31 #: motion/templates/motion/poll_view.html:31
msgid "Invalid votes" msgid "Invalid votes"
msgstr "Ungültige Stimmen" msgstr "Ungültige Stimmen"
#: assignment/views.py:461 assignment/templates/assignment/poll_view.html:45 #: assignment/views.py:461 assignment/templates/assignment/poll_view.html:45
#: assignment/templates/assignment/view.html:220 #: assignment/templates/assignment/view.html:202
#: assignment/templates/assignment/view.html:225 #: assignment/templates/assignment/view.html:207
#: assignment/templates/projector/Assignment.html:111 #: assignment/templates/projector/Assignment.html:109
#: assignment/templates/projector/Assignment.html:117 motion/views.py:804 #: assignment/templates/projector/Assignment.html:115 motion/views.py:804
#: motion/templates/motion/poll_view.html:35 #: motion/templates/motion/poll_view.html:35
#: motion/templates/motion/view.html:84 #: motion/templates/motion/view.html:84
#: motion/templates/projector/Motion.html:42 poll/models.py:76 #: motion/templates/projector/Motion.html:42 poll/models.py:76
@ -660,7 +659,7 @@ msgid_plural "%d available posts"
msgstr[0] "%d verfügbare Posten" msgstr[0] "%d verfügbare Posten"
msgstr[1] "%d verfügbare Posten" msgstr[1] "%d verfügbare Posten"
#: assignment/views.py:578 assignment/templates/assignment/view.html:186 #: assignment/views.py:578 assignment/templates/assignment/view.html:170
#: assignment/templates/projector/Assignment.html:80 motion/views.py:804 #: assignment/templates/projector/Assignment.html:80 motion/views.py:804
#: motion/views.py:857 motion/templates/motion/view.html:81 #: motion/views.py:857 motion/templates/motion/view.html:81
#: motion/templates/projector/Motion.html:39 #: motion/templates/projector/Motion.html:39
@ -692,17 +691,17 @@ msgstr "Wahl anzeigen"
#: assignment/templates/assignment/base_assignment.html:39 #: assignment/templates/assignment/base_assignment.html:39
#: assignment/templates/assignment/edit.html:8 #: assignment/templates/assignment/edit.html:8
#: assignment/templates/assignment/edit.html:17 #: assignment/templates/assignment/edit.html:17
#: assignment/templates/assignment/overview.html:49 #: assignment/templates/assignment/overview.html:50
msgid "Edit election" msgid "Edit election"
msgstr "Wahl bearbeiten" msgstr "Wahl bearbeiten"
#: assignment/templates/assignment/base_assignment.html:44 #: assignment/templates/assignment/base_assignment.html:44
#: assignment/templates/assignment/overview.html:50 #: assignment/templates/assignment/overview.html:51
msgid "Delete election" msgid "Delete election"
msgstr "Wahl löschen" msgstr "Wahl löschen"
#: assignment/templates/assignment/base_assignment.html:50 #: assignment/templates/assignment/base_assignment.html:50
#: assignment/templates/assignment/overview.html:52 #: assignment/templates/assignment/overview.html:53
msgid "Election as PDF" msgid "Election as PDF"
msgstr "Wahl als PDF" msgstr "Wahl als PDF"
@ -739,14 +738,21 @@ msgstr[0] "Wahl"
msgstr[1] "Wahlen" msgstr[1] "Wahlen"
#: assignment/templates/assignment/overview.html:35 #: assignment/templates/assignment/overview.html:35
msgid "posts" #, python-format
msgstr "Posten" msgid "posts: %(posts)s"
msgstr "Posten: %(posts)s"
#: assignment/templates/assignment/overview.html:37 #: assignment/templates/assignment/overview.html:37
msgid "candidates" #, python-format
msgstr "Kandidaten/innen" msgid "candidates: %(candidates)s"
msgstr "Kandidaten/innen: %(candidates)s"
#: assignment/templates/assignment/overview.html:44 #: assignment/templates/assignment/overview.html:39
#, python-format
msgid "elected: %(elected)s"
msgstr "Gewählt: %(elected)s"
#: assignment/templates/assignment/overview.html:45
msgid "Activate election" msgid "Activate election"
msgstr "Wahl projizieren" msgstr "Wahl projizieren"
@ -779,84 +785,74 @@ msgstr "Stimmzettel als PDF"
msgid "Change status" msgid "Change status"
msgstr "Status ändern" msgstr "Status ändern"
#: assignment/templates/assignment/view.html:43 #: assignment/templates/assignment/view.html:44
#: assignment/templates/assignment/view.html:99 #: assignment/templates/assignment/view.html:106
#: assignment/templates/assignment/view.html:113
msgid "Remove candidate" msgid "Remove candidate"
msgstr "Kandidate/in entfernen" msgstr "Kandidate/in entfernen"
#: assignment/templates/assignment/view.html:48 #: assignment/templates/assignment/view.html:51
msgid "Mark candidate as not elected"
msgstr "Kandidat/in als nicht gewählt markieren"
#: assignment/templates/assignment/view.html:57
#: assignment/templates/projector/Assignment.html:44 #: assignment/templates/projector/Assignment.html:44
msgid "No candidates available." msgid "No candidates available."
msgstr "Keine Kandidaten/innen vorhanden." msgstr "Keine Kandidaten/innen vorhanden."
#: assignment/templates/assignment/view.html:60 #: assignment/templates/assignment/view.html:69
msgid "Withdraw self candidature" msgid "Withdraw self candidature"
msgstr "Eigene Kandidatur zurückziehen" msgstr "Eigene Kandidatur zurückziehen"
#: assignment/templates/assignment/view.html:66 #: assignment/templates/assignment/view.html:75
msgid "Self candidature" msgid "Self candidature"
msgstr "Selbst kandidieren" msgstr "Selbst kandidieren"
#: assignment/templates/assignment/view.html:77 #: assignment/templates/assignment/view.html:86
msgid "Add new participant" msgid "Add new participant"
msgstr "Neue/n Teilnehmer/in hinzufügen" msgstr "Neue/n Teilnehmer/in hinzufügen"
#: assignment/templates/assignment/view.html:92 #: assignment/templates/assignment/view.html:102
msgid "Elected Candidates"
msgstr "Gewählte Kandidaten/innen"
#: assignment/templates/assignment/view.html:104
msgid "No elected candidates available."
msgstr "Keine gewählten Kandidaten/innen vorhanden."
#: assignment/templates/assignment/view.html:109
msgid "Blocked Candidates" msgid "Blocked Candidates"
msgstr "Blockierte Kandidaten/innen" msgstr "Blockierte Kandidaten/innen"
#: assignment/templates/assignment/view.html:116 #: assignment/templates/assignment/view.html:109
msgid "No blocked candidates available." msgid "No blocked candidates available."
msgstr "Keine blockierten Kandidaten/innen vorhanden." msgstr "Keine blockierten Kandidaten/innen vorhanden."
#: assignment/templates/assignment/view.html:121 #: assignment/templates/assignment/view.html:115
#: assignment/templates/projector/Assignment.html:52 #: assignment/templates/projector/Assignment.html:52
msgid "Election results" msgid "Election results"
msgstr "Wahlergebnisse" msgstr "Wahlergebnisse"
#: assignment/templates/assignment/view.html:144 #: assignment/templates/assignment/view.html:128
msgid "Publish/unpublish results" msgid "Publish/unpublish results"
msgstr "Ergebnisse veröffentlichen/unveröffentlichen" msgstr "Ergebnisse veröffentlichen/unveröffentlichen"
#: assignment/templates/assignment/view.html:156 #: assignment/templates/assignment/view.html:140
#: assignment/templates/assignment/view.html:244 #: assignment/templates/assignment/view.html:223
msgid "New ballot" msgid "New ballot"
msgstr "Neuer Wahlgang" msgstr "Neuer Wahlgang"
#: assignment/templates/assignment/view.html:171 #: assignment/templates/assignment/view.html:155
#: assignment/templates/projector/Assignment.html:69 #: assignment/templates/projector/Assignment.html:69
msgid "Candidate is elected" msgid "Candidate is elected"
msgstr "Kandidat/in ist gewählt" msgstr "Kandidat/in ist gewählt"
#: assignment/templates/assignment/view.html:190 #: assignment/templates/assignment/view.html:174
#: assignment/templates/projector/Assignment.html:84 #: assignment/templates/projector/Assignment.html:84
msgid "was not a <br> candidate" msgid "was not a <br> candidate"
msgstr "war kein Kandidat" msgstr "war kein Kandidat"
#: assignment/templates/assignment/view.html:208 #: assignment/templates/assignment/view.html:191
#: assignment/templates/projector/Assignment.html:101 motion/views.py:804 #: assignment/templates/projector/Assignment.html:100 motion/views.py:804
#: motion/templates/motion/view.html:82 #: motion/templates/motion/view.html:82
#: motion/templates/projector/Motion.html:40 #: motion/templates/projector/Motion.html:40
msgid "Invalid" msgid "Invalid"
msgstr "Ungültig" msgstr "Ungültig"
#: assignment/templates/assignment/view.html:239 #: assignment/templates/assignment/view.html:219
#: assignment/templates/projector/Assignment.html:128 msgid "No results available."
msgid "No ballots available." msgstr "Keine Ergebnisse vorhanden."
msgstr "Keine Wahlgänge vorhanden."
#: assignment/templates/projector/Assignment.html:126
msgid "Vote results are not published yet."
msgstr "Wahlergebnisse sind noch nicht veröffentlicht."
#: config/forms.py:24 #: config/forms.py:24
msgid "Event name" msgid "Event name"
@ -902,23 +898,18 @@ msgstr "Willkommen bei OpenSlides"
msgid "[Place for your welcome text.]" msgid "[Place for your welcome text.]"
msgstr "[Platz für Ihren Begrüßungstext.]" msgstr "[Platz für Ihren Begrüßungstext.]"
#: config/models.py:92 #: config/models.py:103
#, python-format
msgid "Get professional support for OpenSlides on %s."
msgstr "Professionelle Unterstützung für OpenSlides gibt es unter %s."
#: config/models.py:107
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
#: config/models.py:131 config/templates/config/version.html:5 #: config/models.py:127 config/templates/config/version.html:5
#: config/templates/config/version.html:8 #: config/templates/config/version.html:8
#: config/templates/config/version.html:11 motion/views.py:789 #: config/templates/config/version.html:11 motion/views.py:789
#: motion/templates/motion/view.html:214 motion/templates/motion/view.html:244 #: motion/templates/motion/view.html:214 motion/templates/motion/view.html:244
msgid "Version" msgid "Version"
msgstr "Version" msgstr "Version"
#: config/views.py:79 #: config/views.py:78
msgid "" msgid ""
"Anonymous access enabled. Please modify the \"Anonymous\" group to fit your " "Anonymous access enabled. Please modify the \"Anonymous\" group to fit your "
"required permissions." "required permissions."
@ -926,11 +917,11 @@ msgstr ""
"Anonymer Zugriff aktiviert. Bitte setzen Sie die Rechte der Gruppe " "Anonymer Zugriff aktiviert. Bitte setzen Sie die Rechte der Gruppe "
"\"Anonymous\" passend zum gewünschten Zugriffslevel." "\"Anonymous\" passend zum gewünschten Zugriffslevel."
#: config/views.py:85 #: config/views.py:84
msgid "General settings successfully saved." msgid "General settings successfully saved."
msgstr "Allgemeine Einstellungen erfolgreich gespeichert." msgstr "Allgemeine Einstellungen erfolgreich gespeichert."
#: config/views.py:120 config/templates/config/base_config.html:7 #: config/views.py:119 config/templates/config/base_config.html:7
msgid "Configuration" msgid "Configuration"
msgstr "Konfiguration" msgstr "Konfiguration"
@ -944,8 +935,8 @@ msgid "Event"
msgstr "Veranstaltung" msgstr "Veranstaltung"
#: config/templates/config/general.html:26 #: config/templates/config/general.html:26
msgid "Frontpage" msgid "Welcome Widget"
msgstr "Startseite" msgstr "Willkommens-Widget"
#: config/templates/config/general.html:41 #: config/templates/config/general.html:41
msgid "System" msgid "System"
@ -1706,7 +1697,7 @@ msgstr "Keine Abstimmungsergebnisse vorhanden."
msgid "Participant" msgid "Participant"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: participant/forms.py:26 participant/views.py:590 #: participant/forms.py:26 participant/views.py:604
#: participant/templates/participant/group_overview.html:7 #: participant/templates/participant/group_overview.html:7
#: participant/templates/participant/group_overview.html:10 #: participant/templates/participant/group_overview.html:10
#: participant/templates/participant/user_detail.html:14 #: participant/templates/participant/user_detail.html:14
@ -1718,7 +1709,7 @@ msgstr "Gruppen"
msgid "Permissions" msgid "Permissions"
msgstr "Rechte" msgstr "Rechte"
#: participant/forms.py:47 participant/views.py:530 participant/views.py:576 #: participant/forms.py:47 participant/views.py:544 participant/views.py:590
#: participant/templates/participant/base_participant.html:12 #: participant/templates/participant/base_participant.html:12
#: participant/templates/participant/overview.html:7 #: participant/templates/participant/overview.html:7
#: participant/templates/participant/overview.html:18 #: participant/templates/participant/overview.html:18
@ -1777,8 +1768,8 @@ msgstr "Gast"
#: participant/models.py:44 participant/templates/participant/overview.html:30 #: participant/models.py:44 participant/templates/participant/overview.html:30
#: participant/templates/participant/overview.html:68 #: participant/templates/participant/overview.html:68
msgid "Detail" msgid "Structure level"
msgstr "Detail" msgstr "Gliederungsebene"
#: participant/models.py:45 #: participant/models.py:45
msgid "Will be shown after the name." msgid "Will be shown after the name."
@ -1798,7 +1789,7 @@ msgstr "Nur zum Filtern der Teilnehmerliste."
msgid "Typ" msgid "Typ"
msgstr "Typ" msgstr "Typ"
#: participant/models.py:53 participant/views.py:245 #: participant/models.py:53 participant/views.py:259
#: participant/templates/participant/overview.html:45 #: participant/templates/participant/overview.html:45
#: participant/templates/participant/overview.html:70 #: participant/templates/participant/overview.html:70
#: participant/templates/participant/user_detail.html:34 #: participant/templates/participant/user_detail.html:34
@ -1843,81 +1834,97 @@ msgstr "Zum Beispiel als Antragsteller."
msgid "Welcome to OpenSlides!" msgid "Welcome to OpenSlides!"
msgstr "Willkommen bei OpenSlides!" msgstr "Willkommen bei OpenSlides!"
#: participant/views.py:240 #: participant/views.py:210
msgid "You can not delete yourself."
msgstr "Sie dürfen sich nicht selbst löschen."
#: participant/views.py:212
msgid "You can not delete the administrator."
msgstr "Sie dürfen den Administrator nicht löschen."
#: participant/views.py:232
msgid "You can not deactivate yourself."
msgstr "Sie dürfen sich nicht selbst deaktivieren."
#: participant/views.py:235
msgid "You can not deactivate the administrator."
msgstr "Sie dürfen den Administrator nicht deaktivieren."
#: participant/views.py:254
msgid "Participant-list" msgid "Participant-list"
msgstr "Teilnehmerliste" msgstr "Teilnehmerliste"
#: participant/views.py:241 #: participant/views.py:255
msgid "List of Participants" msgid "List of Participants"
msgstr "Teilnehmerliste" msgstr "Teilnehmerliste"
#: participant/views.py:244 participant/templates/participant/overview.html:67 #: participant/views.py:258 participant/templates/participant/overview.html:67
msgid "Last Name" msgid "Last Name"
msgstr "Nachname" msgstr "Nachname"
#: participant/views.py:244 participant/templates/participant/overview.html:66 #: participant/views.py:258 participant/templates/participant/overview.html:66
msgid "First Name" msgid "First Name"
msgstr "Vorname" msgstr "Vorname"
#: participant/views.py:244 #: participant/views.py:258
#: participant/templates/participant/group_overview.html:13 #: participant/templates/participant/group_overview.html:13
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
#: participant/views.py:244 participant/templates/participant/overview.html:37 #: participant/views.py:258 participant/templates/participant/overview.html:37
#: participant/templates/participant/overview.html:69 #: participant/templates/participant/overview.html:69
#: participant/templates/participant/user_detail.html:29 #: participant/templates/participant/user_detail.html:29
#: participant/templates/projector/UserSlide.html:24 #: participant/templates/projector/UserSlide.html:24
msgid "Type" msgid "Type"
msgstr "Typ" msgstr "Typ"
#: participant/views.py:276 #: participant/views.py:290
msgid "Participant-passwords" msgid "Participant-passwords"
msgstr "Teilnehmer-Passwoerter" msgstr "Teilnehmer-Passwoerter"
#: participant/views.py:298 #: participant/views.py:312
msgid "Account for OpenSlides" msgid "Account for OpenSlides"
msgstr "Zugang für OpenSlides" msgstr "Zugang für OpenSlides"
#: participant/views.py:300 #: participant/views.py:314
#, python-format #, python-format
msgid "for %s" msgid "for %s"
msgstr "für %s" msgstr "für %s"
#: participant/views.py:303 #: participant/views.py:317
#, python-format #, python-format
msgid "User: %s" msgid "User: %s"
msgstr "Nutzername: %s" msgstr "Nutzername: %s"
#: participant/views.py:307 #: participant/views.py:321
#, python-format #, python-format
msgid "Password: %s" msgid "Password: %s"
msgstr "Passwort: %s" msgstr "Passwort: %s"
#: participant/views.py:312 #: participant/views.py:326
#, python-format #, python-format
msgid "URL: %s" msgid "URL: %s"
msgstr "URL: %s" msgstr "URL: %s"
#: participant/views.py:354 #: participant/views.py:368
#, python-format #, python-format
msgid "%d new participants were successfully imported." msgid "%d new participants were successfully imported."
msgstr "%d neue Teilnehmer/innen wurden erfolgreich importiert." msgstr "%d neue Teilnehmer/innen wurden erfolgreich importiert."
#: participant/views.py:365 #: participant/views.py:379
msgid "Do you really want to reset the password?" msgid "Do you really want to reset the password?"
msgstr "Soll das Passwort wirklich zurückgesetzt werden?" msgstr "Soll das Passwort wirklich zurückgesetzt werden?"
#: participant/views.py:378 #: participant/views.py:392
#, python-format #, python-format
msgid "The Password for %s was successfully reset." msgid "The Password for %s was successfully reset."
msgstr "Das Passwort für %s wurde erfolgreich zurückgesetzt." msgstr "Das Passwort für %s wurde erfolgreich zurückgesetzt."
#: participant/views.py:457 #: participant/views.py:471
msgid "Participants settings successfully saved." msgid "Participants settings successfully saved."
msgstr "Teilnehmer/innen-Einstellungen wurden erfolgreich gespeichert." msgstr "Teilnehmer/innen-Einstellungen wurden erfolgreich gespeichert."
#: participant/views.py:467 #: participant/views.py:481
#, python-format #, python-format
msgid "" msgid ""
"Installation was successfully! Use %(user)s (password: %(password)s) for " "Installation was successfully! Use %(user)s (password: %(password)s) for "
@ -1930,15 +1937,15 @@ msgstr ""
"Sie das Passwort nach der ersten Anmeldung! Anderenfalls erscheint diese " "Sie das Passwort nach der ersten Anmeldung! Anderenfalls erscheint diese "
"Meldung weiterhin für alle und ist ein Sicherheitsrisiko." "Meldung weiterhin für alle und ist ein Sicherheitsrisiko."
#: participant/views.py:490 #: participant/views.py:504
msgid "User settings successfully saved." msgid "User settings successfully saved."
msgstr "Nutzereinstellungen wurden erfolgreich gespeichert." msgstr "Nutzereinstellungen wurden erfolgreich gespeichert."
#: participant/views.py:512 #: participant/views.py:526
msgid "Password successfully changed." msgid "Password successfully changed."
msgstr "Passwort wurde erfolgreich geändert." msgstr "Passwort wurde erfolgreich geändert."
#: participant/views.py:562 #: participant/views.py:576
msgid "My motions and elections" msgid "My motions and elections"
msgstr "Meine Anträge und Wahlen" msgstr "Meine Anträge und Wahlen"
@ -1988,7 +1995,7 @@ msgid "Edit participant"
msgstr "Teilnehmer/in bearbeiten" msgstr "Teilnehmer/in bearbeiten"
#: participant/templates/participant/base_participant.html:50 #: participant/templates/participant/base_participant.html:50
#: participant/templates/participant/overview.html:97 #: participant/templates/participant/overview.html:98
msgid "Delete participant" msgid "Delete participant"
msgstr "Teilnehmer/in löschen" msgstr "Teilnehmer/in löschen"
@ -2092,15 +2099,15 @@ msgstr "von"
msgid "Last Login" msgid "Last Login"
msgstr "Letzer Login" msgstr "Letzer Login"
#: participant/templates/participant/overview.html:99 #: participant/templates/participant/overview.html:100
msgid "Change status to inactive" msgid "Change status to inactive"
msgstr "Status ändern auf inaktiv" msgstr "Status ändern auf inaktiv"
#: participant/templates/participant/overview.html:102 #: participant/templates/participant/overview.html:103
msgid "Change status to active" msgid "Change status to active"
msgstr "Status ändern auf aktiv" msgstr "Status ändern auf aktiv"
#: participant/templates/participant/overview.html:111 #: participant/templates/participant/overview.html:113
#: participant/templates/participant/user_widget.html:22 #: participant/templates/participant/user_widget.html:22
msgid "No participants available." msgid "No participants available."
msgstr "Keine Teilnehmer/innen vorhanden." msgstr "Keine Teilnehmer/innen vorhanden."
@ -2171,31 +2178,28 @@ msgstr "Darf den Projektor sehen"
msgid "Can see the dashboard" msgid "Can see the dashboard"
msgstr "Darf das Dashboard sehen" msgstr "Darf das Dashboard sehen"
#: projector/views.py:204 #: projector/views.py:206
msgid "Errors in the form" msgid "Errors in the form"
msgstr "Fehler im Formular" msgstr "Fehler im Formular"
#: projector/views.py:383 projector/templates/projector/dashboard.html:17 #: projector/views.py:384 projector/templates/projector/base_projector.html:7
#: projector/templates/projector/base_projector.html:12
#: projector/templates/projector/dashboard.html:17
msgid "Dashboard" msgid "Dashboard"
msgstr "Dashboard" msgstr "Dashboard"
#: projector/views.py:411 #: projector/views.py:412
msgid "Projector live view" msgid "Projector live view"
msgstr "Projektor-Live-Ansicht" msgstr "Projektor-Live-Ansicht"
#: projector/views.py:437 #: projector/views.py:439
msgid "Overlays" msgid "Overlays"
msgstr "Einblendungen" msgstr "Einblendungen"
#: projector/views.py:450 #: projector/views.py:452
msgid "Custom Slides" msgid "Custom Slides"
msgstr "Benutzerdefinierte Folien" msgstr "Benutzerdefinierte Folien"
#: projector/templates/projector/base_projector.html:7
#: projector/templates/projector/base_projector.html:12
msgid "Projector"
msgstr "Projektor"
#: projector/templates/projector/base_projector.html:15 #: projector/templates/projector/base_projector.html:15
msgid "Overview" msgid "Overview"
msgstr "Übersicht" msgstr "Übersicht"
@ -2207,7 +2211,6 @@ msgid "Select widgets"
msgstr "Widgets auswählen" msgstr "Widgets auswählen"
#: projector/templates/projector/base_projector.html:22 #: projector/templates/projector/base_projector.html:22
#: templates/front_page.html:25
msgid "Projector view" msgid "Projector view"
msgstr "Projektor-Ansicht" msgstr "Projektor-Ansicht"
@ -2245,27 +2248,23 @@ msgstr "Willkommensseite"
msgid "New slide" msgid "New slide"
msgstr "Neue Folie" msgstr "Neue Folie"
#: projector/templates/projector/dashboard.html:21 #: projector/templates/projector/live_view_widget.html:10
msgid "Adjust projector view"
msgstr "Projektor-Ansicht anpassen"
#: projector/templates/projector/dashboard.html:22
msgid "Zoom in" msgid "Zoom in"
msgstr "Vergrößern" msgstr "Vergrößern"
#: projector/templates/projector/dashboard.html:25 #: projector/templates/projector/live_view_widget.html:13
msgid "Zoom out" msgid "Zoom out"
msgstr "Verkleinern" msgstr "Verkleinern"
#: projector/templates/projector/dashboard.html:28 #: projector/templates/projector/live_view_widget.html:18
msgid "Scroll text up" msgid "Scroll text up"
msgstr "Text nach oben scrollen" msgstr "Text nach oben scrollen"
#: projector/templates/projector/dashboard.html:31 #: projector/templates/projector/live_view_widget.html:21
msgid "Scroll text down" msgid "Scroll text down"
msgstr "Text nach unten scrollen" msgstr "Text nach unten scrollen"
#: projector/templates/projector/dashboard.html:34 #: projector/templates/projector/live_view_widget.html:26
msgid "Reset projector view" msgid "Reset projector view"
msgstr "Projektor-Ansicht zurücksetzen" msgstr "Projektor-Ansicht zurücksetzen"
@ -2286,8 +2285,7 @@ msgstr "Seite nicht gefunden."
msgid "Server Error" msgid "Server Error"
msgstr "Serverfehler" msgstr "Serverfehler"
#: templates/base.html:21 templates/front_page.html:6 #: templates/base.html:21
#: templates/front_page.html.py:22
msgid "Home" msgid "Home"
msgstr "Startseite" msgstr "Startseite"
@ -2299,20 +2297,20 @@ msgstr "Abmelden"
msgid "Welcome" msgid "Welcome"
msgstr "Willkommen" msgstr "Willkommen"
#: templates/front_page.html:12 #: templates/base.html:79
msgid "You have access to the following pages:" msgid ""
msgstr "Sie haben Zugriff auf folgende Seiten:" "Get <a href='http://openslides.org/support' target='_blank'>professional "
"support</a> for OpenSlides."
msgstr ""
"Nutzen Sie unseren <a href='http://openslides.org/support' "
"target='_blank'>professionellen Support</a> für OpenSlides."
#: utils/pdf.py:225 #: utils/pdf.py:227
msgid "%Y-%m-%d %H:%Mh"
msgstr "%d.%m.%Y %H:%Mh"
#: utils/pdf.py:226
#, python-format #, python-format
msgid "Printed: %s" msgid "As of: %s"
msgstr "Gedruckt am: %s" msgstr "Stand: %s"
#: utils/pdf.py:237 utils/pdf.py:246 #: utils/pdf.py:238 utils/pdf.py:247
#, python-format #, python-format
msgid "Page %s" msgid "Page %s"
msgstr "Seite %s" msgstr "Seite %s"
@ -2356,3 +2354,9 @@ msgstr "undefinierter-dateiname"
#: utils/jsonfield/fields.py:21 #: utils/jsonfield/fields.py:21
msgid "Enter valid JSON" msgid "Enter valid JSON"
msgstr "Gebe valides JSON ein" msgstr "Gebe valides JSON ein"
#~ msgid "posts"
#~ msgstr "Posten"
#~ msgid "candidates"
#~ msgstr "Kandidaten/innen"

View File

@ -615,7 +615,7 @@ def motion_import(request):
user.last_name = last_name user.last_name = last_name
user.first_name = first_name user.first_name = first_name
user.username = gen_username(first_name, last_name) user.username = gen_username(first_name, last_name)
user.detail = '' user.structure_level = ''
user.committee = '' user.committee = ''
user.gender = '' user.gender = ''
user.type = '' user.type = ''

View File

@ -71,7 +71,7 @@ def import_users(csv_file):
dialect=dialect)): dialect=dialect)):
if line_no: if line_no:
try: try:
(first_name, last_name, gender, detail, type, committee, comment) = line[:7] (first_name, last_name, gender, structure_level, type, committee, comment) = line[:7]
except ValueError: except ValueError:
error_messages.append(_('Ignoring malformed line %d in import file.') % line_no + 1) error_messages.append(_('Ignoring malformed line %d in import file.') % line_no + 1)
continue continue
@ -80,7 +80,7 @@ def import_users(csv_file):
user.first_name = first_name user.first_name = first_name
user.username = gen_username(first_name, last_name) user.username = gen_username(first_name, last_name)
user.gender = gender user.gender = gender
user.detail = detail user.structure_level = structure_level
user.type = type user.type = type
user.committee = committee user.committee = committee
user.comment = comment user.comment = comment

View File

@ -27,7 +27,7 @@ class UserCreateForm(forms.ModelForm, CssClassMixin):
class Meta: class Meta:
model = User model = User
fields = ('first_name', 'last_name', 'is_active', 'groups', 'detail', fields = ('first_name', 'last_name', 'is_active', 'groups', 'structure_level',
'gender', 'type', 'committee', 'about_me', 'comment', 'default_password') 'gender', 'type', 'committee', 'about_me', 'comment', 'default_password')
@ -35,7 +35,7 @@ class UserUpdateForm(UserCreateForm):
class Meta: class Meta:
model = User model = User
fields = ('username', 'first_name', 'last_name', 'is_active', 'groups', fields = ('username', 'first_name', 'last_name', 'is_active', 'groups',
'detail', 'gender', 'type', 'committee', 'about_me', 'comment', 'structure_level', 'gender', 'type', 'committee', 'about_me', 'comment',
'default_password') 'default_password')

View File

@ -40,8 +40,8 @@ class User(DjangoUser, PersonMixin, Person, SlideMixin):
) )
django_user = models.OneToOneField(DjangoUser, editable=False, parent_link=True) django_user = models.OneToOneField(DjangoUser, editable=False, parent_link=True)
detail = models.CharField( structure_level = models.CharField(
max_length=100, blank=True, default='', verbose_name=_("Detail"), max_length=100, blank=True, default='', verbose_name=_("Structure level"),
help_text=_('Will be shown after the name.')) help_text=_('Will be shown after the name.'))
gender = models.CharField( gender = models.CharField(
max_length=50, choices=GENDER_CHOICES, blank=True, max_length=50, choices=GENDER_CHOICES, blank=True,
@ -67,10 +67,10 @@ class User(DjangoUser, PersonMixin, Person, SlideMixin):
return self.get_full_name() or self.username return self.get_full_name() or self.username
def get_name_suffix(self): def get_name_suffix(self):
return self.detail return self.structure_level
def set_name_suffix(self, value): def set_name_suffix(self, value):
self.detail = value self.structure_level = value
name_suffix = property(get_name_suffix, set_name_suffix) name_suffix = property(get_name_suffix, set_name_suffix)

View File

@ -26,11 +26,11 @@
<option value="female"{% if 'female' in sortfilter.gender %} selected{% endif %}>{% trans "Female" %}</option> <option value="female"{% if 'female' in sortfilter.gender %} selected{% endif %}>{% trans "Female" %}</option>
<option value=""{% if '' in sortfilter.gender %} selected{% endif %}>{% trans "Not specified" %}</option> <option value=""{% if '' in sortfilter.gender %} selected{% endif %}>{% trans "Not specified" %}</option>
</select> </select>
<select class="default-input" name="detail" onchange="document.forms['filter'].submit()"> <select class="default-input" name="structure_level" onchange="document.forms['filter'].submit()">
<option value="---">-- {% trans "Detail" %} --</option> <option value="---">-- {% trans "Structure level" %} --</option>
{% for detail in details %} {% for level in structure_levels %}
<option value="{{ detail }}"{% if detail in sortfilter.detail %} selected{% endif %}> <option value="{{ level }}"{% if level in sortfilter.structure_level %} selected{% endif %}>
{{ detail }}</option> {{ level }}</option>
{% endfor %} {% endfor %}
</select> </select>
<select class="default-input" name="type" onchange="document.forms['filter'].submit()"> <select class="default-input" name="type" onchange="document.forms['filter'].submit()">
@ -65,7 +65,7 @@
<tr> <tr>
<th><a href="?sort=first_name&reverse={% if 'first_name' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "First Name" %}</a></th> <th><a href="?sort=first_name&reverse={% if 'first_name' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "First Name" %}</a></th>
<th><a href="?sort=last_name&reverse={% if 'last_name' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Last Name" %}</a></th> <th><a href="?sort=last_name&reverse={% if 'last_name' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Last Name" %}</a></th>
<th><a href="?sort=detail&reverse={% if 'detail' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Detail" %}</a></th> <th><a href="?sort=structure_level&reverse={% if 'structure_level' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Structure level" %}</a></th>
<th><a href="?sort=type&reverse={% if 'type' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Type" %}</a></th> <th><a href="?sort=type&reverse={% if 'type' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Type" %}</a></th>
<th><a href="?sort=committee&reverse={% if 'committee' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Committee" %}</a></th> <th><a href="?sort=committee&reverse={% if 'committee' in sortfilter.sort and 'reverse' not in sortfilter %}1{% else %}---{%endif%}">{% trans "Committee" %}</a></th>
{% if perms.participant.can_manage_participant %} {% if perms.participant.can_manage_participant %}
@ -78,7 +78,7 @@
<tr class="{% cycle '' 'odd' %}"> <tr class="{% cycle '' 'odd' %}">
<td><a href="{% model_url user 'view' %}">{{ user.first_name }}</a></td> <td><a href="{% model_url user 'view' %}">{{ user.first_name }}</a></td>
<td><a href="{% model_url user 'view' %}">{{ user.last_name }}</a></td> <td><a href="{% model_url user 'view' %}">{{ user.last_name }}</a></td>
<td>{{ user.detail }}</td> <td>{{ user.structure_level }}</td>
<td>{{ user.get_type_display }}</td> <td>{{ user.get_type_display }}</td>
<td>{{ user.committee }}</td> <td>{{ user.committee }}</td>
{% if perms.participant.can_manage_participant %} {% if perms.participant.can_manage_participant %}

View File

@ -38,7 +38,7 @@ class UserTest(TestCase):
self.assertEqual(unicode(self.user1), 'Max Mustermann') self.assertEqual(unicode(self.user1), 'Max Mustermann')
def test_name_suffix(self): def test_name_suffix(self):
self.user1.detail = 'München' self.user1.structure_level = 'München'
self.user1.save() self.user1.save()
self.assertEqual(unicode(self.user1), 'Max Mustermann (München)') self.assertEqual(unicode(self.user1), 'Max Mustermann (München)')

View File

@ -71,7 +71,7 @@ class UserOverview(ListView):
except KeyError: except KeyError:
sortfilter = {} sortfilter = {}
for value in ['gender', 'detail', 'type', 'committee', 'status', for value in ['gender', 'structure_level', 'type', 'committee', 'status',
'sort', 'reverse']: 'sort', 'reverse']:
if value in self.request.REQUEST: if value in self.request.REQUEST:
if self.request.REQUEST[value] == '---': if self.request.REQUEST[value] == '---':
@ -85,8 +85,8 @@ class UserOverview(ListView):
query = User.objects query = User.objects
if 'gender' in sortfilter: if 'gender' in sortfilter:
query = query.filter(gender__iexact=sortfilter['gender'][0]) query = query.filter(gender__iexact=sortfilter['gender'][0])
if 'detail' in sortfilter: if 'structure_level' in sortfilter:
query = query.filter(detail__iexact=sortfilter['detail'][0]) query = query.filter(structure_level__iexact=sortfilter['structure_level'][0])
if 'type' in sortfilter: if 'type' in sortfilter:
query = query.filter(type__iexact=sortfilter['type'][0]) query = query.filter(type__iexact=sortfilter['type'][0])
if 'committee' in sortfilter: if 'committee' in sortfilter:
@ -97,7 +97,7 @@ class UserOverview(ListView):
if sortfilter['sort'][0] in ['first_name', 'last_name', 'last_login']: if sortfilter['sort'][0] in ['first_name', 'last_name', 'last_login']:
query = query.order_by(sortfilter['sort'][0]) query = query.order_by(sortfilter['sort'][0])
elif (sortfilter['sort'][0] in elif (sortfilter['sort'][0] in
['detail', 'type', 'committee', 'comment']): ['structure_level', 'type', 'committee', 'comment']):
query = query.order_by( query = query.order_by(
'%s' % sortfilter['sort'][0]) '%s' % sortfilter['sort'][0])
else: else:
@ -125,8 +125,8 @@ class UserOverview(ListView):
percent = 0 percent = 0
# list of all existing categories # list of all existing categories
details = [p['detail'] for p in User.objects.values('detail') structure_levels = [p['structure_level'] for p in User.objects.values('structure_level')
.exclude(detail='').distinct()] .exclude(structure_level='').distinct()]
# list of all existing committees # list of all existing committees
committees = [p['committee'] for p in User.objects.values('committee') committees = [p['committee'] for p in User.objects.values('committee')
.exclude(committee='').distinct()] .exclude(committee='').distinct()]
@ -135,7 +135,7 @@ class UserOverview(ListView):
'allusers': all_users, 'allusers': all_users,
'request_user': self.request.user, 'request_user': self.request.user,
'percent': round(percent, 1), 'percent': round(percent, 1),
'details': details, 'structure_levels': structure_levels,
'committees': committees, 'committees': committees,
'cookie': ['participant_sortfilter', urlencode(decodedict(self.sortfilter), 'cookie': ['participant_sortfilter', urlencode(decodedict(self.sortfilter),
doseq=True)], doseq=True)],
@ -268,8 +268,8 @@ class ParticipantsListPDF(PDFView):
counter, counter,
Paragraph(user.last_name, stylesheet['Tablecell']), Paragraph(user.last_name, stylesheet['Tablecell']),
Paragraph(user.first_name, stylesheet['Tablecell']), Paragraph(user.first_name, stylesheet['Tablecell']),
Paragraph(user.detail, stylesheet['Tablecell']), Paragraph(user.structure_level, stylesheet['Tablecell']),
Paragraph(user.type, stylesheet['Tablecell']), Paragraph(user.get_type_display(), stylesheet['Tablecell']),
Paragraph(user.committee, stylesheet['Tablecell'])]) Paragraph(user.committee, stylesheet['Tablecell'])])
t = LongTable(data, style=[ t = LongTable(data, style=[
('VALIGN', (0, 0), (-1, -1), 'TOP'), ('VALIGN', (0, 0), (-1, -1), 'TOP'),

View File

@ -15,27 +15,6 @@
{% block content %} {% block content %}
<h1>{% trans 'Dashboard' %}</h1> <h1>{% trans 'Dashboard' %}</h1>
{% if perms.projector.can_manage_projector %}
<div style="text-align: right; padding: 0 10px 5px 0; margin-top:-20px;">
<!-- control projector view -->
{% trans "Adjust projector view" %}:
<a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}">
<img src="{% static 'images/icons/zoom-in.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
<img src="{% static 'images/icons/zoom-out.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}">
<img src="{% static 'images/icons/go-up.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}">
<img src="{% static 'images/icons/go-down.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_clean %}" title="{% trans 'Reset projector view' %}">
<img src="{% static 'images/icons/view-reset.png' %}" />
</a>
</div>
{% endif %}
<div class="column" id="col1"> <div class="column" id="col1">
{% for name, widget in widgets.items %} {% for name, widget in widgets.items %}

View File

@ -4,6 +4,5 @@
{% load i18n %} {% load i18n %}
{% block content %} {% block content %}
<h1>{% get_config 'frontpage_title' %}</h1> <div class="item_fullscreen">{% get_config 'welcome_title' %}</div>
{% get_config 'frontpage_welcometext' %}
{% endblock %} {% endblock %}

View File

@ -1,7 +1,36 @@
{% load i18n %} {% load i18n %}
{% load tags %} {% load tags %}
{% load staticfiles %}
<!-- projector control buttons -->
{% if perms.projector.can_manage_projector %}
<div style="float: right;">
<p>
<a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}">
<img src="{% static 'images/icons/zoom-in.png' %}" />
</a><br>
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
<img src="{% static 'images/icons/zoom-out.png' %}" />
</a>
</p>
<p>
<a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}">
<img src="{% static 'images/icons/go-up.png' %}" />
</a><br>
<a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}">
<img src="{% static 'images/icons/go-down.png' %}" />
</a>
</p>
<p>
<a class="projector_edit" href="{% url projector_clean %}" title="{% trans 'Reset projector view' %}">
<img src="{% static 'images/icons/view-reset.png' %}" />
</a>
</p>
</div>
{% endif %}
<!-- projector view -->
<a href="{% url projector_show %}" target="_blank"> <a href="{% url projector_show %}" target="_blank">
<div id="iframewrapper"> <div id="iframewrapper">
<iframe id="iframe" src="{% url projector_show %}" frameborder="0"></iframe> <iframe id="iframe" src="{% url projector_show %}" frameborder="0"></iframe>

View File

@ -22,6 +22,7 @@ from django.db import transaction
from django.db.models import Q from django.db.models import Q
from django.dispatch import receiver from django.dispatch import receiver
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template import RequestContext
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict
from django.utils.importlib import import_module from django.utils.importlib import import_module
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -396,10 +397,10 @@ def get_widgets(request):
# welcome widget # welcome widget
context = { context = {
'welcometext': config['frontpage_welcometext']} 'welcometext': config['welcome_text']}
widgets.append(Widget( widgets.append(Widget(
name='welcome', name='welcome',
display_name=config['frontpage_title'], display_name=config['welcome_title'],
template='projector/welcome_widget.html', template='projector/welcome_widget.html',
context=context, context=context,
permission_required='projector.can_see_dashboard', permission_required='projector.can_see_dashboard',
@ -410,6 +411,7 @@ def get_widgets(request):
name='live_view', name='live_view',
display_name=_('Projector live view'), display_name=_('Projector live view'),
template='projector/live_view_widget.html', template='projector/live_view_widget.html',
context = RequestContext(request, {}),
permission_required='projector.can_see_projector', permission_required='projector.can_see_projector',
default_column=2)) default_column=2))

View File

@ -76,7 +76,7 @@
{% endblock %} {% endblock %}
<div id="footer"> <div id="footer">
<small> <small>
&copy; Copyright 2011-2012 | Powered by <a href="http://openslides.org" target="_blank">OpenSlides</a> | Get <a href="http://openslides.org/support" target="_blank">professional support</a> for OpenSlides. &copy; Copyright 2011-2012 | Powered by <a href="http://openslides.org" target="_blank">OpenSlides</a> | {% trans "Get <a href='http://openslides.org/support' target='_blank'>professional support</a> for OpenSlides." %}
</small> </small>
</div> </div>
</div> </div>

View File

@ -1,29 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% load staticfiles %}
{% block title %}{{ block.super }} {% trans "Home" %}{% endblock %}
{% block content %}
<h1>{{ title }}</h1>
<p>{{ welcometext|safe|linebreaks }}</p>
{% trans "You have access to the following pages:" %}
<ul>
{% for app in apps %}
<li><a href="{{ app.url }}">{{ app.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}
{% block submenu %}
{% if perms.projector.can_see_projector %}
<h4 class="sectiontitle">{% trans "Home" %}</h4>
<ul>
<li>
<a href="{% url projector_show %}"><img src="{% static 'images/icons/projector.png' %}"> {% trans 'Projector view' %}</a>
</li>
</ul>
{% endif %}
{% endblock %}

View File

@ -13,17 +13,17 @@
from django.conf import settings from django.conf import settings
from django.conf.urls.defaults import patterns, url, include from django.conf.urls.defaults import patterns, url, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.importlib import import_module from django.utils.importlib import import_module
from openslides.utils.views import FrontPage from openslides.utils.views import RedirectView
handler500 = 'openslides.utils.views.server_error' handler500 = 'openslides.utils.views.server_error'
urlpatterns = patterns('', urlpatterns = patterns('',
# frontpage # Redirect to dashboard URL
(r'^$', FrontPage.as_view()), url(r'^$', RedirectView.as_view(url=reverse_lazy('dashboard')), name='home',),
(r'^agenda/', include('openslides.agenda.urls')), (r'^agenda/', include('openslides.agenda.urls')),
(r'^motion/', include('openslides.motion.urls')), (r'^motion/', include('openslides.motion.urls')),

View File

@ -20,6 +20,7 @@ from reportlab.pdfbase.ttfonts import TTFont
from reportlab.rl_config import defaultPageSize from reportlab.rl_config import defaultPageSize
from django.conf import settings from django.conf import settings
from django.utils import formats
# Import gettext for python 2.5 support # Import gettext for python 2.5 support
from django.utils.translation import ugettext as _, gettext from django.utils.translation import ugettext as _, gettext
@ -222,8 +223,8 @@ def firstPage(canvas, doc):
# time # time
canvas.setFont('Ubuntu', 7) canvas.setFont('Ubuntu', 7)
time = datetime.now().strftime(gettext("%Y-%m-%d %H:%Mh")) time = formats.date_format(datetime.now(), 'DATETIME_FORMAT')
canvas.drawString(15 * cm, 28 * cm, _("Printed: %s") % time) canvas.drawString(15 * cm, 28 * cm, _("As of: %s") % time)
# title # title
if doc.title: if doc.title:

View File

@ -358,33 +358,6 @@ class PDFView(PermissionMixin, View):
return self.render_to_response(self.get_filename()) return self.render_to_response(self.get_filename())
class FrontPage(TemplateView):
template_name = 'front_page.html'
def has_permission(self, request):
if request.user.is_authenticated() or config['system_enable_anonymous']:
return True
return False
def get_context_data(self, **kwargs):
context = super(FrontPage, self).get_context_data(**kwargs)
apps = []
for app in settings.INSTALLED_APPS:
try:
mod = import_module(app + '.views')
tab = mod.register_tab(self.request)
except (ImportError, AttributeError):
continue
if tab.permission:
apps.append(tab)
context.update({
'apps': apps,
'title': config['frontpage_title'],
'welcometext': config['frontpage_welcometext'],
})
return context
def server_error(request, template_name='500.html'): def server_error(request, template_name='500.html'):
""" """
500 error handler. 500 error handler.