Merge pull request #23 from emanuelschuetze/master
prepare 1.3-beta1 release
This commit is contained in:
commit
0397849a79
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@ docs/_build/*
|
||||
*.egg-info
|
||||
build/*
|
||||
dist/*
|
||||
.DS_Store
|
||||
|
13
INSTALL.txt
13
INSTALL.txt
@ -1,4 +1,4 @@
|
||||
Installation Instructions for OpenSlides 1.2
|
||||
Installation Instructions for OpenSlides 1.3
|
||||
============================================
|
||||
|
||||
Content
|
||||
@ -48,7 +48,7 @@ I. Installation on Windows (32/64bit)
|
||||
easy_install django django-mptt reportlab pil
|
||||
|
||||
If you use a 64bit version of Python, you have to install reportlab
|
||||
and pil not by using easy_install but manually.
|
||||
and PIL manually - without using easy_install.
|
||||
|
||||
2. Get OpenSlides:
|
||||
|
||||
@ -56,13 +56,12 @@ I. Installation on Windows (32/64bit)
|
||||
|
||||
OR
|
||||
|
||||
b) Clone development version from mercurial repository
|
||||
http://hg.openslides.org. This requires Mercurial source control
|
||||
management (hg), see http://mercurial.selenic.com.
|
||||
|
||||
b) Clone development version from OpenSlides' github repository
|
||||
https://github.com/OpenSlides/OpenSlides.
|
||||
This requires Git, see http://git-scm.com/.
|
||||
Open command line (cmd) and run:
|
||||
|
||||
hg clone http://hg.openslides.org OpenSlides
|
||||
git clone git://github.com/OpenSlides/OpenSlides.git
|
||||
|
||||
3. Start OpenSlides server and open URL in your default browser:
|
||||
|
||||
|
19
README.txt
19
README.txt
@ -2,7 +2,7 @@
|
||||
English README file for OpenSlides
|
||||
==================================
|
||||
|
||||
This is OpenSlides, version 1.2 (2012-07-25).
|
||||
This is OpenSlides, version 1.3-beta1 (2012-10-30).
|
||||
|
||||
|
||||
What is OpenSlides?
|
||||
@ -47,17 +47,27 @@ Command line options
|
||||
--------------------
|
||||
The following command line options are available:
|
||||
|
||||
-h, --help
|
||||
Shows all options
|
||||
|
||||
-a, --address=ADDRESS
|
||||
Changes the address on which the server will listen for connections
|
||||
|
||||
-p, --port
|
||||
-p PORT, --port=PORT
|
||||
Changes the port on which the server will listen for connections
|
||||
|
||||
--syncdb
|
||||
Create/ update the database
|
||||
Creates/updates database before starting the server
|
||||
|
||||
--reset-admin
|
||||
This will reset the password of the user
|
||||
Resets the password to 'admin' for user 'admin'
|
||||
|
||||
-s SETTINGS, --settings=SETTINGS
|
||||
Sets the path to the settings file.
|
||||
|
||||
--no-reload
|
||||
Does not reload the development server
|
||||
|
||||
|
||||
Example 1: Openslides should only be accessible on this computer:
|
||||
openslides.exe -a 127.0.0.1
|
||||
@ -82,4 +92,3 @@ Browsers:
|
||||
IE 7+
|
||||
Chrome
|
||||
Safari
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
:license: GNU GPL, see LICENSE for more details.
|
||||
"""
|
||||
|
||||
VERSION = (1, 3, 0, 'alpha', 1)
|
||||
VERSION = (1, 3, 0, 'beta', 1)
|
||||
|
||||
|
||||
def get_version(version=None):
|
||||
@ -16,7 +16,7 @@ def get_version(version=None):
|
||||
if version is None:
|
||||
version = VERSION
|
||||
assert len(version) == 5
|
||||
assert version[3] in ('alpha', 'beta', 'rc', 'final')
|
||||
assert version[3] in ('dev', 'alpha', 'beta', 'rc', 'final')
|
||||
|
||||
# Now build the two parts of the version number:
|
||||
# main = X.Y[.Z]
|
||||
@ -27,8 +27,7 @@ def get_version(version=None):
|
||||
main = '.'.join(str(x) for x in version[:main_parts])
|
||||
|
||||
if version[3] != 'final':
|
||||
mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'}
|
||||
sub = mapping[version[3]] + str(version[4])
|
||||
if version[3] == 'dev':
|
||||
try:
|
||||
git_head_path = '.git/' + open('.git/HEAD', 'r').read()[5:].rstrip()
|
||||
except IOError:
|
||||
@ -36,7 +35,9 @@ def get_version(version=None):
|
||||
else:
|
||||
import os
|
||||
git_commit_id = open(os.path.abspath(git_head_path), 'r').read().rstrip()
|
||||
sub = '%s commit %s' % (sub, git_commit_id)
|
||||
sub = '-%s%s' % (version[3], git_commit_id)
|
||||
else:
|
||||
sub = '-' + version[3] + str(version[4])
|
||||
else:
|
||||
sub = ''
|
||||
|
||||
|
@ -81,13 +81,13 @@ def default_config(sender, key, **kwargs):
|
||||
return {
|
||||
'event_name': 'OpenSlides',
|
||||
'event_description':
|
||||
_('Presentation system for agenda, motions and elections'),
|
||||
_('Presentation and assembly system'),
|
||||
'event_date': '',
|
||||
'event_location': '',
|
||||
'event_organizer': '',
|
||||
'presentation': '',
|
||||
'frontpage_title': _('Welcome'),
|
||||
'frontpage_welcometext': _('Welcome to OpenSlides!'),
|
||||
'frontpage_title': _('Welcome to OpenSlides'),
|
||||
'frontpage_welcometext': _('[Place for your welcome text.]'),
|
||||
'show_help_text': True,
|
||||
'help_text': _("Get professional support for OpenSlides on %s.") %
|
||||
"<a href='http://openslides.org/' target='_blank'> \
|
||||
|
Binary file not shown.
@ -7,10 +7,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenSlides 1.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-10-24 12:51+0200\n"
|
||||
"POT-Creation-Date: 2012-10-30 22:38+0100\n"
|
||||
"PO-Revision-Date: 2012-07-28 11:07+0200\n"
|
||||
"Last-Translator: Oskar Hahn <mail@oshahn.de>\n"
|
||||
"Language-Team: Deutsch <mail@oshahn.de>\n"
|
||||
"Last-Translator: Emanuel Schuetze <emanuel@intevation.de>\n"
|
||||
"Language-Team: support@openslides.de\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -30,12 +30,12 @@ msgid "Parent item"
|
||||
msgstr "Elternelement"
|
||||
|
||||
#: agenda/models.py:42 config/forms.py:61 motion/forms.py:22
|
||||
#: motion/models.py:544 motion/templates/motion/view.html:246
|
||||
#: motion/models.py:540 motion/templates/motion/view.html:246
|
||||
#: projector/models.py:32
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: agenda/models.py:43 motion/forms.py:23 motion/models.py:545
|
||||
#: agenda/models.py:43 motion/forms.py:23 motion/models.py:541
|
||||
#: motion/templates/motion/view.html:247 projector/models.py:33
|
||||
msgid "Text"
|
||||
msgstr "Text"
|
||||
@ -225,8 +225,8 @@ msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?"
|
||||
#: assignment/views.py:576 assignment/templates/assignment/view.html:166
|
||||
#: assignment/templates/assignment/view.html:170
|
||||
#: assignment/templates/projector/Assignment.html:78
|
||||
#: assignment/templates/projector/Assignment.html:82 motion/models.py:578
|
||||
#: motion/views.py:778 motion/views.py:829
|
||||
#: assignment/templates/projector/Assignment.html:82 motion/models.py:574
|
||||
#: motion/views.py:804 motion/views.py:855
|
||||
#: motion/templates/motion/view.html:79
|
||||
#: motion/templates/projector/Motion.html:37 utils/utils.py:53
|
||||
#: utils/views.py:111
|
||||
@ -235,8 +235,8 @@ msgstr "Ja"
|
||||
|
||||
#: agenda/templates/agenda/overview.html:47 assignment/models.py:300
|
||||
#: assignment/views.py:577 assignment/templates/assignment/view.html:167
|
||||
#: assignment/templates/projector/Assignment.html:79 motion/models.py:578
|
||||
#: motion/views.py:778 motion/views.py:830
|
||||
#: assignment/templates/projector/Assignment.html:79 motion/models.py:574
|
||||
#: motion/views.py:804 motion/views.py:856
|
||||
#: motion/templates/motion/view.html:80
|
||||
#: motion/templates/projector/Motion.html:38 utils/utils.py:53
|
||||
#: utils/views.py:111
|
||||
@ -385,7 +385,7 @@ msgstr "Abgeschlossen"
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: assignment/models.py:55
|
||||
#: assignment/models.py:55 participant/models.py:114
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
@ -393,7 +393,7 @@ msgstr "Beschreibung"
|
||||
msgid "Comment on the ballot paper"
|
||||
msgstr "Kommentar für den Stimmzettel"
|
||||
|
||||
#: assignment/models.py:69 motion/models.py:339
|
||||
#: assignment/models.py:69 motion/models.py:335
|
||||
#, python-format
|
||||
msgid "%s is not a valid status."
|
||||
msgstr "%s ist kein gültiger Status."
|
||||
@ -438,7 +438,7 @@ msgstr "Darf selbst für Wahlen kandidieren"
|
||||
msgid "Can manage assignment"
|
||||
msgstr "Darf Wahlen verwalten"
|
||||
|
||||
#: assignment/models.py:301 motion/models.py:579
|
||||
#: assignment/models.py:301 motion/models.py:575
|
||||
msgid "Abstain"
|
||||
msgstr "Enthaltung"
|
||||
|
||||
@ -471,9 +471,9 @@ msgstr "Neue Wahl wurde erfolgreich angelegt."
|
||||
msgid "Election was successfully modified."
|
||||
msgstr "Wahl wurde erfolgreich geändert."
|
||||
|
||||
#: assignment/views.py:138 motion/views.py:256 motion/views.py:637
|
||||
#: participant/views.py:463 participant/views.py:486 utils/views.py:210
|
||||
#: utils/views.py:228 utils/views.py:252
|
||||
#: assignment/views.py:138 motion/views.py:257 motion/views.py:663
|
||||
#: participant/views.py:457 participant/views.py:480 utils/views.py:225
|
||||
#: utils/views.py:243 utils/views.py:267
|
||||
msgid "Please check the form for errors."
|
||||
msgstr "Bitte kontrollieren Sie das Formular nach Fehlern."
|
||||
|
||||
@ -572,7 +572,7 @@ msgstr "Wahlen: %s"
|
||||
msgid "Candidates"
|
||||
msgstr "Kandidaten/innen"
|
||||
|
||||
#: assignment/views.py:410 motion/views.py:771
|
||||
#: assignment/views.py:410 motion/views.py:797
|
||||
#: motion/templates/motion/view.html:44
|
||||
msgid "Vote results"
|
||||
msgstr "Abstimmungsergebnis"
|
||||
@ -613,7 +613,7 @@ msgstr "Ungültige Stimmen"
|
||||
#: assignment/templates/assignment/view.html:202
|
||||
#: assignment/templates/assignment/view.html:207
|
||||
#: assignment/templates/projector/Assignment.html:111
|
||||
#: assignment/templates/projector/Assignment.html:117 motion/views.py:778
|
||||
#: assignment/templates/projector/Assignment.html:117 motion/views.py:804
|
||||
#: motion/templates/motion/poll_view.html:35
|
||||
#: motion/templates/motion/view.html:84
|
||||
#: motion/templates/projector/Motion.html:42 poll/models.py:76
|
||||
@ -646,8 +646,8 @@ msgid "%d available posts"
|
||||
msgstr "%d verfügbare Posten"
|
||||
|
||||
#: assignment/views.py:577 assignment/templates/assignment/view.html:168
|
||||
#: assignment/templates/projector/Assignment.html:80 motion/views.py:778
|
||||
#: motion/views.py:831 motion/templates/motion/view.html:81
|
||||
#: assignment/templates/projector/Assignment.html:80 motion/views.py:804
|
||||
#: motion/views.py:857 motion/templates/motion/view.html:81
|
||||
#: motion/templates/projector/Motion.html:39
|
||||
msgid "Abstention"
|
||||
msgstr "Enthaltung"
|
||||
@ -712,7 +712,7 @@ msgstr "Wahl-Einstellungen"
|
||||
#: assignment/templates/assignment/overview.html:14
|
||||
#: assignment/templates/assignment/overview.html:27
|
||||
#: assignment/templates/assignment/view.html:11
|
||||
#: assignment/templates/projector/Assignment.html:18 motion/views.py:749
|
||||
#: assignment/templates/projector/Assignment.html:18 motion/views.py:775
|
||||
#: motion/templates/motion/overview.html:20
|
||||
#: motion/templates/motion/overview.html:40
|
||||
#: motion/templates/motion/view.html:34
|
||||
@ -815,7 +815,7 @@ msgid "was not a <br> candidate"
|
||||
msgstr "war kein Kandidat"
|
||||
|
||||
#: assignment/templates/assignment/view.html:190
|
||||
#: assignment/templates/projector/Assignment.html:101 motion/views.py:778
|
||||
#: assignment/templates/projector/Assignment.html:101 motion/views.py:804
|
||||
#: motion/templates/motion/view.html:82
|
||||
#: motion/templates/projector/Motion.html:40
|
||||
msgid "Invalid"
|
||||
@ -859,16 +859,16 @@ msgid "Can manage configuration"
|
||||
msgstr "Darf die Konfiguration verwalten"
|
||||
|
||||
#: config/models.py:84
|
||||
msgid "Presentation system for agenda, motions and elections"
|
||||
msgstr "Präsentationssystem für Tagesordnung, Anträge und Wahlen"
|
||||
msgid "Presentation and assembly system"
|
||||
msgstr "Präsentations- und Versammlungssystem"
|
||||
|
||||
#: config/models.py:89 templates/base.html:30
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
#: config/models.py:89
|
||||
msgid "Welcome to OpenSlides"
|
||||
msgstr "Willkommen bei OpenSlides"
|
||||
|
||||
#: config/models.py:90 participant/models.py:192
|
||||
msgid "Welcome to OpenSlides!"
|
||||
msgstr "Willkommen bei OpenSlides!"
|
||||
#: config/models.py:90
|
||||
msgid "[Place for your welcome text.]"
|
||||
msgstr "[Platz für Ihren Begrüßungstext.]"
|
||||
|
||||
#: config/models.py:92
|
||||
#, python-format
|
||||
@ -881,7 +881,7 @@ msgstr "Allgemein"
|
||||
|
||||
#: config/models.py:131 config/templates/config/version.html:5
|
||||
#: config/templates/config/version.html:8
|
||||
#: config/templates/config/version.html:11 motion/views.py:763
|
||||
#: config/templates/config/version.html:11 motion/views.py:789
|
||||
#: motion/templates/motion/view.html:214 motion/templates/motion/view.html:244
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
@ -919,7 +919,7 @@ msgstr "Startseite"
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: motion/forms.py:25 motion/models.py:546 motion/views.py:797
|
||||
#: motion/forms.py:25 motion/models.py:542 motion/views.py:823
|
||||
#: motion/templates/motion/view.html:229 motion/templates/motion/view.html:249
|
||||
#: motion/templates/projector/Motion.html:77
|
||||
msgid "Reason"
|
||||
@ -933,7 +933,7 @@ msgstr "Triviale Änderung"
|
||||
msgid "Trivial changes don't create a new version."
|
||||
msgstr "Triviale Änderungen erzeugen keine neue Version."
|
||||
|
||||
#: motion/forms.py:44 motion/views.py:736 motion/templates/motion/view.html:22
|
||||
#: motion/forms.py:44 motion/views.py:762 motion/templates/motion/view.html:22
|
||||
msgid "Supporters"
|
||||
msgstr "Unterstützer/innen"
|
||||
|
||||
@ -1022,7 +1022,7 @@ msgstr "Verworfen (nicht zulässig)"
|
||||
msgid "Needs Review"
|
||||
msgstr "Benötigt Review"
|
||||
|
||||
#: motion/models.py:66 motion/views.py:716
|
||||
#: motion/models.py:66 motion/views.py:742
|
||||
#: motion/templates/motion/overview.html:41
|
||||
#: motion/templates/motion/view.html:18
|
||||
#: motion/templates/projector/Motion.html:55
|
||||
@ -1034,11 +1034,6 @@ msgstr "Antragsteller/in"
|
||||
msgid "Version %d authorized"
|
||||
msgstr "Version %d zugelassen"
|
||||
|
||||
#: motion/models.py:110
|
||||
msgctxt "Rejected means not authorized"
|
||||
msgid "Version %d rejected"
|
||||
msgstr "Version %d zurückgewiesen"
|
||||
|
||||
#: motion/models.py:139
|
||||
msgid "Searching for supporters."
|
||||
msgstr "Auf Unterstützersuche."
|
||||
@ -1073,37 +1068,37 @@ msgstr "Unterstützer/innen gelöscht"
|
||||
msgid "Status reseted to: %s"
|
||||
msgstr "Status zurückgesetzt auf: %s"
|
||||
|
||||
#: motion/models.py:268
|
||||
#: motion/models.py:265
|
||||
#, python-format
|
||||
msgid "Supporter: +%s"
|
||||
msgstr "Unterstützer/in: +%s"
|
||||
|
||||
#: motion/models.py:282
|
||||
#: motion/models.py:278
|
||||
#, python-format
|
||||
msgid "Supporter: -%s"
|
||||
msgstr "Unterstützer/in: -%s"
|
||||
|
||||
#: motion/models.py:299
|
||||
#: motion/models.py:295
|
||||
#, python-format
|
||||
msgid "Number set: %s"
|
||||
msgstr "Nummer gesetzt: %s"
|
||||
|
||||
#: motion/models.py:312
|
||||
#: motion/models.py:308
|
||||
#, python-format
|
||||
msgid "Version %s authorized"
|
||||
msgstr "Version %s zugelassen"
|
||||
|
||||
#: motion/models.py:326
|
||||
#: motion/models.py:322
|
||||
#, python-format
|
||||
msgid "Version %s not authorized"
|
||||
msgstr "Version %s nicht zugelassen"
|
||||
|
||||
#: motion/models.py:342
|
||||
#: motion/models.py:338
|
||||
#, python-format
|
||||
msgid "The motion status is already '%s.'"
|
||||
msgstr "Der Antragsstatus ist bereits '%s'."
|
||||
|
||||
#: motion/models.py:350
|
||||
#: motion/models.py:346
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The motion status is: '%(currentstatus)s'. You can not set the status to "
|
||||
@ -1112,75 +1107,75 @@ msgstr ""
|
||||
"Der Antragsstatus ist: '%(currentstatus)s'. Sie können den Status nicht auf "
|
||||
"'%(newstatus)s' setzen."
|
||||
|
||||
#: motion/models.py:358
|
||||
#: motion/models.py:354
|
||||
msgid "Status modified"
|
||||
msgstr "Status geändert"
|
||||
|
||||
#: motion/models.py:450
|
||||
#: motion/models.py:446
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: motion/models.py:458 motion/templates/motion/view.html:210
|
||||
#: motion/models.py:454 motion/templates/motion/view.html:210
|
||||
#: motion/templates/motion/widget.html:27
|
||||
#: motion/templates/projector/Motion.html:65
|
||||
msgid "no number"
|
||||
msgstr "ohne Nummer"
|
||||
|
||||
#: motion/models.py:459 motion/templates/motion/overview.html:32
|
||||
#: motion/models.py:455 motion/templates/motion/overview.html:32
|
||||
#: motion/templates/motion/widget.html:23
|
||||
msgid "motion"
|
||||
msgstr "Antrag"
|
||||
|
||||
#: motion/models.py:484
|
||||
#: motion/models.py:480
|
||||
msgid "Poll created"
|
||||
msgstr "Abstimmung erstellt"
|
||||
|
||||
#: motion/models.py:535
|
||||
#: motion/models.py:531
|
||||
msgid "Can see motions"
|
||||
msgstr "Darf Anträge sehen"
|
||||
|
||||
#: motion/models.py:536
|
||||
#: motion/models.py:532
|
||||
msgid "Can create motions"
|
||||
msgstr "Darf Anträge erstellen"
|
||||
|
||||
#: motion/models.py:537
|
||||
#: motion/models.py:533
|
||||
msgid "Can support motions"
|
||||
msgstr "Darf Anträge unterstützen"
|
||||
|
||||
#: motion/models.py:538
|
||||
#: motion/models.py:534
|
||||
msgid "Can manage motions"
|
||||
msgstr "Darf Anträge verwalten"
|
||||
|
||||
#: motion/models.py:605
|
||||
#: motion/models.py:601
|
||||
msgid "The assembly may decide,"
|
||||
msgstr "Die Versammlung möge beschließen,"
|
||||
|
||||
#: motion/models.py:608 motion/views.py:666 motion/views.py:891
|
||||
#: motion/models.py:604 motion/views.py:692 motion/views.py:917
|
||||
#: motion/templates/motion/base_motion.html:9
|
||||
#: motion/templates/motion/overview.html:7
|
||||
#: motion/templates/motion/overview.html:10
|
||||
msgid "Motions"
|
||||
msgstr "Anträge"
|
||||
|
||||
#: motion/views.py:179
|
||||
#: motion/views.py:180
|
||||
msgid "You have not the necessary rights to create or edit motions."
|
||||
msgstr ""
|
||||
"Sie haben nicht die nötigen Rechte, um Anträge zu erstellen oder zu "
|
||||
"bearbeiten."
|
||||
|
||||
#: motion/views.py:184
|
||||
#: motion/views.py:185
|
||||
msgid "You can not edit this motion."
|
||||
msgstr "Sie dürfen diesen Antrag nicht bearbeiten."
|
||||
|
||||
#: motion/views.py:247
|
||||
#: motion/views.py:248
|
||||
msgid "New motion was successfully created."
|
||||
msgstr "Neuer Antrag wurde erfolgreich angelegt."
|
||||
|
||||
#: motion/views.py:249
|
||||
#: motion/views.py:250
|
||||
msgid "Motion was successfully modified."
|
||||
msgstr "Antrag wurde erfolgreich geändert."
|
||||
|
||||
#: motion/views.py:263
|
||||
#: motion/views.py:264
|
||||
msgid ""
|
||||
"Attention: Do you really want to edit this motion? The supporters will "
|
||||
"<b>not</b> be removed automatically because you can manage motions. Please "
|
||||
@ -1190,7 +1185,7 @@ msgstr ""
|
||||
"werden <b>nicht</b> automatisch entfernt, da Sie Anträge verwalten dürfen. "
|
||||
"Prüfen Sie, ob die Unterstützungen noch gültig sind."
|
||||
|
||||
#: motion/views.py:265
|
||||
#: motion/views.py:266
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Attention: Do you really want to edit this motion? All <b>%s</b> supporters "
|
||||
@ -1199,132 +1194,148 @@ msgstr ""
|
||||
"Wollen Sie den Antrag wirklich ändern? Alle <b>%s</b> Unterstützer/innen "
|
||||
"werden dann automatisch entfernt. Versuchen Sie diese erneut zu gewinnen."
|
||||
|
||||
#: motion/views.py:297
|
||||
#: motion/views.py:298
|
||||
msgid "Motion number was successfully set."
|
||||
msgstr "Antragsnummer wurde erfolgreich gesetzt."
|
||||
|
||||
#: motion/views.py:313
|
||||
#: motion/views.py:314
|
||||
msgid "Motion was successfully authorized."
|
||||
msgstr "Antrag wurde erfolgreich zugelassen."
|
||||
|
||||
#: motion/views.py:328
|
||||
#: motion/views.py:329
|
||||
msgid "Motion was successfully rejected."
|
||||
msgstr "Antrag wurde erfolgreich verworfen."
|
||||
|
||||
#: motion/views.py:344
|
||||
#: motion/views.py:345
|
||||
#, python-format
|
||||
msgid "Motion status was set to: <b>%s</b>."
|
||||
msgstr "Antragsstatus wurde gesetzt auf: <b>%s</b>."
|
||||
|
||||
#: motion/views.py:360
|
||||
#: motion/views.py:361
|
||||
msgid "Motion status was reset."
|
||||
msgstr "Antragsstatus wurde zurückgesetzt."
|
||||
|
||||
#: motion/views.py:374
|
||||
msgid "You have support the motion successfully."
|
||||
msgstr "Sie haben den Antrag erfolgreich unterstützt."
|
||||
|
||||
#: motion/views.py:388
|
||||
msgid "You have unsupport the motion successfully."
|
||||
msgstr "Sie haben dem Antrag erfolgreich Ihre Unterstützung entzogen."
|
||||
msgid "You can not support this motion."
|
||||
msgstr "Sie dürfen diesen Antrag nicht unterstützen."
|
||||
|
||||
#: motion/views.py:391
|
||||
msgid "You can not unsupport this motion."
|
||||
msgstr "Sie dürfen Ihre Unterstützung für diesen Antrag nicht entziehen."
|
||||
|
||||
#: motion/views.py:402
|
||||
msgid "Do you really want to support this motion?"
|
||||
msgstr "Wollen Sie wirklich diesen Antrag unterstützen?"
|
||||
|
||||
#: motion/views.py:404
|
||||
msgid "Do you really want to unsupport this motion?"
|
||||
msgstr "Wollen Sie wirklich Ihre Unterstützung für diesen Antrag entziehen?"
|
||||
|
||||
#: motion/views.py:415
|
||||
msgid "You have supported this motion successfully."
|
||||
msgstr "Sie haben den Antrag erfolgreich unterstützt."
|
||||
|
||||
#: motion/views.py:417
|
||||
msgid "You have unsupported this motion successfully."
|
||||
msgstr "Sie haben dem Antrag erfolgreich Ihre Unterstützung entzogen."
|
||||
|
||||
#: motion/views.py:431
|
||||
msgid "New vote was successfully created."
|
||||
msgstr "Neue Abstimmung erfolgreich angelegt."
|
||||
|
||||
#: motion/views.py:418
|
||||
#: motion/views.py:447
|
||||
msgid "Poll deleted"
|
||||
msgstr "Abstimmung gelöscht"
|
||||
|
||||
#: motion/views.py:419
|
||||
#: motion/views.py:448
|
||||
msgid "Poll was successfully deleted."
|
||||
msgstr "Abstimmung wurde erfolgreich gelöscht."
|
||||
|
||||
#: motion/views.py:421
|
||||
#: motion/views.py:450
|
||||
#, python-format
|
||||
msgid "the %s. poll"
|
||||
msgstr "die %s. Abstimmung"
|
||||
|
||||
#: motion/views.py:462 motion/views.py:471
|
||||
#: motion/views.py:491 motion/views.py:500
|
||||
#, python-format
|
||||
msgid "You can not delete motion <b>%s</b>."
|
||||
msgstr "Sie können Antrag <b>%s</b> nicht löschen."
|
||||
|
||||
#: motion/views.py:467 motion/views.py:475
|
||||
#: motion/views.py:496 motion/views.py:504
|
||||
#, python-format
|
||||
msgid "Motion <b>%s</b> was successfully deleted."
|
||||
msgstr "Antrag <b>%s</b> wurde erfolgreich gelöscht."
|
||||
|
||||
#: motion/views.py:477
|
||||
#: motion/views.py:506
|
||||
msgid "Invalid request"
|
||||
msgstr "Ungültige Anfrage"
|
||||
|
||||
#: motion/views.py:501
|
||||
#: motion/views.py:530
|
||||
msgid "Poll was updated"
|
||||
msgstr "Abstimmung wurde aktualisiert"
|
||||
|
||||
#: motion/views.py:518
|
||||
#: motion/views.py:547
|
||||
#, python-format
|
||||
msgid "Version <b>%s</b> accepted."
|
||||
msgstr "Version <b>%s</b> akzeptiert."
|
||||
|
||||
#: motion/views.py:520
|
||||
#: motion/views.py:549
|
||||
#, python-format
|
||||
msgid "Do you really want to authorize version <b>%s</b>?"
|
||||
msgstr "Soll Version <b>%s</b> wirklich zugelassen werden?"
|
||||
|
||||
#: motion/views.py:530
|
||||
#: motion/views.py:559
|
||||
#, python-format
|
||||
msgid "Version <b>%s</b> rejected."
|
||||
msgstr "Version <b>%s</b> zurückgewiesen."
|
||||
|
||||
#: motion/views.py:532
|
||||
#: motion/views.py:561
|
||||
msgid "ERROR by rejecting the version."
|
||||
msgstr "FEHLER beim Zurückweisen der Version."
|
||||
|
||||
#: motion/views.py:534
|
||||
#: motion/views.py:563
|
||||
#, python-format
|
||||
msgid "Do you really want to reject version <b>%s</b>?"
|
||||
msgstr "Soll Version <b>%s</b> wirklich zurückgewiesen werden?"
|
||||
|
||||
#: motion/views.py:564 motion/views.py:568 motion/views.py:574
|
||||
#: motion/views.py:577 participant/api.py:76
|
||||
#: motion/views.py:593 motion/views.py:597 motion/views.py:603
|
||||
#: motion/views.py:606 participant/api.py:76
|
||||
#, python-format
|
||||
msgid "Ignoring malformed line %d in import file."
|
||||
msgstr "Fehlerhafte Zeile %d der Quelldatei wurde ignoriert."
|
||||
|
||||
#: motion/views.py:623
|
||||
#: motion/views.py:649
|
||||
#, python-format
|
||||
msgid "%d motion was successfully imported."
|
||||
msgid_plural "%d motions were successfully imported."
|
||||
msgstr[0] "%d Antrag wurde erfolgreich importiert."
|
||||
msgstr[1] "%d Anträge wurden erfolgreich importiert."
|
||||
|
||||
#: motion/views.py:626
|
||||
#: motion/views.py:652
|
||||
#, python-format
|
||||
msgid "%d motion was successfully modified."
|
||||
msgid_plural "%d motions were successfully modified."
|
||||
msgstr[0] "%d Antrag wurde erfolgreich geändert."
|
||||
msgstr[1] "%d Anträge wurden erfolgreich geändert."
|
||||
|
||||
#: motion/views.py:629
|
||||
#: motion/views.py:655
|
||||
#, python-format
|
||||
msgid "%d new user was added."
|
||||
msgid_plural "%d new users were added."
|
||||
msgstr[0] "%d neuer Nutzer wurde erstellt."
|
||||
msgstr[1] "%d neue Nutzer wurden erstellt."
|
||||
|
||||
#: motion/views.py:633 participant/api.py:92
|
||||
#: motion/views.py:659 participant/api.py:92
|
||||
msgid "Import aborted because of severe errors in the input file."
|
||||
msgstr "Import auf Grund von schweren Fehlern in der Quelldatei abgebrochen."
|
||||
|
||||
#: motion/views.py:635 participant/api.py:94
|
||||
#: motion/views.py:661 participant/api.py:94
|
||||
msgid "Import file has wrong character encoding, only UTF-8 is supported!"
|
||||
msgstr ""
|
||||
"Die Quelldatei benutzt eine ungültige Zeichenkodierung, es wird nur UTF-8 "
|
||||
"wird unterstützt!"
|
||||
|
||||
#: motion/views.py:639
|
||||
#: motion/views.py:665
|
||||
msgid ""
|
||||
"Attention: Existing motions will be modified if you import new motions with "
|
||||
"the same number."
|
||||
@ -1332,7 +1343,7 @@ msgstr ""
|
||||
"Achtung: Existierende Anträge werden geändert wenn Sie neue Anträge mit "
|
||||
"identischer Nummer importieren."
|
||||
|
||||
#: motion/views.py:640
|
||||
#: motion/views.py:666
|
||||
msgid ""
|
||||
"Attention: Importing an motions without a number multiple times will create "
|
||||
"duplicates."
|
||||
@ -1340,7 +1351,7 @@ msgstr ""
|
||||
"Achtung: Bei mehrfachem Import eines Antrags ohne Nummer können Duplikate "
|
||||
"entstehen."
|
||||
|
||||
#: motion/views.py:673 motion/views.py:811
|
||||
#: motion/views.py:699 motion/views.py:837
|
||||
#: motion/templates/motion/poll_view.html:7
|
||||
#: motion/templates/motion/poll_view.html:12
|
||||
#: motion/templates/motion/view.html:7 motion/templates/motion/view.html:206
|
||||
@ -1350,21 +1361,21 @@ msgstr ""
|
||||
msgid "Motion"
|
||||
msgstr "Antrag"
|
||||
|
||||
#: motion/views.py:687 motion/templates/motion/overview.html:84
|
||||
#: motion/views.py:713 motion/templates/motion/overview.html:84
|
||||
msgid "No motions available."
|
||||
msgstr "Keine Anträge vorhanden."
|
||||
|
||||
#: motion/views.py:692 motion/views.py:694 motion/views.py:709
|
||||
#: motion/views.py:711 motion/templates/motion/base_motion.html:24
|
||||
#: motion/views.py:718 motion/views.py:720 motion/views.py:735
|
||||
#: motion/views.py:737 motion/templates/motion/base_motion.html:24
|
||||
#: motion/templates/projector/Motion.html:63
|
||||
msgid "Motion No."
|
||||
msgstr "Antrag Nr."
|
||||
|
||||
#: motion/views.py:726
|
||||
#: motion/views.py:752
|
||||
msgid "Signature"
|
||||
msgstr "Unterschrift"
|
||||
|
||||
#: motion/views.py:777 motion/templates/motion/base_motion.html:55
|
||||
#: motion/views.py:803 motion/templates/motion/base_motion.html:55
|
||||
#: motion/templates/motion/poll_view.html:8
|
||||
#: motion/templates/motion/poll_view.html:13
|
||||
#: motion/templates/motion/view.html:66 motion/templates/motion/view.html:74
|
||||
@ -1372,20 +1383,21 @@ msgstr "Unterschrift"
|
||||
msgid "Vote"
|
||||
msgstr "Abstimmung"
|
||||
|
||||
#: motion/views.py:811
|
||||
#: motion/views.py:837
|
||||
msgid "Poll"
|
||||
msgstr "Abstimmung"
|
||||
|
||||
#: motion/views.py:825
|
||||
#: motion/views.py:851
|
||||
#, python-format
|
||||
msgid "Motion No. %s"
|
||||
msgstr "Antrag Nr. %s"
|
||||
|
||||
#: motion/views.py:827
|
||||
#: motion/views.py:853
|
||||
#, python-format
|
||||
msgid "%d. Vote"
|
||||
msgstr "%d. Abstimmung"
|
||||
|
||||
#: motion/views.py:884
|
||||
#: motion/views.py:910
|
||||
msgid "Motion settings successfully saved."
|
||||
msgstr "Antrags-Einstellungen wurden erfolgreich gespeichert."
|
||||
|
||||
@ -1429,7 +1441,7 @@ msgstr "Antrag als PDF"
|
||||
|
||||
#: motion/templates/motion/base_motion.html:49
|
||||
msgid "Show Motion"
|
||||
msgstr "Zeige Antrag"
|
||||
msgstr "Antrag projizieren"
|
||||
|
||||
#: motion/templates/motion/config.html:5 motion/templates/motion/config.html:8
|
||||
msgid "Motion settings"
|
||||
@ -1653,12 +1665,16 @@ msgid "User groups"
|
||||
msgstr "Benutzerrollen"
|
||||
|
||||
#: participant/forms.py:44
|
||||
msgid "Persmissions"
|
||||
msgid "Permissions"
|
||||
msgstr "Rechte"
|
||||
|
||||
#: participant/forms.py:47
|
||||
msgid "Users"
|
||||
msgstr "Benutzer"
|
||||
#: participant/forms.py:47 participant/views.py:495
|
||||
#: participant/templates/participant/base_participant.html:12
|
||||
#: participant/templates/participant/overview.html:7
|
||||
#: participant/templates/participant/overview.html:18
|
||||
#: participant/templates/participant/overview.html:62
|
||||
msgid "Participants"
|
||||
msgstr "Teilnehmer/innen"
|
||||
|
||||
#: participant/forms.py:83
|
||||
msgid "You can not edit the name for the anonymous user"
|
||||
@ -1678,8 +1694,12 @@ msgid "Printed in PDF of first time passwords only."
|
||||
msgstr "Erscheint nur im PDF der Erst-Passwörter"
|
||||
|
||||
#: participant/forms.py:118
|
||||
msgid "Sort users by first name"
|
||||
msgstr "Sortiere Teilnehmer beim Vornamen"
|
||||
msgid "Sort participants by first name"
|
||||
msgstr "Teilnehmer/innen nach Vornamen sortieren"
|
||||
|
||||
#: participant/forms.py:119
|
||||
msgid "Disable for sorting by last name"
|
||||
msgstr "Deaktivieren für Sortierung nach Nachnamen"
|
||||
|
||||
#: participant/models.py:29 participant/templates/participant/overview.html:25
|
||||
msgid "Male"
|
||||
@ -1711,7 +1731,7 @@ msgid "Detail"
|
||||
msgstr "Detail"
|
||||
|
||||
#: participant/models.py:42
|
||||
msgid "Will be shown behind the name."
|
||||
msgid "Will be shown after the name."
|
||||
msgstr "Wird nach dem Namen angezeigt."
|
||||
|
||||
#: participant/models.py:45 participant/templates/participant/overview.html:24
|
||||
@ -1719,8 +1739,8 @@ msgid "Gender"
|
||||
msgstr "Geschlecht"
|
||||
|
||||
#: participant/models.py:45 participant/models.py:48 participant/models.py:51
|
||||
msgid "Only for filter the userlist."
|
||||
msgstr "Nur zum Filtern der Benutzerliste."
|
||||
msgid "Only for filtering the participant list."
|
||||
msgstr "Nur zum Filtern der Teilnehmerliste."
|
||||
|
||||
#: participant/models.py:48
|
||||
msgid "Typ"
|
||||
@ -1748,6 +1768,18 @@ msgstr "Darf die Teilnehmer/inen sehen"
|
||||
msgid "Can manage participant"
|
||||
msgstr "Darf die Teilnehmer/inen verwalten"
|
||||
|
||||
#: participant/models.py:113
|
||||
msgid "Use this user group as participant"
|
||||
msgstr "Verwende diese Benutzerrolle als Teilnehmer/in"
|
||||
|
||||
#: participant/models.py:113
|
||||
msgid "For example as submitter of a motion."
|
||||
msgstr "Zum Beispiel als Antragsteller."
|
||||
|
||||
#: participant/models.py:192
|
||||
msgid "Welcome to OpenSlides!"
|
||||
msgstr "Willkommen bei OpenSlides!"
|
||||
|
||||
#: participant/views.py:212
|
||||
msgid "Participant-list"
|
||||
msgstr "Teilnehmerliste"
|
||||
@ -1810,16 +1842,16 @@ msgstr "%d neue Teilnehmer/innen wurden erfolgreich importiert."
|
||||
msgid "Do you really want to reset the password?"
|
||||
msgstr "Soll das Passwort wirklich zurückgesetzt werden?"
|
||||
|
||||
#: participant/views.py:346
|
||||
#: participant/views.py:343
|
||||
#, python-format
|
||||
msgid "The Password for %s was successfully reset."
|
||||
msgstr "Das Passwort für %s wurde erfolgreich zurückgesetzt."
|
||||
|
||||
#: participant/views.py:428
|
||||
#: participant/views.py:422
|
||||
msgid "Participants settings successfully saved."
|
||||
msgstr "Teilnehmer/innen-Einstellungen wurden erfolgreich gespeichert."
|
||||
|
||||
#: participant/views.py:438
|
||||
#: participant/views.py:432
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Installation was successfully! Use %(user)s (password: %(password)s) for "
|
||||
@ -1832,21 +1864,13 @@ msgstr ""
|
||||
"Sie das Passwort nach der ersten Anmeldung! Anderenfalls erscheint diese "
|
||||
"Meldung weiterhin für alle und ist ein Sicherheitsrisiko."
|
||||
|
||||
#: participant/views.py:461
|
||||
#: participant/views.py:455
|
||||
msgid "User settings successfully saved."
|
||||
msgstr "Nutzereinstellungen wurden erfolgreich gespeichert."
|
||||
|
||||
#: participant/views.py:483
|
||||
#: participant/views.py:477
|
||||
msgid "Password successfully changed."
|
||||
msgstr "Password wurde erfolgreich geändert."
|
||||
|
||||
#: participant/views.py:501
|
||||
#: participant/templates/participant/base_participant.html:12
|
||||
#: participant/templates/participant/overview.html:7
|
||||
#: participant/templates/participant/overview.html:18
|
||||
#: participant/templates/participant/overview.html:62
|
||||
msgid "Participants"
|
||||
msgstr "Teilnehmer/innen"
|
||||
msgstr "Passwort wurde erfolgreich geändert."
|
||||
|
||||
#: participant/templates/participant/base_participant.html:15
|
||||
msgid "All participants"
|
||||
@ -2034,23 +2058,23 @@ msgstr "Darf den Projektor sehen"
|
||||
msgid "Can see the dashboard"
|
||||
msgstr "Darf das Dashboard sehen"
|
||||
|
||||
#: projector/views.py:185
|
||||
#: projector/views.py:202
|
||||
msgid "Errors in the form"
|
||||
msgstr "Fehler im Formular"
|
||||
|
||||
#: projector/views.py:361 projector/templates/projector/dashboard.html:17
|
||||
#: projector/views.py:378 projector/templates/projector/dashboard.html:17
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#: projector/views.py:378
|
||||
#: projector/views.py:406
|
||||
msgid "Projector live view"
|
||||
msgstr "Projektor-Live-Ansicht"
|
||||
|
||||
#: projector/views.py:404
|
||||
#: projector/views.py:432
|
||||
msgid "Overlays"
|
||||
msgstr "Einblendungen"
|
||||
|
||||
#: projector/views.py:417
|
||||
#: projector/views.py:445
|
||||
msgid "Custom Slides"
|
||||
msgstr "Benutzerdefinierte Folien"
|
||||
|
||||
@ -2075,7 +2099,6 @@ msgid "Projector view"
|
||||
msgstr "Projektor-Ansicht"
|
||||
|
||||
#: projector/templates/projector/control_countdown.html:6
|
||||
msgctxt "seconds"
|
||||
msgid "s"
|
||||
msgstr "s"
|
||||
|
||||
@ -2158,6 +2181,10 @@ msgstr "Startseite"
|
||||
msgid "Logout"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: templates/base.html:30
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
|
||||
#: templates/front_page.html:12
|
||||
msgid "You have access to the following pages:"
|
||||
msgstr "Sie haben Zugriff auf folgende Seiten:"
|
||||
@ -2176,7 +2203,7 @@ msgstr "Gedruckt am: %s"
|
||||
msgid "Page %s"
|
||||
msgstr "Seite %s"
|
||||
|
||||
#: utils/utils.py:66 utils/views.py:271
|
||||
#: utils/utils.py:66 utils/views.py:290
|
||||
#, python-format
|
||||
msgid "Do you really want to delete %s?"
|
||||
msgstr "Soll %s wirklich gelöscht werden?"
|
||||
@ -2193,22 +2220,22 @@ msgstr "Sind Sie sicher?"
|
||||
msgid "Thank you for your answer"
|
||||
msgstr "Danke für Ihre Antwort"
|
||||
|
||||
#: utils/views.py:232
|
||||
#: utils/views.py:247
|
||||
#, python-format
|
||||
msgid "%s was successfully modified."
|
||||
msgstr "%s wurde erfolgreich bearbeitet."
|
||||
|
||||
#: utils/views.py:263
|
||||
#: utils/views.py:278
|
||||
#, python-format
|
||||
msgid "%s was successfully created."
|
||||
msgstr "%s wurde erfolgreich angelegt."
|
||||
|
||||
#: utils/views.py:274
|
||||
#: utils/views.py:296
|
||||
#, python-format
|
||||
msgid "%s was successfully deleted."
|
||||
msgstr "%s wurde erfolgreich gelöscht."
|
||||
|
||||
#: utils/views.py:305
|
||||
#: utils/views.py:312
|
||||
msgid "undefined-filename"
|
||||
msgstr "undefinierter-dateiname"
|
||||
|
||||
@ -2216,32 +2243,5 @@ msgstr "undefinierter-dateiname"
|
||||
msgid "Enter valid JSON"
|
||||
msgstr "Gebe valides JSON ein"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Anträge"
|
||||
|
||||
#~ msgid "Application"
|
||||
#~ msgstr "Antrag"
|
||||
|
||||
#~ msgid "Application No. %s"
|
||||
#~ msgstr "Antrag Nr. %s"
|
||||
|
||||
#~ msgid "Application No."
|
||||
#~ msgstr "Antrag Nr."
|
||||
|
||||
#~ msgid "Show Application"
|
||||
#~ msgstr "Antrag projizieren"
|
||||
|
||||
#~ msgid "Application settings"
|
||||
#~ msgstr "Antrags-Einstellungen"
|
||||
|
||||
#~ msgid "Category"
|
||||
#~ msgstr "Kategorie"
|
||||
|
||||
#~ msgid "Do you really want to delete multiple motions?"
|
||||
#~ msgstr "Wollen Sie wirklich mehrere Anträge löschen?"
|
||||
|
||||
#~ msgid "Do you really want to delete <b>%s</b>?"
|
||||
#~ msgstr "Soll <b>%s</b> wirklich gelöscht werden?"
|
||||
|
||||
#~ msgid "You!"
|
||||
#~ msgstr "Sie!"
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Benutzer"
|
||||
|
@ -223,7 +223,7 @@ def create_or_reset_admin_user():
|
||||
except User.DoesNotExist:
|
||||
admin = User()
|
||||
admin.username = 'admin'
|
||||
admin.last_name = 'Admin User'
|
||||
admin.last_name = 'Administrator'
|
||||
print("Created default admin user")
|
||||
|
||||
admin.is_superuser = True
|
||||
|
@ -615,16 +615,13 @@ def motion_import(request):
|
||||
user.last_name = last_name
|
||||
user.first_name = first_name
|
||||
user.username = gen_username(first_name, last_name)
|
||||
user.detail = ''
|
||||
user.committee = ''
|
||||
user.gender = ''
|
||||
user.type = ''
|
||||
user.default_password = gen_password()
|
||||
user.save()
|
||||
profile = Profile()
|
||||
profile.user = user
|
||||
profile.group = ''
|
||||
profile.committee = ''
|
||||
profile.gender = 'none'
|
||||
profile.type = 'guest'
|
||||
profile.firstpassword = gen_password()
|
||||
profile.user.set_password(profile.firstpassword)
|
||||
profile.save()
|
||||
user.reset_password()
|
||||
users_generated += 1
|
||||
# create / modify the motion
|
||||
motion = None
|
||||
|
@ -71,7 +71,7 @@ def import_users(csv_file):
|
||||
dialect=dialect)):
|
||||
if line_no:
|
||||
try:
|
||||
(first_name, last_name, gender, category, type, committee, comment) = line[:7]
|
||||
(first_name, last_name, gender, detail, type, committee, comment) = line[:7]
|
||||
except ValueError:
|
||||
error_messages.append(_('Ignoring malformed line %d in import file.') % line_no + 1)
|
||||
continue
|
||||
@ -80,11 +80,11 @@ def import_users(csv_file):
|
||||
user.first_name = first_name
|
||||
user.username = gen_username(first_name, last_name)
|
||||
user.gender = gender
|
||||
user.category = category
|
||||
user.detail = detail
|
||||
user.type = type
|
||||
user.committee = committee
|
||||
user.comment = comment
|
||||
user.firstpassword = gen_password()
|
||||
user.default_password = gen_password()
|
||||
user.save()
|
||||
user.reset_password()
|
||||
count_success += 1
|
||||
|
@ -41,10 +41,10 @@ class UserUpdateForm(UserCreateForm):
|
||||
|
||||
class GroupForm(forms.ModelForm, CssClassMixin):
|
||||
permissions = LocalizedModelMultipleChoiceField(
|
||||
queryset=Permission.objects.all(), label=_("Persmissions"),
|
||||
queryset=Permission.objects.all(), label=_("Permissions"),
|
||||
required=False)
|
||||
users = forms.ModelMultipleChoiceField(
|
||||
queryset=User.objects.all(), label=_("Users"), required=False)
|
||||
queryset=User.objects.all(), label=_("Participants"), required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# Initial users
|
||||
@ -115,4 +115,5 @@ class ConfigForm(forms.Form, CssClassMixin):
|
||||
help_text=_("Printed in PDF of first time passwords only."))
|
||||
participant_sort_users_by_first_name = forms.BooleanField(
|
||||
required=False,
|
||||
label=_("Sort users by first name"))
|
||||
label=_("Sort participants by first name"),
|
||||
help_text=_("Disable for sorting by last name"))
|
||||
|
@ -39,16 +39,16 @@ class User(DjangoUser, PersonMixin, Person):
|
||||
django_user = models.OneToOneField(DjangoUser, editable=False, parent_link=True)
|
||||
detail = models.CharField(
|
||||
max_length=100, blank=True, default='', verbose_name=_("Detail"),
|
||||
help_text=_('Will be shown behind the name.'))
|
||||
help_text=_('Will be shown after the name.'))
|
||||
gender = models.CharField(
|
||||
max_length=50, choices=GENDER_CHOICES, blank=True,
|
||||
verbose_name=_("Gender"), help_text=_('Only for filter the userlist.'))
|
||||
verbose_name=_("Gender"), help_text=_('Only for filtering the participant list.'))
|
||||
type = models.CharField(
|
||||
max_length=100, choices=TYPE_CHOICES, blank=True,
|
||||
verbose_name=_("Typ"), help_text=_('Only for filter the userlist.'))
|
||||
verbose_name=_("Typ"), help_text=_('Only for filtering the participant list.'))
|
||||
committee = models.CharField(
|
||||
max_length=100, blank=True, default='', verbose_name=_("Committee"),
|
||||
help_text=_('Only for filter the userlist.'))
|
||||
help_text=_('Only for filtering the participant list.'))
|
||||
comment = models.TextField(
|
||||
blank=True, default='', verbose_name=_('Comment'),
|
||||
help_text=_('Only for notes.'))
|
||||
@ -110,8 +110,8 @@ class Group(DjangoGroup, PersonMixin, Person):
|
||||
person_prefix = 'group'
|
||||
|
||||
django_group = models.OneToOneField(DjangoGroup, editable=False, parent_link=True)
|
||||
group_as_person = models.BooleanField(default=False)
|
||||
description = models.TextField(blank=True)
|
||||
group_as_person = models.BooleanField(default=False, verbose_name=_("Use this user group as participant"), help_text=_('For example as submitter of a motion.'))
|
||||
description = models.TextField(blank=True, verbose_name=_("Description"))
|
||||
|
||||
@models.permalink
|
||||
def get_absolute_url(self, link='edit'):
|
||||
@ -145,7 +145,7 @@ class UsersAndGroupsToPersons(object):
|
||||
if config['participant_sort_users_by_first_name']:
|
||||
self.users = User.objects.all().order_by('first_name')
|
||||
else:
|
||||
self.users = User.objects.all()
|
||||
self.users = User.objects.all().order_by('last_name')
|
||||
self.groups = Group.objects.filter(group_as_person=True)
|
||||
|
||||
def __iter__(self):
|
||||
|
@ -98,6 +98,8 @@ class Overview(ListView):
|
||||
else:
|
||||
if config['participant_sort_users_by_first_name']:
|
||||
query = query.order_by('first_name')
|
||||
else:
|
||||
query = query.order_by('last_name')
|
||||
|
||||
if 'reverse' in sortfilter:
|
||||
query = query.reverse()
|
||||
@ -215,6 +217,9 @@ class ParticipantsListPDF(PDFView):
|
||||
def append_to_pdf(self, story):
|
||||
data = [['#', _('Last Name'), _('First Name'), _('Group'), _('Type'),
|
||||
_('Committee')]]
|
||||
if config['participant_sort_users_by_first_name']:
|
||||
sort = 'first_name'
|
||||
else:
|
||||
sort = 'last_name'
|
||||
counter = 0
|
||||
for user in User.objects.all().order_by(sort):
|
||||
@ -257,7 +262,11 @@ class ParticipantsPasswordsPDF(PDFView):
|
||||
data = []
|
||||
participant_pdf_system_url = config["participant_pdf_system_url"]
|
||||
participant_pdf_welcometext = config["participant_pdf_welcometext"]
|
||||
for user in User.objects.all().order_by('last_name'):
|
||||
if config['participant_sort_users_by_first_name']:
|
||||
sort = 'first_name'
|
||||
else:
|
||||
sort = 'last_name'
|
||||
for user in User.objects.all().order_by(sort):
|
||||
cell = []
|
||||
cell.append(Spacer(0, 0.8 * cm))
|
||||
cell.append(Paragraph(_("Account for OpenSlides"),
|
||||
|
@ -0,0 +1,6 @@
|
||||
{% load i18n %}
|
||||
{% load tags %}
|
||||
|
||||
{% if welcometext %}
|
||||
<p>{{ welcometext|safe|linebreaks }}</p>
|
||||
{% endif %}
|
@ -34,7 +34,7 @@ from openslides.config.models import config
|
||||
|
||||
from openslides.projector.api import (get_active_slide, set_active_slide,
|
||||
projector_message_set, projector_message_delete, get_slide_from_sid,
|
||||
get_all_widgets)
|
||||
get_all_widgets, clear_projector_cache)
|
||||
from openslides.projector.forms import SelectWidgetsForm
|
||||
from openslides.projector.models import ProjectorOverlay, ProjectorSlide
|
||||
from openslides.projector.projector import SLIDE, Widget
|
||||
@ -128,7 +128,9 @@ class Projector(TemplateView, AjaxMixin):
|
||||
if not data:
|
||||
data = self.data
|
||||
cache.set('projector_data', data)
|
||||
|
||||
# clear cache if countdown is enabled
|
||||
if config['countdown_state'] == 'active':
|
||||
clear_projector_cache()
|
||||
context = super(Projector, self).get_ajax_context(**kwargs)
|
||||
content_hash = hash(content)
|
||||
context.update({
|
||||
@ -277,6 +279,7 @@ class CountdownEdit(RedirectView):
|
||||
pass
|
||||
|
||||
def get_ajax_context(self, **kwargs):
|
||||
clear_projector_cache()
|
||||
return {
|
||||
'state': config['countdown_state'],
|
||||
'countdown_time': config['countdown_time'],
|
||||
@ -299,6 +302,7 @@ class OverlayMessageView(RedirectView):
|
||||
|
||||
|
||||
def get_ajax_context(self, **kwargs):
|
||||
clear_projector_cache()
|
||||
return {
|
||||
'overlay_message': config['projector_message'],
|
||||
}
|
||||
@ -330,6 +334,7 @@ class ActivateOverlay(RedirectView):
|
||||
self.overlay.save()
|
||||
|
||||
def get_ajax_context(self, **kwargs):
|
||||
clear_projector_cache()
|
||||
return {
|
||||
'active': self.overlay.active,
|
||||
'def_name': self.overlay.def_name,
|
||||
@ -389,6 +394,17 @@ def get_widgets(request):
|
||||
"""
|
||||
widgets = []
|
||||
|
||||
# welcome widget
|
||||
context = {
|
||||
'welcometext': config['frontpage_welcometext']}
|
||||
widgets.append(Widget(
|
||||
name='welcome',
|
||||
display_name=config['frontpage_title'],
|
||||
template='projector/welcome_widget.html',
|
||||
context=context,
|
||||
permission_required='projector.can_see_dashboard',
|
||||
default_column=1))
|
||||
|
||||
# Projector live view widget
|
||||
widgets.append(Widget(
|
||||
name='live_view',
|
||||
|
Loading…
Reference in New Issue
Block a user