This commit is contained in:
Oskar Hahn 2012-07-19 11:16:38 +02:00
commit f928abd006
26 changed files with 360 additions and 92 deletions

17
INSTALL
View File

@ -79,12 +79,14 @@ II. Installation on GNU/Linux and MacOSX
1. Install requirements:
OpenSlides requires following programs, which should be
installed first: Python Programming Language 2 (>= 2.5),
virtualenv (>= 1.4.1), ReportLab Toolkit and
Python Imaging Library (PIL):
installed first:
+ Python Programming Language 2 (>= 2.5),
+ virtualenv (>= 1.4.1),
+ ReportLab Toolkit and
+ Python Imaging Library (PIL)
E.g. for ubuntu run:
$ sudo apt-get install python python-virtualenv python-reportlab python-imagin
$ sudo apt-get install python python-virtualenv python-reportlab python-imaging
2. Get OpenSlides:
@ -105,6 +107,9 @@ II. Installation on GNU/Linux and MacOSX
Go to the (extracted/cloned) root directory of OpenSlides
and create virtualenv environment:
$ virtualenv .venv
For virtualenv >= 1.7 use instead:
$ virtualenv --system-site-packages .venv
4. Activate the virtual environment:
@ -116,9 +121,11 @@ II. Installation on GNU/Linux and MacOSX
$ 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
6. Start OpenSlides server and open URL in your default browser:
$ python start.py

View File

@ -19,6 +19,16 @@ Installieren Sie OpenSlides wie hier__ beschrieben. Starten Sie den Server wie h
.. __: chapter2.html#erster-login
Ändern des Administrator-Passworts
----------------------------------
Ändern Sie zuerst das Passwort des Administrators. Klicken Sie oben rechts auf „Benutzereinstellungen“ und dann im linken Seitenmenü auf „Passwort Einstellungen“. Geben Sie in die entsprechenden Felder Ihr altes Passwort ``admin`` und als neues Passwort ``geheim`` ein. Wiederholen Sie das neue Passwort im dritten Formularfeld. Bestätigen Sie die Eingabe mit ``Speichern``.
**TODO:** Prüfen, ob `Ticket #310 <http://dev.openslides.org/ticket/310>`_ erfüllt ist
.. image:: _static/images/tutorial_de_01.png
Konfiguration des Systems
-------------------------
@ -26,17 +36,17 @@ Zunächst sind einige Einstellungen wie die Rahmendaten der Veranstaltung und di
Wechseln Sie zum Tab „Konfiguration“ und geben Sie die Allgemeinen Einstellungen wie folgt ein:
.. image:: _static/images/tutorial_de_01.png
.. image:: _static/images/tutorial_de_02.png
Klicken Sie anschließend auf ``Speichern``. Auch bei allen folgenden Eingaben dieses Tutorials müssen Sie stets auf ``Speichern`` klicken, um die Eingabe abzuschließen.
Klicken Sie links auf „Antrag“ und stellen Sie die Antragseinleitung und die Anzahl der Stimmzettel wie folgt ein:
.. image:: _static/images/tutorial_de_02.png
.. image:: _static/images/tutorial_de_03.png
Klicken Sie links auf „Wahl“ und stellen Sie ebenfalls die Anzahl der Stimmzettel wie folgt ein:
.. image:: _static/images/tutorial_de_03.png
.. image:: _static/images/tutorial_de_04.png
Bei Anträgen und Wahlen kann es unter Umständen vorkommen, dass verschieden viele Stimmzettel benötigt werden, weshalb hierfür jeweils eigene Einstellungen vorzunehmen sind.
@ -50,21 +60,21 @@ Nun sind die Teilnehmer und Teilnehmerinnen einzutragen. Personen, die das Syste
Wechseln Sie zum Tab „Teilnehmer/innen“. Klicken Sie links auf „Neue/r Teilnehmer/in“ und geben Sie einen neuen Teilnehmer wie folgt ein:
.. image:: _static/images/tutorial_de_04.png
.. image:: _static/images/tutorial_de_05.png
Wiederholen Sie diese Schritte und geben Sie folgende weitere Teilnehmer und Teilnehmerinnen ein: Peter Müller, Franziska Meyer, Luise Schmidt und Hans Schulze.
Wenn Sie anschließend links auf „Alle Teilnehmer/innen“ klicken, müssten Sie folgende Übersicht sehen:
.. image:: _static/images/tutorial_de_05.png
.. image:: _static/images/tutorial_de_06.png
*Bei Ihrer eigenen Veranstaltung lohnt es sich, zuvor alle Teilnehmer und Teilnehmerinnen in einer CSV-Datei zu erfassen und wie hier (**TODO LINK**) erläutert zu importieren.*
Klicken Sie nur beim Teilnehmer „Max Mustermann“ unter der Rubrik „Aktionen“ auf das Bearbeiten-Symbol |document-edit| und weisen Sie der Person die Benutzerrollen „Tagesleitung“ und „Delegierter“ zu. Um mehrere Einträge auszuwählen, halten Sie beim Anklicken die Taste ``Strg`` gedrückt.
.. image:: _static/images/tutorial_de_06.png
.. image:: _static/images/tutorial_de_07.png
Um das Passwort von Max Mustermann neu zu setzen, klicken Sie erneut auf das Bearbeiten-Symbol |document-edit| und tragen Sie unten unter „Erst-Passwort“ ein neues, selbstgewähltes Passwort ein. Anschließend klicken Sie auf „Übernehmen“ und erst danach auf den Link „Auf Erst-Passwort zurücksetzen“. Bestätigen Sie den oben auf der Seite erscheinenden Dialog mit „Ja“. Für dieses Tutorial sei als Passwort „geheim“ gewählt.
Um das Passwort von Max Mustermann neu zu setzen, klicken Sie erneut auf das Bearbeiten-Symbol |document-edit| und tragen Sie unten unter „Erst-Passwort“ ein neues, selbstgewähltes Passwort ein. Für dieses Tutorial sei als Passwort ``geheim`` gewählt. Anschließend klicken Sie auf „Übernehmen“ und erst danach auf den Link „Auf Erst-Passwort zurücksetzen“. Bestätigen Sie den oben auf der Seite erscheinenden Dialog mit „Ja“.
.. |document-edit| image:: _static/images/document-edit.png
@ -76,21 +86,21 @@ Vor Beginn der Veranstaltung liegen bereits zwei Anträge an die Versammlung vor
Wechseln Sie zum Tab „Anträge“ und klicken Sie links auf „Neuer Antrag“. Geben Sie einen Antrag wie folgt ein:
.. image:: _static/images/tutorial_de_07.png
.. image:: _static/images/tutorial_de_08.png
Die Antragsseite müsste nun wie folgt aussehen:
.. image:: _static/images/tutorial_de_08.png
.. image:: _static/images/tutorial_de_09.png
Da der Antrag in unserem Fall ohne weitere Voraussetzungen (formal) zulässig ist, klicken Sie rechts auf „Zulassen“. Dem Antrag wird automatisch eine fortlaufende Nummer zugewiesen.
Geben Sie auf die gleiche Weise einen weiteren Antrag wie folgt ein:
.. image:: _static/images/tutorial_de_09.png
.. image:: _static/images/tutorial_de_10.png
Danach klicken Sie wieder auf „Zulassen“. Die Antragsübersicht (links bei „Alle Anträge“) müsste nun so aussehen:
.. image:: _static/images/tutorial_de_10.png
.. image:: _static/images/tutorial_de_11.png
Eingabe der anstehenden Wahlen/Wahlämter
@ -98,64 +108,172 @@ Eingabe der anstehenden Wahlen/Wahlämter
Ebenfalls vor Veranstaltungsbeginn sind die anstehenden Wahlen vorzubereiten. Geben Sie dazu im Tab „Wahlen“ links unter „Neue Wahl“ ein Wahlamt wie folgt ein:
.. image:: _static/images/tutorial_de_11.png
.. image:: _static/images/tutorial_de_12.png
Geben Sie auf die gleiche Weise einen weiteres Wahlamt wie folgt ein:
.. image:: _static/images/tutorial_de_12.png
.. image:: _static/images/tutorial_de_13.png
Die Wahlübersicht (links bei „Alle Wahlen“) müsste nun so aussehen:
.. image:: _static/images/tutorial_de_13.png
.. image:: _static/images/tutorial_de_14.png
Eingabe der Tagesordnung
------------------------
Die Tagesordnung enthält bereits drei/sieben Einträge. Fügen Sie zunächst einige weitere Einträge hinzu.
Die Tagesordnung enthält noch keine Einträge. Legen Sie zunächst einige Einträge an.
Klicken Sie dazu im Tab „Tagesordnung“ auf „Neuer Eintrag“ und geben Sie den Eintrag wie folgt ein:
.. image:: _static/images/tutorial_de_14.png
.. image:: _static/images/tutorial_de_15.png
Erweitern Sie die Tagesordnung mit folgenden weiteren Punkten: bla bla bla (**TODO**)
Erweitern Sie die Tagesordnung mit folgenden weiteren Punkten: Bericht des Vorstandes, Satzungsänderung, Gartenfest, Sonstiges, Wahlen der Vereinsämter
Ziehen Sie nun mit der Maus an den gekreuzten Pfeilen des Punktes bla, um seine Position zu verändern. Richten Sie die Tagesordnung durch Verschieben der Punkte so ein, dass sie wie folgt aussieht:
.. image:: _static/images/tutorial_de_15.png
.. image:: _static/images/tutorial_de_16.png
Klicken Sie auf ``Speichern``, um die geänderte Reihenfolge festzulegen.
*Zu jedem Antrag und zu jedem Wahlamt können Sie über einen Link im Seitenmenü des betreffenden Antrags oder Wahlamts auch einen eigenen Eintrag in der Tagesordnung erstellen, der direkt mit der Antrags- bzw. Wahlfolie verknüpft ist. Dies empfiehlt sich, wenn ein einzelner Antrag oder eine einzelne Wahl an einer bestimmten Stelle der Tagesordnung behandelt werden soll.*
Hinzufügen weitere Beamerfolien
-------------------------------
Ändern Sie nun den Inhalt des Tagesordnungspunktes „Bericht des Vorstandes“, indem Sie in der Zeile dieses Punktes auf das Bearbeiten-Symbol |document-edit| klicken und zusätzlich zum Titel einen Text zum Tagesordnungspunkt wie folgt eingeben:
Wechseln Sie zum Tab „Beamer“. Wie Sie sehen, sind alle Tagesordnungseinträge sowie die angelegten Anträge und Wahlämter bereits als Folien auswählbar.
.. image:: _static/images/tutorial_de_17.png
**TODO: Weitere Folien hinzufügen.**
.. |document-edit| image:: _static/images/document-edit.png
Hinzufügen benutzerdefinierter Folien
-------------------------------------
Wechseln Sie zum Tab „Projektor“. Wie Sie sehen, sind alle Tagesordnungseinträge sowie die angelegten Anträge und Wahlämter bereits als Folien auswählbar.
Fügen Sie noch eine benutzerdefinierte Folie mit dem Titel „Kaffeepause“ hinzu, indem Sie bei dem Fenster „Benutzerdefinierte Folien“ auf „Neue Folie“ klicken und wie schon zuvor die Folie eintragen.
Die Ansicht im Tab „Projektor“ müsste nun wie folgt aussehen:
.. image:: _static/images/tutorial_de_18.png
Technische Einrichtung im Veranstaltungsraum
--------------------------------------------
Richten Sie Ihren Veranstaltungsraum ein. Im Präsentationsmodus Single schließen Sie den Beamer an Ihren Computer an und schieben ein zweites Browserfenster auf den erweiterten Bildschirm. Ansonsten richten Sie ein Netzwerk ein, schließen Sie einen beliebigen Computer an den Beamer an und öffnen im Vollbildmodus die Seite mit der Beameransicht. Den entsprechend Link finden Sie bei OpenSlides im Tab „Beamer“ auf der linken Seite.
Richten Sie Ihren Veranstaltungsraum ein. Im Präsentationsmodus Single schließen Sie den Beamer an Ihren Computer an und schieben ein zweites Browserfenster auf den erweiterten Bildschirm. Ansonsten richten Sie ein Netzwerk ein, schließen Sie einen beliebigen Computer an den Beamer an und öffnen im Vollbildmodus die Seite mit der Projektoransicht. Den entsprechend Link finden Sie bei OpenSlides im Tab „Projektor“ auf der linken Seite.
Testen
------
Testen Sie, ob auf dem Beamer die gewünschten Folien zu sehen sind, wenn Sie bei OpenSlides im Tab „Beamer“ verschiedene Folien auswählen. Sie können eine bestimmte Folien anwählen, indem Sie auf das jeweilige graue Beamersymbol klicken. Die jeweils aktive Folie zeigt ein blaues Symbol.
Testen Sie, ob auf dem Beamer die gewünschten Folien zu sehen sind, wenn Sie bei OpenSlides im Tab „Projektor“ verschiedene Folien auswählen. Sie können eine bestimmte Folien anwählen, indem Sie auf den jeweiligen grauen Haken klicken. Die jeweils aktive Folie zeigt einen blauen Haken.
Die verschiedenen Folien müssten auf dem Beamer wie folgt aussehen:
.. image:: _static/images/tutorial_de_19.png
.. image:: _static/images/tutorial_de_20.png
.. image:: _static/images/tutorial_de_21.png
.. image:: _static/images/tutorial_de_22.png
.. image:: _static/images/tutorial_de_23.png
Durchführung der Veranstaltung
++++++++++++++++++++++++++++++
Aufgabenteilung: Vorsitzender leitet die Versammlung, Sie steuern den Beamer, ein Dritter (Max Mustermann) sitzt am Drucker.
TODO: Schilder des Ablaufs während der Versammlung, klicken hin und her, Anträge, geheime Abstimmungm, Wahlzettel, Ergebnisse eintragen, bestätigen. Redezeitbegrenzung, spontane Rednerliste
Aufgabenteilung, ein andere macht Login als MaxMustermann, wählt die Kandidaten
Für die Durchführung der Veranstaltung gehen wir von folgender Aufgabenteilung aus. Der Vereinsvorsitzende leitet die Versammlung und sitzt in der Mitte des Podiums. Sie sitzen in seiner Nähe und steuern den Beamer, indem Sie im Tab „Projektor“ die jeweils gewünschten Folien auswählen. Herr Max Mustermann sitzt an einem weiteren Rechner, an dem ein Drucker angeschlossen ist. Im Präsentationsmodus Single muss auch der Drucker an ihren Rechner angeschlossen sein. Die Rolle des Max Mustermann entfällt.
Beginn und erste Tagesordnungspunkte
------------------------------------
Zu Beginn der Versammlung wählen Sie im Tab „Projektor“ die Willkommensseite aus, so dass Ihre Ansicht und die Beameransicht wie folgt zu sehen sind:
.. image:: _static/images/tutorial_de_24.png
.. image:: _static/images/tutorial_de_25.png
Während die ersten Tagesordnungspunkte abgehandelt werden, wählen Sie indem Sie im Tab „Projektor“ die jeweils gewünschten Folien aus.
Da zwischendurch ein Fußballergebnis angezeigt werden soll, schreiben Sie im Fenster „Einblendungen“ unter „Message“ die Nachricht „Bayern 1 : 1 Dortmund“, klicken auf „Übernehmen“ und aktivieren die Einblendung, indem Sie auf den davor gestellten grauen Haken klicken.
Das Beamerbild sieht dann wie folgt aus:
.. image:: _static/images/tutorial_de_26.png
Schalten Sie die Einblendung wieder aus, indem Sie erneut auf den (nunmehr blauen) Haken klicken.
Anträge
-------
Wenn der Vorsitzende den Antrag zur Satzungsänderung aufruft, klicken Sie zunächst im Tab „Projektor“ auf den entsprechenden Haken vor dem ersten Antrag.
Um schnell zur Antragsverwaltung zu wechseln, können Sie auf den Titel des Antrags klicken.
Die Antragsansicht sieht dann wie folgt aus:
.. image:: _static/images/tutorial_de_27.png
Nach Abschluss der Diskussion ruft der Vorsitzende zur Abstimmung. Klicken Sie auf „Neue Abstimmung“ und tragen Sie das Abstimmungsergebnis wie folgt in das Formular ein:
.. image:: _static/images/tutorial_de_28.png
Der Vorsitzende stellt fest, dass der Antrag angenommen ist. Klicken Sie deshalb auf „Angenommen“.
Das Beamerbild sieht nun wie folgt aus:
.. image:: _static/images/tutorial_de_29.png
Wahlen
------
Wenn der Vorsitzende die Wahlen zum neuen Vorstand aufruft, klicken Sie zunächst im Tab „Projektor“ auf den entsprechenden Haken vor der ersten Wahl. Wechseln Sie dann zur Wahlansicht, indem Sie auf den Titel der Wahl klicken.
Die Wahlansicht sieht dann wie folgt aus:
.. image:: _static/images/tutorial_de_30.png
Es werden nun verschiedene Kandidaten vorgeschlagen, die Sie durch Auswahl eines Teilnehmers und Klick auf „Übernehmen“ auf die Kandidatenliste setzen können.
*Das kleine Symbol neben dem dem Auswahlformular ist ein direkter Link zur Eingabe eines neuen Teilnehmers. Die kann sehr nützlich sein, wenn kurzfristig eine Person nominiert wird, die noch nicht ins System eingetragen wurde.*
.. image:: _static/images/tutorial_de_31.png
Steht die Kandidatenauswahl fest, ändern Sie rechts den Status der Wahl auf „Im Wahlgang“. Klicken Sie anschließend unten auf „Neuer Wahlgang“, um einen ersten Wahlgang anzulegen. Da es eine geheime Wahl ist und die Stimmzettel erst ausgeteilt werden müssen, können Sie jetzt noch keine Wahlergebnisse eintragen.
Herr Max Mustermann, dessen Computer mit dem Drucker verbunden ist, begibt sich ins Netzwerk, ruft in seinem Browser die OpenSlides-Seite auf und loggt sich mit seinem Benutzernamen ``Max Mustermann`` und seinem Passwort ``geheim`` ein. Er klickt im Tab „Wahlen“ auf die erste Wahl und dort unten auf das Bearbeiten-Symbol |document-edit| bei ersten Wahlgang.
Seine Ansicht sieht dann wie folgt aus:
.. image:: _static/images/tutorial_de_32.png
.. |document-edit| image:: _static/images/document-edit.png
Anschließend klickt er auf „Stimmzettel als PDF“. OpenSlides liefert ihm daraufhin eine PDF-Datei, die er direkt ausdrucken kann. Die Stimmzettel können anschließend auseinandergeschnitten und verteilt werden.
*Bei mehrfachen Wahlen bietet es sich der Einsatz einer Hebelschere an.*
*Im Präsentationsmodus Single übernehmen Sie die Aufgaben des Max Mustermann selbst.*
Nach Auszählung der Stimmzettel tragen Sie die Ergebnisse in eben dieses Formular des ersten Wahlgangs ein:
.. image:: _static/images/tutorial_de_33.png
Klicken Sie anschließend auf den grauen Knopf bei ersten Wahlgang, um die Wahlergebnisse auf dem Beamer zu veröffentlichen.
.. image:: _static/images/tutorial_de_34.png
Schluss der Versammlung
-----------------------
Am Ende der Versammlung können Sie sich für das Protokoll einige Anhänge direkt aus OpenSlides holen. Klicken Sie jeweils im Tab „Tagesordnung“, „Anträge“ und „Wahlen“ auf die Links „Tagesordnung als PDF“, „Alle Anträge als PDF“ und „Alle Wahlen als PDF“, die sich jeweils im linken Seitenmenu befinden.
.. Aufgabenteilung: Vorsitzender leitet die Versammlung, Sie steuern den Beamer, ein Dritter (Max Mustermann) sitzt am Drucker. TODO: Schilder des Ablaufs während der Versammlung, klicken hin und her, Anträge, geheime Abstimmungm, Wahlzettel, Ergebnisse eintragen, bestätigen. Redezeitbegrenzung, spontane Rednerliste - Aufgabenteilung, ein andere macht Login als MaxMustermann, wählt die Kandidaten

View File

@ -0,0 +1,17 @@
from django import forms
TOPIC_CHOICES = (
('question', 'General question'),
('bug', 'Bug report'),
('reference', 'Add OpenSlides reference'),
)
class ContactForm(forms.Form):
error_css_class = 'error'
required_css_class = 'required'
topic = forms.ChoiceField(choices=TOPIC_CHOICES)
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)

View File

@ -98,8 +98,9 @@ TEMPLATE_LOADERS = (
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',

View File

@ -9,6 +9,10 @@ body {
}
.navbar .nav > li > a {
color: #cccccc;
font-size: 14px;
}
.navbar .nav.pull-right > li > a {
font-size: 12px;
}
.hero-unit {
margin-top: -15px;
@ -125,3 +129,26 @@ footer a:hover {
color: #FFFFFF;
text-decoration: underline;
}
ul.errorlist {
margin: 0;
padding: 0;
list-style: none outside none;
}
.errorlist li {
color: #DA3939;
font-size: 9px;
font-style: italic;
height: 13px;
padding: 0;
}
form .error {
color: #DA3939;
font-weight: bold;
}
form p.error {
margin-top: 0;
}
form .error input, form .error textarea {
border: 1px solid #DA3939;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -31,14 +31,15 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/" style="padding: 4px 20px;" title="Home">
<a class="brand" href="{% url home %}" style="padding: 4px 20px;" title="Home">
<img src="/static/img/openslides-logo_wide-light.png" height="31px">
</a>
<div class="nav-collapse">
<ul class="nav">
<li class="{% block mainmenu_about %}{% endblock %}"><a href="{% url about %}">{% trans "Über OpenSlides" %}</a></li>
<li class="{% block mainmenu_download %}{% endblock %}"><a href="{% url download %}">{% trans "Download" %}</a></li>
<li class="{% block mainmenu_support %}{% endblock %}"><a href="{% url support %}">{% trans "Support & Dokumentation" %}</a></li>
<li class="{% block mainmenu_support %}{% endblock %}"><a href="{% url support %}">{% trans "Support" %}</a></li>
<li class="{% block mainmenu_documentation %}{% endblock %}"><a href="{% url documentation %}">{% trans "Dokumentation" %}</a></li>
<li class="{% block mainmenu_development %}{% endblock %}"><a href="{% url development %}">{% trans "Entwicklung" %}</a></li>
</ul>
<ul class="nav pull-right">
@ -47,7 +48,9 @@
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<li {% if LANGUAGE_CODE == lang_code %}class="active"{% endif %}><a href="{{lang_code}}"><i class="icon-flag icon-white"></i> {{ lang_name }}</a></li>
<li {% if LANGUAGE_CODE == lang_code %}class="active"{% endif %}>
<a href="{% url home %}"><i class="icon-flag icon-white"></i> {{ lang_name }}</a>
</li>
{% endlanguage %}
{% endfor %}
</ul>
@ -90,11 +93,11 @@
</ul>
</div>
<div class="span2">
<h4>Support & Dokumentation</h4>
<h4>Hilfe</h4>
<ul class="unstyled">
<li><a href="{% url support %}">Professioneller Support</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">Handbuch</a></li>
<li><a href="{% url support %}">Support</a></li>
<li><a href="{% url documentation %}">Handbuch</a></li>
<li><a href="{% url faq %}">FAQ</a></li>
</ul>
</div>
<div class="span2">
@ -103,13 +106,13 @@
<li><a href="http://dev.openslides.org">Wiki</a></li>
<li><a href="http://dev.openslides.org/roadmap">Roadmap</a></li>
<li><a href="http://dev.openslides.org/report/3">Tickets</a></li>
<li><a href="http://dev.openslides.org/browser">Quellcode durchsuchen</a></li>
<li><a href="http://dev.openslides.org/browser">Quellcode</a></li>
</ul>
</div>
<div class="span2">
<h4>Mehr</h4>
<ul class="unstyled">
<li><a href="#">Spenden</a></li>
<li><a href="{% url donate %}">Spenden</a></li>
<li><a href="{% url contact %}">Kontakt</a></li>
<li><a href="{% url impressum %}">Impressum</a></li>
</ul>

View File

@ -0,0 +1,14 @@
{% extends "base.html" %}
{% load i18n %}
{% block mainmenu_documentation %}active{% endblock %}
{% block submenu %}
<div class="subnav subnav-fixed">
<ul class="nav nav-pills">
<li class="{% block submenu_documentation %}{% endblock %}"><a href="{% url documentation %}">Handbuch</a></li>
<li class="{% block submenu_faq %}{% endblock %}"><a href="{% url faq %}">FAQ</a></li>
</ul>
</div>
{% endblock %}

View File

@ -1,15 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block mainmenu_support %}active{% endblock %}
{% block submenu %}
<div class="subnav subnav-fixed">
<ul class="nav nav-pills">
<li class="{% block submenu_support %}{% endblock %}"><a href="{% url support %}">Professioneller Support</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">Handbuch</a></li>
</ul>
</div>
{% endblock %}

View File

@ -13,6 +13,12 @@ Kontaktmöglichkeiten zur OpenSlides Community
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ form.name_of_field.errors }}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
<h3>Mailinglisten</h3>
<p>OpenSlides bietet öffentliche Mailinglisten zur Koordination der Entwicklung

View File

@ -0,0 +1,21 @@
{% extends "base_documentation.html" %}
{% load i18n %}
{% block title %}{{ block.super }} - {% trans "Handbuch" %}{% endblock %}
{% block headline %}{% trans "Handbuch" %}{% endblock %}
{% block submenu_documentation %}active{% endblock %}
{% block lead %}
{% endblock %}
{% block content %}
<div class="row">
<div class="span6">
<p>TODO</p>
</div>
</div>
<p><br></p>
<p><br></p>
{% endblock %}

View File

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% load i18n %}
{% block title %}{{ block.super }} - {% trans "Spenden" %}{% endblock %}
{% block headline %}{% trans "Spenden" %}{% endblock %}
{% block mainmenu_donate %}active{% endblock %}
{% block content %}
<p>TODO</p>
{% endblock %}

View File

@ -0,0 +1,21 @@
{% extends "base_documentation.html" %}
{% load i18n %}
{% block title %}{{ block.super }} - {% trans "FAQ" %}{% endblock %}
{% block headline %}{% trans "FAQ" %}{% endblock %}
{% block submenu_faq %}active{% endblock %}
{% block lead %}
{% endblock %}
{% block content %}
<div class="row">
<div class="span6">
<p>TODO</p>
</div>
</div>
<p><br></p>
<p><br></p>
{% endblock %}

View File

@ -1,11 +1,11 @@
{% extends "base_support.html" %}
{% extends "base.html" %}
{% load i18n %}
{% block title %}{{ block.super }} - Support{% endblock %}
{% block headline %}Support{% endblock %}
{% block submenu_support %}active{% endblock %}
{% block mainmenu_support %}active{% endblock %}
{% block lead %}
Die Intevation GmbH bietet Ihnen professionellen Support beim Einsatz von OpenSlides auf Ihrer Veranstaltung an.

View File

@ -1,13 +1,15 @@
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.views.generic import TemplateView
from website import views
#from views import TemplateView
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
urlpatterns = i18n_patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^$', TemplateView.as_view(template_name="home.html"), name='home',),
url(r'^about/$', TemplateView.as_view(template_name="about.html"), name='about',),
url(r'^about/features$', TemplateView.as_view(template_name="features.html"), name='features',),
@ -16,8 +18,11 @@ urlpatterns = patterns('',
url(r'^about/press$', TemplateView.as_view(template_name="press.html"), name='press',),
url(r'^download/$', TemplateView.as_view(template_name="download.html"), name='download',),
url(r'^support/$', TemplateView.as_view(template_name="support.html"), name='support',),
url(r'^documentation/$', TemplateView.as_view(template_name="documentation.html"), name='documentation',),
url(r'^faq/$', TemplateView.as_view(template_name="faq.html"), name='faq',),
url(r'^development/$', TemplateView.as_view(template_name="development.html"), name='development',),
url(r'^contact/$', TemplateView.as_view(template_name="contact.html"), name='contact',),
url(r'^contact/$', 'website.views.contact', name='contact',),
url(r'^donate/$', TemplateView.as_view(template_name="donate.html"), name='donate',),
url(r'^demo/$', TemplateView.as_view(template_name="demo.html"), name='demo',),
url(r'^impressum/$', TemplateView.as_view(template_name="impressum.html"), name='impressum',),
)

View File

@ -1,7 +0,0 @@
# Oskar
class TemplateView(_TemplateView):
def get_context_data(self, **kwargs):
context = super(TemplateView, self).get_context_data(**kwargs)
context[request] = self.request
return context

View File

@ -1,9 +1,34 @@
from django.views.generic import TemplateView
#from django.views.generic import TemplateView
from django.shortcuts import render_to_response, render
from django.http import HttpResponseRedirect
class TemplateView():
from website.forms import ContactForm
def get_context_data(self, **kwargs):
context = super(TemplateView, self).get_context_data(**kwargs)
print self.request
# template_manipulation.send(sender=self.__class__, request=self.request, context=context)
return context
#class TemplateView(TemplateView):
# def get_context_data(self, **kwargs):
# context = super(TemplateView, self).get_context_data(**kwargs)
# context[request] = self.request
# return context
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
subject = form.cleaned_data['subject']
message = form.cleaned_data['message']
sender = form.cleaned_data['sender']
cc_myself = form.cleaned_data['cc_myself']
recipients = ['emanuel@intevation.de']
if cc_myself:
recipients.append(sender)
from django.core.mail import send_mail
send_mail(subject, message, sender, recipients)
return HttpResponseRedirect('/demo/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render(request, 'contact.html', {
'form': form,
})

View File

@ -14,6 +14,11 @@
<li class="{% active request '/agenda/new/' %}"><a href="{% url item_new %}">{% trans "New item" %}</a></li>
{% endif %}
<li><a href="{% url print_agenda %}"><img src="{% static 'images/icons/pdf.png' %}"> {% trans 'Agenda as PDF' %}</a></li>
{% if perms.projector.can_see_projector %}
<li>
<a href="{% url projector_show %}"><img src="{% static 'images/icons/projector.png' %}"> {% trans 'Projector view' %}</a>
</li>
{% endif %}
</ul>
{# second submenu #}

View File

@ -106,7 +106,7 @@ class Application(models.Model, SlideMixin):
if version.id > self.permitted.id:
version.rejected = True
version.save()
self.writelog(pgettext("Rejected meens not permittd", "Version %d rejected")
self.writelog(pgettext("Rejected means not permitted", "Version %d rejected")
% (version.aid, ), user)
return True
return False

View File

@ -560,7 +560,7 @@ def reject_version(request, aversion_id):
def application_import(request):
try:
request.user.profile
messages.error(request, _('The import function is available for the superuser (without user profile) only.'))
messages.error(request, _('The import function is available for the admin (without user profile) only.'))
return redirect(reverse('application_overview'))
except Profile.DoesNotExist:
pass

View File

@ -1,7 +1,7 @@
Steps to update translation for OpenSlides:
------------------------------------------
Instruction to update translation for OpenSlides:
-------------------------------------------------
1. Go to project root directory:
1. Go to the openslides directory (which contains the 'locale' directory):
$ cd openslides
2. Update the German po file (locale/de/LC_MESSAGES/django.po):
@ -16,8 +16,10 @@ Steps to update translation for OpenSlides:
5. Restart server:
$ python manage.py runserver
--
Additional hints for internationalization (i18n) in Django:
- http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/
- http://docs.djangoproject.com/en/dev/topics/i18n/localization/
https://docs.djangoproject.com/en/dev/topics/i18n/
Note: gettext is required to extract message IDs or compile message files.
For gettext on Windows read:
https://docs.djangoproject.com/en/dev/topics/i18n/translation/#gettext-on-windows

View File

@ -392,7 +392,7 @@ def user_import(request):
from openslides.application.models import Application
try:
request.user.profile
messages.error(request, _('The import function is available for the superuser (without user profile) only.'))
messages.error(request, _('The import function is available for the admin (without user profile) only.'))
return redirect(reverse('user_overview'))
except Profile.DoesNotExist:
pass
@ -568,8 +568,11 @@ def login(request):
try:
admin = User.objects.get(pk=1)
if admin.check_password(config['admin_password']):
first_time_message = _("The password for the user %(user)s is "
"%(password)s. Please change it") % {
first_time_message = _("Installation was successfully! Use %(user)s "
"(password: %(password)s) for first login.<br>"
"<strong>Important:</strong> Please change the password after "
"first login! Otherwise this message still appears for everyone "
"and could be a security risk.") % {
'user': html_strong(admin.username),
'password': html_strong(config['admin_password'])}
else: