Merge pull request #617 from emanuelschuetze/master

1.4a1 release
This commit is contained in:
Emanuel Schütze 2013-04-24 06:58:49 -07:00
commit b34677291b
9 changed files with 133 additions and 117 deletions

View File

@ -1,4 +1,4 @@
Installation Instructions for OpenSlides 1.3
Installation Instructions for OpenSlides 1.4
============================================
Content
@ -45,8 +45,13 @@ I. Installation on GNU/Linux and MacOSX using the Python Package Index (PyPI)
OpenSlides will install the following required python packages:
+ Django
+ django-mptt
+ ReportLab Toolkit
+ Python Imaging Library (PIL)
+ pillow
+ qrcode
+ reportlab
+ tornado
+ bleach
+ beautifulsoup4
+ html5lib
4. Start OpenSlides server and open URL in your default browser:
@ -65,17 +70,14 @@ I. Installation on GNU/Linux and MacOSX using the Python Package Index (PyPI)
II. Installation on GNU/Linux and MacOSX using the sources
----------------------------------------------------------
1. Install requirements:
1. Check requirements:
OpenSlides requires following programs, which should be
installed first:
+ Python Programming Language 2 (>= 2.6)
+ virtualenv (>= 1.4.1)
+ ReportLab Toolkit
+ Python Imaging Library (PIL)
Make sure that you have installed Python Programming Language 2
(>= 2.6) and virtualenv (>= 1.4.1) on your system. You will also
need the Python development headers.
E. g. for Ubuntu run:
$ sudo apt-get install python python-virtualenv python-reportlab python-imaging
$ sudo apt-get install python-dev python-virtualenv
2. Get OpenSlides:
@ -83,14 +85,15 @@ II. Installation on GNU/Linux and MacOSX using the sources
OR
b) Clone development version from OpenSlides' github repository
https://github.com/OpenSlides/OpenSlides. This requires Git,
see http://git-scm.com/.
b) Clone current master version from OpenSlides' GitHub repository
https://github.com/OpenSlides/OpenSlides.
E. g. for Ubuntu run:
$ sudo apt-get install git
$ git clone git://github.com/OpenSlides/OpenSlides.git OpenSlides
This requires Git (see http://git-scm.com/).
To install Git e.g. on Ubuntu run:
$ sudo apt-get install git
3. Setup a virtual environment with virtualenv (optional):
You can setup a virtual environment to install OpenSlides as
@ -105,22 +108,16 @@ II. Installation on GNU/Linux and MacOSX using the sources
$ virtualenv .venv
$ source .venv/bin/activate
4. Install the required python-packages:
4. Install all required python packages:
$ pip install django django-mptt
If you use python < 2.6 you also have to install simplejson:
$ pip install simplejson
If requirements reportlab or PIL still missing (see 1.):
$ pip install reportlab pil
$ pip install -r requirements.txt
5. Start OpenSlides server and open URL in your default browser:
$ python start.py
If you run this script the first time a new database and the
admin account are created. Please change the password after
admin account will be created. Please change the password after
first login!
Username: admin
@ -131,7 +128,10 @@ II. Installation on GNU/Linux and MacOSX using the sources
6. Restart OpenSlides:
To restart OpenSlides after closing the terminal activate the
virtual environment (see 4.) before starting the server (see 6.).
virtual environment before starting the server:
$ source .venv/bin/activate
$ python start.py
III. Installation on Windows (32bit) using the Python Package Index (PyPI)

View File

@ -2,7 +2,7 @@
English README file for OpenSlides
==================================
This is OpenSlides, version 1.4.0 (unreleased).
This is OpenSlides, version 1.4-beta1-dev (unreleased).
What is OpenSlides?
@ -70,6 +70,9 @@ The following command line options are available:
--no-reload
Does not reload the development server
--no-browser
Do not automatically start web browser.
--version
Show version and exit.

6
THANKS
View File

@ -16,6 +16,9 @@ OpenSlides uses parts of the following projects:
with css theme 'smoothness'
and some addons: slider access, timepicker
* nestedSortable jQuery Plugin
<http://mjsarfatti.com/sandbox/nestedSortable/>
* Twitter Bootstrap
<http://twitter.github.com/bootstrap/>
@ -24,6 +27,3 @@ OpenSlides uses parts of the following projects:
* Ubuntu TrueType Font
<http://font.ubuntu.com/>
* nestedSortable jQuery Plugin
<http://mjsarfatti.com/sandbox/nestedSortable/>

View File

@ -5,7 +5,7 @@
:license: GNU GPL, see LICENSE for more details.
"""
VERSION = (1, 4, 0, 'alpha', 1) # During development it is the next release
VERSION = (1, 4, 0, 'beta', 1) # During development it is the next release
RELEASE = False

View File

@ -569,7 +569,6 @@ class AssignmentPollPDF(PDFView):
number = User.objects.filter(groups__pk=3).count()
except Group.DoesNotExist:
number = 0
elif ballot_papers_selection == "NUMBER_OF_ALL_PARTICIPANTS":
number = int(User.objects.count())
else: # ballot_papers_selection == "CUSTOM_NUMBER"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenSlides 1.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-04-23 21:38+0200\n"
"POT-Creation-Date: 2013-04-24 14:34+0200\n"
"PO-Revision-Date: 2012-07-28 11:07+0200\n"
"Last-Translator: Emanuel Schuetze <emanuel@intevation.de>\n"
"Language-Team: support@openslides.de\n"
@ -29,7 +29,7 @@ msgstr "Englisch"
msgid "French"
msgstr "Französisch"
#: account/views.py:60
#: account/views.py:61
msgid "My motions and elections"
msgstr "Meine Anträge und Wahlen"
@ -78,11 +78,11 @@ msgstr "Ungültiges Format. Stunden von 0 bis 99 und Minuten von 00 bis 59"
msgid "Duration (hh:mm)"
msgstr "Dauer (hh:mm)"
#: agenda/forms.py:69
#: agenda/forms.py:61
msgid "Add participant"
msgstr "Neue/n Teilnehmer/in hinzufügen"
#: agenda/forms.py:82
#: agenda/forms.py:74
#, python-format
msgid "%s is already on the list of speakers."
msgstr "%s ist bereits auf der Rednerliste"
@ -107,8 +107,8 @@ msgstr "Titel"
msgid "Text"
msgstr "Text"
#: agenda/models.py:54 agenda/templates/agenda/overview.html:90
#: agenda/templates/agenda/view.html:56 participant/models.py:51
#: agenda/models.py:54 agenda/templates/agenda/overview.html:75
#: agenda/templates/agenda/view.html:51 participant/models.py:51
#: participant/templates/participant/overview.html:69
#: participant/templates/participant/user_detail.html:47
msgid "Comment"
@ -118,8 +118,7 @@ msgstr "Kommentar"
msgid "Closed"
msgstr "Abgeschlossen"
#: agenda/models.py:64 agenda/templates/agenda/overview.html:99
#: projector/models.py:29
#: agenda/models.py:64 projector/models.py:29
msgid "Weight"
msgstr "Gewichtung"
@ -131,31 +130,24 @@ msgstr "Typ"
msgid "List of speakers is closed"
msgstr "Rednerliste ist geschlossen"
#: agenda/models.py:162
#: agenda/templates/agenda/overlay_speaker_projector.html:20
#: agenda/templates/agenda/overlay_speaker_widget.html:5
#: agenda/templates/agenda/view.html:62
msgid "List of speakers"
msgstr "Rednerliste"
#: agenda/models.py:236
#: agenda/models.py:238
msgid "Can see agenda"
msgstr "Darf die Tagesordnung sehen"
#: agenda/models.py:237
#: agenda/models.py:239
msgid "Can manage agenda"
msgstr "Darf die Tagesordung verwalten"
#: agenda/models.py:238
#: agenda/models.py:240
msgid "Can see orga items and time scheduling of agenda"
msgstr "Darf Organisationspunkte und Tagesordnung-Zeitplan sehen"
#: agenda/models.py:248
#: agenda/models.py:250
#, python-format
msgid "%(person)s is already on the list of speakers of item %(id)s."
msgstr "%(person)s ist bereits auf der Rednerliste von Eintrag %(id)s."
#: agenda/models.py:283
#: agenda/models.py:285
msgid "Can put oneself on the list of speakers"
msgstr "Darf sich selbst auf die Rednerliste setzen"
@ -170,8 +162,8 @@ msgstr "Eingabeformat: TT.MM.JJJJ HH:MM"
#: agenda/signals.py:52 agenda/slides.py:23 agenda/slides.py:29
#: agenda/views.py:243 agenda/views.py:244 agenda/views.py:469
#: agenda/views.py:484 agenda/templates/agenda/overview.html:8
#: agenda/templates/agenda/overview.html:55
#: agenda/templates/agenda/overview.html:105
#: agenda/templates/agenda/overview.html:40
#: agenda/templates/agenda/overview.html:87
#: agenda/templates/projector/AgendaSummary.html:6
#: agenda/templates/projector/AgendaSummary.html:10
msgid "Agenda"
@ -245,16 +237,16 @@ msgid "To the current list of speakers"
msgstr "Zur aktuellen Rednerliste"
#: agenda/templates/agenda/edit.html:8 agenda/templates/agenda/edit.html:17
#: agenda/templates/agenda/view.html:37
#: agenda/templates/agenda/view.html:32
msgid "Edit item"
msgstr "Eintrag bearbeiten"
#: agenda/templates/agenda/edit.html:10 agenda/templates/agenda/edit.html:19
#: agenda/templates/agenda/overview.html:58
#: agenda/templates/agenda/overview.html:43
msgid "New item"
msgstr "Neuer Eintrag"
#: agenda/templates/agenda/edit.html:22 agenda/templates/agenda/view.html:29
#: agenda/templates/agenda/edit.html:22 agenda/templates/agenda/view.html:24
#: assignment/templates/assignment/edit.html:22
#: assignment/templates/assignment/view.html:20
#: mediafile/templates/mediafile/mediafile_form.html:22
@ -298,17 +290,9 @@ msgstr "Abbrechen"
msgid "required"
msgstr "erforderlich"
#: agenda/templates/agenda/item_row.html:7
msgid "Change status (open/closed)"
msgstr "Status ändern (offen/abgeschlossen)"
#: agenda/templates/agenda/item_row.html:34
msgid "End"
msgstr "Ende"
#: agenda/templates/agenda/item_row.html:42
#: agenda/templates/agenda/overview.html:117
#: agenda/templates/agenda/view.html:45 agenda/templates/agenda/widget.html:8
#: agenda/templates/agenda/item_row.html:9
#: agenda/templates/agenda/overview.html:99
#: agenda/templates/agenda/view.html:40 agenda/templates/agenda/widget.html:8
#: agenda/templates/agenda/widget.html:23
#: assignment/templates/assignment/overview.html:54
#: assignment/templates/assignment/widget.html:7
@ -324,7 +308,7 @@ msgstr "Ende"
msgid "Show"
msgstr "Anzeigen"
#: agenda/templates/agenda/item_row.html:47
#: agenda/templates/agenda/item_row.html:14
#: agenda/templates/agenda/widget.html:26
#: assignment/templates/assignment/overview.html:59
#: assignment/templates/assignment/view.html:170
@ -341,38 +325,53 @@ msgstr "Anzeigen"
msgid "Edit"
msgstr "Bearbeiten"
#: agenda/templates/agenda/item_row.html:50
#: agenda/templates/agenda/view.html:100 agenda/templates/agenda/view.html:114
#: agenda/templates/agenda/view.html:147
#: agenda/templates/agenda/item_row.html:17
#: agenda/templates/agenda/view.html:95 agenda/templates/agenda/view.html:109
#: agenda/templates/agenda/view.html:142
#: assignment/templates/assignment/overview.html:62
#: assignment/templates/assignment/view.html:171
#: mediafile/templates/mediafile/mediafile_list.html:38
#: motion/templates/motion/category_list.html:33
#: motion/templates/motion/motion_detail.html:133
#: motion/templates/motion/motion_list.html:91
#: motion/templates/motion/motion_list.html:90
#: participant/templates/participant/group_overview.html:37
#: participant/templates/participant/overview.html:123
#: projector/templates/projector/custom_slide_widget.html:23
msgid "Delete"
msgstr "Löschen"
#: agenda/templates/agenda/item_row.html:54
#: agenda/templates/agenda/item_row.html:21
#: agenda/templates/agenda/widget.html:40
msgid "Show summary for this item"
msgstr "Zusammenfassung für diesen Eintrag anzeigen"
#: agenda/templates/agenda/overlay_speaker_projector.html:27
#: agenda/templates/agenda/view.html:153
#: agenda/templates/projector/agenda_list_of_speaker.html:32
#: agenda/templates/agenda/item_row.html:33
msgid "End"
msgstr "Ende"
#: agenda/templates/agenda/item_row.html:52
msgid "Change status (open/closed)"
msgstr "Status ändern (offen/abgeschlossen)"
#: agenda/templates/agenda/overlay_speaker_projector.html:5
#: agenda/templates/agenda/overlay_speaker_widget.html:5
#: agenda/templates/agenda/view.html:57
#: agenda/templates/projector/agenda_list_of_speaker.html:9
msgid "List of speakers"
msgstr "Rednerliste"
#: agenda/templates/agenda/overlay_speaker_projector.html:12
#: agenda/templates/agenda/view.html:148
#: agenda/templates/projector/agenda_list_of_speaker.html:28
msgid "The list of speakers is empty."
msgstr "Die Rednerliste ist leer."
#: agenda/templates/agenda/overview.html:47
#: agenda/templates/agenda/overview.html:32
msgid "Do you want to save the changed order of agenda items?"
msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?"
#: agenda/templates/agenda/overview.html:49
#: agenda/templates/agenda/view.html:130 assignment/models.py:288
#: agenda/templates/agenda/overview.html:34
#: agenda/templates/agenda/view.html:125 assignment/models.py:288
#: assignment/views.py:593 assignment/templates/assignment/view.html:204
#: assignment/templates/assignment/view.html:208
#: assignment/templates/projector/Assignment.html:78
@ -384,8 +383,8 @@ msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?"
msgid "Yes"
msgstr "Ja"
#: agenda/templates/agenda/overview.html:50
#: agenda/templates/agenda/view.html:131 assignment/models.py:288
#: agenda/templates/agenda/overview.html:35
#: agenda/templates/agenda/view.html:126 assignment/models.py:288
#: assignment/views.py:594 assignment/templates/assignment/view.html:205
#: assignment/templates/projector/Assignment.html:79 motion/models.py:725
#: motion/pdf.py:147 motion/pdf.py:270
@ -395,7 +394,7 @@ msgstr "Ja"
msgid "No"
msgstr "Nein"
#: agenda/templates/agenda/overview.html:58
#: agenda/templates/agenda/overview.html:43
#: assignment/templates/assignment/overview.html:12
#: mediafile/templates/mediafile/mediafile_list.html:12
#: motion/templates/motion/category_list.html:13
@ -406,37 +405,37 @@ msgstr "Nein"
msgid "New"
msgstr "Neu"
#: agenda/templates/agenda/overview.html:60
#: agenda/templates/agenda/overview.html:45
msgid "Print agenda as PDF"
msgstr "Tagesordnung als PDF drucken"
#: agenda/templates/agenda/overview.html:68
#: agenda/templates/agenda/overview.html:53
msgid "Start of event"
msgstr "Beginn der Veranstaltung"
#: agenda/templates/agenda/overview.html:72
#: agenda/templates/agenda/overview.html:57
msgid "Estimated end"
msgstr "Voraussichtliches Ende"
#: agenda/templates/agenda/overview.html:79
#: agenda/templates/agenda/overview.html:64
msgid "Hide closed items"
msgstr "Verstecke abgeschlossene Einträge"
#: agenda/templates/agenda/overview.html:83
#: agenda/templates/agenda/overview.html:68
msgid "item"
msgid_plural "items"
msgstr[0] "Eintrag"
msgstr[1] "Einträge"
#: agenda/templates/agenda/overview.html:88
#: agenda/templates/agenda/overview.html:73
msgid "Item"
msgstr "Eintrag"
#: agenda/templates/agenda/overview.html:93
#: agenda/templates/agenda/overview.html:78
msgid "Duration"
msgstr "Dauer"
#: agenda/templates/agenda/overview.html:96
#: agenda/templates/agenda/overview.html:81
#: assignment/templates/assignment/overview.html:38
#: mediafile/templates/mediafile/mediafile_list.html:24
#: motion/templates/motion/category_list.html:23
@ -447,7 +446,7 @@ msgstr "Dauer"
msgid "Actions"
msgstr "Aktionen"
#: agenda/templates/agenda/overview.html:133
#: agenda/templates/agenda/overview.html:122
#: agenda/templates/agenda/widget.html:51
#: projector/templates/projector/custom_slide_widget.html:34
msgid "No items available."
@ -457,65 +456,65 @@ msgstr "Keine Einträge vorhanden."
msgid "Put me on the current list of speakers"
msgstr "Auf die aktuelle Rednerliste setzen"
#: agenda/templates/agenda/view.html:33
#: agenda/templates/agenda/view.html:28
#: assignment/templates/assignment/view.html:29
#: motion/templates/motion/motion_detail.html:34
msgid "More actions"
msgstr "Mehr Aktionen"
#: agenda/templates/agenda/view.html:38
#: agenda/templates/agenda/view.html:33
msgid "Delete item"
msgstr "Eintrag löschen"
#: agenda/templates/agenda/view.html:62
#: agenda/templates/agenda/view.html:57
msgid "closed"
msgstr "geschlossen"
#: agenda/templates/agenda/view.html:66
#: agenda/templates/agenda/view.html:61
msgid "Open list"
msgstr "Liste öffnen"
#: agenda/templates/agenda/view.html:68
#: agenda/templates/agenda/view.html:63
msgid "Close list"
msgstr "Liste schließen"
#: agenda/templates/agenda/view.html:74 agenda/templates/agenda/widget.html:34
#: agenda/templates/agenda/view.html:69 agenda/templates/agenda/widget.html:34
msgid "Show list of speakers"
msgstr "Rednerliste projizieren"
#: agenda/templates/agenda/view.html:76
#: agenda/templates/agenda/view.html:71
msgid "Show list"
msgstr "Liste projizieren"
#: agenda/templates/agenda/view.html:84
#: agenda/templates/agenda/view.html:79
msgid "Last speakers"
msgstr "Letzte Redner"
#: agenda/templates/agenda/view.html:88
#: agenda/templates/agenda/view.html:83
msgid "Show all speakers"
msgstr "Alle Redner anzeigen"
#: agenda/templates/agenda/view.html:127
#: agenda/templates/agenda/view.html:122
msgid "Do you want to save the changed order of speakers?"
msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?"
#: agenda/templates/agenda/view.html:138
#: agenda/templates/agenda/view.html:133
msgid "Next speakers:"
msgstr "Nächste Redner"
#: agenda/templates/agenda/view.html:146
#: agenda/templates/agenda/view.html:141
msgid "Next speaker"
msgstr "Nächster Redner"
#: agenda/templates/agenda/view.html:160
#: agenda/templates/agenda/view.html:154
msgid "Remove me from the list"
msgstr "Entferne mich von der Liste"
#: agenda/templates/agenda/view.html:162
#: agenda/templates/agenda/view.html:156
msgid "Put me on the list"
msgstr "Setze mich auf die Liste"
#: agenda/templates/agenda/view.html:173
#: agenda/templates/agenda/view.html:166
#: assignment/templates/assignment/poll_view.html:83
#: assignment/templates/assignment/view.html:112
#: motion/templates/motion/poll_form.html:70
@ -524,7 +523,7 @@ msgstr "Setze mich auf die Liste"
msgid "Apply"
msgstr "Übernehmen"
#: agenda/templates/agenda/view.html:175
#: agenda/templates/agenda/view.html:168
#: assignment/templates/assignment/view.html:114
msgid "Add new participant"
msgstr "Neue/n Teilnehmer/in hinzufügen"
@ -1033,8 +1032,8 @@ msgid "Election results"
msgstr "Wahlergebnisse"
#: assignment/templates/assignment/view.html:163
msgid "Publish/unpublish results"
msgstr "Ergebnisse veröffentlichen/unveröffentlichen"
msgid "Publish results"
msgstr "Ergebnisse veröffentlichen"
#: assignment/templates/assignment/view.html:178
#: assignment/templates/assignment/view.html:259
@ -1279,7 +1278,7 @@ msgstr "Status"
msgid "Vote"
msgstr "Abstimmung"
#: motion/pdf.py:254 motion/templates/motion/motion_list.html:104
#: motion/pdf.py:254 motion/templates/motion/motion_list.html:102
msgid "No motions available."
msgstr "Keine Anträge vorhanden."
@ -1535,7 +1534,7 @@ msgstr "Abstimmung gelöscht"
#: motion/views.py:523
msgid "Poll"
msgstr ""
msgstr "Abstimmung"
#: motion/views.py:559
#, python-format
@ -1767,7 +1766,7 @@ msgstr "Antragstitel"
msgid "Number of supporters"
msgstr "Anzahl der Unterstützer/innen"
#: motion/templates/motion/motion_list.html:96
#: motion/templates/motion/motion_list.html:94
msgid "Print motion as PDF"
msgstr "Antrag als PDF drucken"

View File

@ -27,7 +27,7 @@ from .models import Motion
# Needed to count the delegates
# TODO: find another way to do this.
from openslides.participant.models import User
from openslides.participant.models import User, Group
def motions_to_pdf(pdf):
@ -277,7 +277,11 @@ def motion_poll_to_pdf(pdf, poll):
# set number of ballot papers
if ballot_papers_selection == "NUMBER_OF_DELEGATES":
# TODO: get this number from persons
number = User.objects.filter(type__iexact="delegate").count()
try:
if Group.objects.get(pk=3):
number = User.objects.filter(groups__pk=3).count()
except Group.DoesNotExist:
number = 0
elif ballot_papers_selection == "NUMBER_OF_ALL_PARTICIPANTS":
# TODO: get the number from the persons
number = int(User.objects.count())

View File

@ -20,6 +20,8 @@ from django.utils.translation import ugettext as _, ugettext_lazy, ugettext_noop
from django.views.generic.detail import SingleObjectMixin
from django.http import Http404
from reportlab.platypus import SimpleDocTemplate
from openslides.utils.pdf import stylesheet
from openslides.utils.views import (
TemplateView, RedirectView, UpdateView, CreateView, DeleteView, PDFView,
@ -511,6 +513,7 @@ class PollPDFView(PollMixin, PDFView):
"""
permission_required = 'motion.can_manage_motion'
top_space = 0
def get(self, *args, **kwargs):
self.object = self.get_object()
@ -522,6 +525,14 @@ class PollPDFView(PollMixin, PDFView):
"""
return u'%s%s_%s' % (_("Motion"), str(self.object.poll_number), _("Poll"))
def get_template(self, buffer):
return SimpleDocTemplate(
buffer, topMargin=-6, bottomMargin=-6, leftMargin=0, rightMargin=0,
showBoundary=False)
def build_document(self, pdf_document, story):
pdf_document.build(story)
def append_to_pdf(self, pdf):
"""
Append PDF objects.