From 5521f70289babe4442c83756f07d24da76e01eba Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 14:18:32 +0200 Subject: [PATCH 01/14] Website: Add i18n language detection (of browser language) and language --- extras/website/website/settings.py | 3 ++- extras/website/website/templates/base.html | 6 ++++-- extras/website/website/urls.py | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/extras/website/website/settings.py b/extras/website/website/settings.py index 34f449087..78c5f5ee3 100644 --- a/extras/website/website/settings.py +++ b/extras/website/website/settings.py @@ -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', diff --git a/extras/website/website/templates/base.html b/extras/website/website/templates/base.html index b4e9a5ccd..ef10e90c2 100644 --- a/extras/website/website/templates/base.html +++ b/extras/website/website/templates/base.html @@ -47,7 +47,9 @@ {% get_available_languages as languages %} {% for lang_code, lang_name in languages %} {% language lang_code %} -
  • {{ lang_name }}
  • +
  • + {{ lang_name }} +
  • {% endlanguage %} {% endfor %} @@ -125,4 +127,4 @@ - \ No newline at end of file + diff --git a/extras/website/website/urls.py b/extras/website/website/urls.py index 1911684ca..f7cc764e8 100644 --- a/extras/website/website/urls.py +++ b/extras/website/website/urls.py @@ -7,7 +7,8 @@ from django.views.generic import TemplateView # 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',), From dddc327b90e51f8572edf2ab7e1d911656c8a17f Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 14:19:56 +0200 Subject: [PATCH 02/14] Website: Updated references logo sizes. --- .../static/img/references/aej-logo.png | Bin 6112 -> 4615 bytes .../static/img/references/esg-logo.png | Bin 3035 -> 4622 bytes .../static/img/references/gruene-logo.png | Bin 10824 -> 10174 bytes .../static/img/references/piraten-logo.png | Bin 7752 -> 10049 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/extras/website/website/static/img/references/aej-logo.png b/extras/website/website/static/img/references/aej-logo.png index 8006a447a9d99e7d7a2c52b791d607953d7ffb73..36e813030bb03963c244fa2feb01c5f63e0879f2 100644 GIT binary patch delta 3827 zcmVFOw0}eAZu_2-Y5k*9rB1llgfYDGS zRz$H76jZPWBnT)m7)4YpZ${ROuB^QG^78xRtZ(hJ_qqG*z0X<~0FtLKmzM@h0g%cQ z@Pj;@=@F4pbnF0t0Ult0DF94XM!H|He|rcJ$;-`!o*{AqUjza0dRV*yaMRE;fKCVh zpQKsoe1Yhg01=zBIT!&C1$=TK@rP|Ibo3vKKm@PqnO#L zJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2hoGcOF60t^#FqJFfH{#e-4l@G)6iI9se{fid zA~q2*i60W=BI4x$;7AEyaokrd;A9KLmvTu<&*5_u5(RV}mM-1Y+L}T4ZZyndax(`h}FNp#{x{a}MR#uh~ zm%}m=7xWMPPlvyuufAs_KJJh5&|Nw4Oks+EF0LCZEhSCJr)Q)ySsc3IpNIG#2mW;) z20@&74xhslMTCi_jLS<9wVTK03b<)JI+ypKn)naH{-njZ7KzgM5l~}{e}L3=DnNei z2Pg^=Akq89UH_wRzW6X8etF?4lZ$iz?>GHt!KLCQgPZU<&Lt>>&Jyx77x%=^5}*MA zNCGO52g*Pl=m0}t2CRTBa0G6^8~B3|5D8WT7DxoCfDf`j9@qp5K{40~_JC?o2O2>$ zXa&bXCpZPpgG=BVxB+g1fBRq*On_%#7Q6-v5CmZ%GDLyoAr(jy(ud3-24oMpLB3EB z6bZ#b2@nqwLV3_;s2D1Ps-b$Q8TuYN37v_t9A*$Rj+w(^f3fmdeXJeUAIroFu!Yzv>{0Al>=1SW`vynEso>0T?zku%50{Ut zz#YMz!42UiaSM1Uye8fT?~iBWbMU43MtnE^I(`DbK#(SA6YK~fge1ZyLM5SA?cA^NYNxAX$R>Lf9V|QF6kwiOx7YhlB381 z@(yw{`2zV7`Hcic!brkPf-SK@qDG=aVo2h-BwkWe(n)f)WUgd|}% zDW=qVsT!%1QX^7x(iCY^X@BWd=@RK9(pRLXWUw+?GHx<#nF5)EG8bgVDF{WK;zD6j zHd7iY7bz1|e+*Td>P1bW7E`~Y4p3)hWn`DhhRJ5j*2tcg9i<^OEt(fCg;q*CP8+7Z zTcWhYX$fb^_9d-LhL+6BEtPYW~-RzqPTn5!f8J`OVhQHre)w?bLGZ<(%b>%g621?3i}-cBA%m`&jz} z_M;A}4orszhsTcUj%>#!$4Mt$rzEGNPS2f9ocYe}&hsudF6&&*xgxF}u0^f`ZZdA6 ze{R)okKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^TY0bZ?)4%01p8F`JoeS| z<@UTb~$^RW5+4uOvc;Am&H#d*d^>vm`-#^tVo>Ux^SzxFOocy>XPP@{gV$Re}75| zPiafVrN*Y7H6t~>7#3G*6dj`%lF|oWk4CLGP(p*(a%)BP)E2$ zIF@OjS(EuDD=h0owsbZxyFW)SXM4_Mu6ypcYf)=iYkTrk^ETy;t#evezaCm2x4vhC z`i6oH6B|7?9^ORQl)UMue3SgLfBaXQ!#8&qC>3lh7~kTtrKM1!kY6~m)pl#$HqW8b%oZ=0JGnu?n~9O4}s zJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8No_-(u{qS+0<2@%B zCt82d{Gqm;(q7a7b>wu+e|9Ezj&?mT-%DP~zdZD6H`%M6xq!JxuTx(y%on|pe{=XP<89x&@OP67S?{s$D?jLd=>F*Q z@xiCmPoMq;1DNytk-%Epv&{+)0}B8FVoOIv0Eh)0NRc5Ie*gz`Nliru+y@c{FD@%z zeBb~81V~9lK~#9!?V9U)qA(CZNx20Ote}7vZQuVXw^bsS%p@Se57;^XYO~uM$Rslp zEsG!sf*=TjAP9mW2!bF8f*=UuRgRx`)-U3G+#wMXArTTG5fUL05+RXSi9$Qz>lcaG z9s8kjayslEeqHvqqiLfol78)T*d z4wvRbM9yITem3I)Jz&KO@XARAhfL z86R;X$8!jGt5_V#Pr_4+9F^svi4DxV&p3et2b^7Rmx{o3*b_PJdog}BZvyU;_2e?y z8P!vXf3)J`c99O0KMZWdk&hpFHsrzKzzG#1RTB@LQH_Z+Q@RoYA~v>{J@$qe7umxa znqL{g1w=%oTgYA(pdyOxsR^F9i
    Qeq-s%DD=YuXl+Ay(2`LwU3CTVyYMLPyHA^ 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 literal 3035 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 VHQrpi`Zrt$qbRE;Qzc~#`7e=MTvPx6 literal 10824 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 NNls0+Oxi5ye*pS$;}8G< literal 7752 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 BQ(yo9 From 33489522ebf4344baf78573d31a93c806e3288f8 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 17:56:41 +0200 Subject: [PATCH 03/14] Website: Test contact form. --- extras/website/website/static/css/style.css | 23 +++++++++++ extras/website/website/templates/contact.html | 8 +++- extras/website/website/urls.py | 4 +- extras/website/website/utils.py | 7 ---- extras/website/website/views.py | 39 +++++++++++++++---- 5 files changed, 65 insertions(+), 16 deletions(-) delete mode 100644 extras/website/website/utils.py diff --git a/extras/website/website/static/css/style.css b/extras/website/website/static/css/style.css index 6c236ee66..08a401717 100755 --- a/extras/website/website/static/css/style.css +++ b/extras/website/website/static/css/style.css @@ -125,3 +125,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; +} diff --git a/extras/website/website/templates/contact.html b/extras/website/website/templates/contact.html index 1d0895361..f88500af1 100644 --- a/extras/website/website/templates/contact.html +++ b/extras/website/website/templates/contact.html @@ -13,6 +13,12 @@ Kontaktmöglichkeiten zur OpenSlides Community {% block content %} +
    {% csrf_token %} +{{ form.name_of_field.errors }} +{{ form.as_p }} + +
    +

    Mailinglisten

    OpenSlides bietet öffentliche Mailinglisten zur Koordination der Entwicklung @@ -71,4 +77,4 @@ Kanal: #openslides

    Bitte nutzen Sie unser Ticketsystem um Problem mit OpenSlides zu berichten.

    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/extras/website/website/urls.py b/extras/website/website/urls.py index f7cc764e8..75aae77eb 100644 --- a/extras/website/website/urls.py +++ b/extras/website/website/urls.py @@ -1,6 +1,7 @@ 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: @@ -18,7 +19,8 @@ urlpatterns = i18n_patterns('', 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'^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'^contact/$', TemplateView.as_view(template_name="contact.html"), name='contact',), url(r'^demo/$', TemplateView.as_view(template_name="demo.html"), name='demo',), url(r'^impressum/$', TemplateView.as_view(template_name="impressum.html"), name='impressum',), ) diff --git a/extras/website/website/utils.py b/extras/website/website/utils.py deleted file mode 100644 index 62815b463..000000000 --- a/extras/website/website/utils.py +++ /dev/null @@ -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 \ No newline at end of file diff --git a/extras/website/website/views.py b/extras/website/website/views.py index 76b50a6bf..11e935f80 100644 --- a/extras/website/website/views.py +++ b/extras/website/website/views.py @@ -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 \ No newline at end of file +#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, + }) From 1546da8b08755a755641912c4a612b7ee557d071 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 20:31:21 +0200 Subject: [PATCH 04/14] Updated virtualenv command (system-site-packages option comes with v1.7). --- INSTALL | 3 +++ 1 file changed, 3 insertions(+) diff --git a/INSTALL b/INSTALL index ce9cefb23..d6ff17463 100644 --- a/INSTALL +++ b/INSTALL @@ -105,6 +105,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: $ virtualenv --system-site-packages .venv 4. Activate the virtual environment: From 9b3103d4a88ebc1b5398f00fe5bbb0b01ab8e0b4 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 20:44:02 +0200 Subject: [PATCH 05/14] #284: Updated i18n links and added gettext requirement note. --- openslides/locale/README.txt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/openslides/locale/README.txt b/openslides/locale/README.txt index b3f4dbd8d..0205dffc5 100644 --- a/openslides/locale/README.txt +++ b/openslides/locale/README.txt @@ -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): @@ -15,9 +15,11 @@ 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/ \ No newline at end of file +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 \ No newline at end of file From 3ee5337fa043b77032b2f0af2b215188f74f6128 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 21:07:13 +0200 Subject: [PATCH 06/14] Some minor changes. --- INSTALL | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/INSTALL b/INSTALL index d6ff17463..3f291ee55 100644 --- a/INSTALL +++ b/INSTALL @@ -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: @@ -107,7 +109,7 @@ II. Installation on GNU/Linux and MacOSX $ virtualenv .venv - For virtualenv >= 1.7 use: + For virtualenv >= 1.7 use: $ virtualenv --system-site-packages .venv 4. Activate the virtual environment: @@ -119,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 From 4fe77f89d3261e32b4ba939887d4888b6d5e0ee4 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 21:15:12 +0200 Subject: [PATCH 07/14] Updated translations. --- openslides/application/views.py | 2 +- openslides/locale/de/LC_MESSAGES/django.mo | Bin 34943 -> 34981 bytes openslides/locale/de/LC_MESSAGES/django.po | 165 ++++++++++++--------- openslides/participant/views.py | 6 +- 4 files changed, 102 insertions(+), 71 deletions(-) diff --git a/openslides/application/views.py b/openslides/application/views.py index ad4ab436c..dc8db38f9 100644 --- a/openslides/application/views.py +++ b/openslides/application/views.py @@ -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 diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index 8d9361b488e1fdc69ece64034d519948382516dc..96d72bf704ce32ba09de0b5209bae31f0e56513d 100644 GIT binary patch delta 7853 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 G+WZ&QaS6Nt delta 7843 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 diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 968a39e94..1c9c72d8b 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-18 10:52+0200\n" +"POT-Creation-Date: 2012-07-18 21:11+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emanuel Schuetze \n" "Language-Team: German\n" @@ -69,6 +69,8 @@ msgstr "Darf die Tagesordung verwalten" #: agenda/templates/agenda/overview.html:77 #: agenda/templates/projector/AgendaSummary.html:6 #: agenda/templates/projector/AgendaSummary.html:10 +#: application/templates/projector/overview.html:3 +#: application/templates/projector/overview.html:10 msgid "Agenda" msgstr "Tagesordnung" @@ -105,6 +107,9 @@ msgstr "Eintrag %s wurde erfolgreich gelöscht." #: application/views.py:487 application/views.py:809 application/views.py:860 #: application/templates/application/view.html:82 #: application/templates/projector/Application.html:37 +#: application/templates/projector/ItemApplication.html:30 +#: application/templates/projector/ItemAssignment.html:67 +#: application/templates/projector/ItemAssignment.html:71 #: assignment/models.py:240 assignment/views.py:557 #: assignment/templates/assignment/view.html:158 #: assignment/templates/assignment/view.html:162 @@ -119,6 +124,8 @@ msgstr "Ja" #: application/views.py:487 application/views.py:809 application/views.py:861 #: application/templates/application/view.html:83 #: application/templates/projector/Application.html:38 +#: application/templates/projector/ItemApplication.html:31 +#: application/templates/projector/ItemAssignment.html:68 #: assignment/models.py:240 assignment/views.py:558 #: assignment/templates/assignment/view.html:159 #: assignment/templates/projector/Assignment.html:79 utils/utils.py:53 @@ -342,6 +349,7 @@ msgstr "Bearbeiten" #: application/templates/application/view.html:232 #: application/templates/application/view.html:252 #: application/templates/projector/Application.html:77 +#: application/templates/projector/ItemApplication.html:56 msgid "Reason" msgstr "Begründung" @@ -357,6 +365,7 @@ msgstr "Triviale Änderungen erzeugen keine neue Version." #: application/templates/application/overview.html:41 #: application/templates/application/view.html:18 #: application/templates/projector/Application.html:55 +#: application/templates/projector/ItemApplication.html:19 msgid "Submitter" msgstr "Antragsteller/in" @@ -475,12 +484,6 @@ msgstr "Benötigt Review" msgid "Version %d permitted" msgstr "Version %d zugelassen" -#: application/models.py:109 -#, python-format -msgctxt "Rejected meens not permittd" -msgid "Version %d rejected" -msgstr "Version %d verworfen" - #: application/models.py:138 msgid "Searching for supporters." msgstr "Auf Unterstützersuche." @@ -726,10 +729,9 @@ msgstr "Soll Version %s wirklich zurückgewiesen werden?" #: application/views.py:563 participant/views.py:395 msgid "" -"The import function is available for the superuser (without user profile) " -"only." +"The import function is available for the admin (without user profile) only." msgstr "" -"Die Importfunktion ist nur für den 'superuser' (ohne Nutzerprofil) verfügbar." +"Die Importfunktion ist nur für den Admin (ohne Nutzerprofil) verfügbar." #: application/views.py:594 application/views.py:598 application/views.py:604 #: application/views.py:607 participant/views.py:464 @@ -793,6 +795,7 @@ msgstr "Keine Anträge vorhanden." #: application/views.py:738 #: application/templates/application/base_application.html:24 #: application/templates/projector/Application.html:63 +#: application/templates/projector/ItemApplication.html:50 msgid "Application No." msgstr "Antrag Nr." @@ -800,6 +803,8 @@ msgstr "Antrag Nr." #: application/templates/application/overview.html:40 #: application/templates/application/view.html:37 #: application/templates/projector/Application.html:11 +#: application/templates/projector/ItemApplication.html:8 +#: application/templates/projector/ItemAssignment.html:13 #: assignment/templates/assignment/overview.html:14 #: assignment/templates/assignment/overview.html:27 #: assignment/templates/assignment/view.html:11 @@ -828,19 +833,24 @@ msgstr "Abstimmungsergebnis" #: application/templates/application/view.html:69 #: application/templates/application/view.html:77 #: application/templates/projector/Application.html:33 +#: application/templates/projector/ItemApplication.html:27 msgid "Vote" msgstr "Abstimmung" #: application/views.py:809 application/views.py:862 #: application/templates/application/view.html:84 -#: application/templates/projector/Application.html:39 assignment/views.py:558 -#: assignment/templates/assignment/view.html:160 +#: application/templates/projector/Application.html:39 +#: application/templates/projector/ItemApplication.html:32 +#: application/templates/projector/ItemAssignment.html:69 +#: assignment/views.py:558 assignment/templates/assignment/view.html:160 #: assignment/templates/projector/Assignment.html:80 msgid "Abstention" msgstr "Enthaltung" #: application/views.py:809 application/templates/application/view.html:85 #: application/templates/projector/Application.html:40 +#: application/templates/projector/ItemApplication.html:33 +#: application/templates/projector/ItemAssignment.html:88 #: assignment/templates/assignment/view.html:182 #: assignment/templates/projector/Assignment.html:101 msgid "Invalid" @@ -849,8 +859,11 @@ msgstr "Ungültig" #: application/views.py:809 #: application/templates/application/poll_view.html:35 #: application/templates/application/view.html:87 -#: application/templates/projector/Application.html:42 assignment/views.py:442 -#: assignment/templates/assignment/poll_view.html:45 +#: application/templates/projector/Application.html:42 +#: application/templates/projector/ItemApplication.html:35 +#: application/templates/projector/ItemAssignment.html:93 +#: application/templates/projector/ItemAssignment.html:96 +#: assignment/views.py:442 assignment/templates/assignment/poll_view.html:45 #: assignment/templates/assignment/view.html:194 #: assignment/templates/assignment/view.html:199 #: assignment/templates/projector/Assignment.html:111 @@ -1027,8 +1040,9 @@ msgstr "Wahlmöglichkeit" msgid "Votes" msgstr "Stimmen" -#: application/templates/application/poll_view.html:31 assignment/views.py:435 -#: assignment/templates/assignment/poll_view.html:35 +#: application/templates/application/poll_view.html:31 +#: application/templates/projector/ItemAssignment.html:85 +#: assignment/views.py:435 assignment/templates/assignment/poll_view.html:35 #: assignment/templates/assignment/view.html:177 #: assignment/templates/projector/Assignment.html:97 msgid "Invalid votes" @@ -1168,19 +1182,82 @@ msgid "Log" msgstr "Log" #: application/templates/projector/Application.html:29 +#: application/templates/projector/ItemApplication.html:23 msgid "Poll result" msgstr "Abstimmungsergebnis" #: application/templates/projector/Application.html:47 +#: application/templates/projector/ItemApplication.html:41 msgid "No poll results available." msgstr "Keine Abstimmungen vorhanden." +#: application/templates/projector/ItemAssignment.html:8 +#: assignment/views.py:501 assignment/views.py:517 +#: assignment/templates/assignment/overview.html:25 +#: assignment/templates/assignment/poll_view.html:5 +#: assignment/templates/assignment/view.html:6 +#: assignment/templates/projector/Assignment.html:27 +msgid "Election" +msgstr "Wahl" + +#: application/templates/projector/ItemAssignment.html:16 #: assignment/forms.py:24 assignment/models.py:44 assignment/views.py:364 #: assignment/templates/assignment/view.html:13 #: assignment/templates/projector/Assignment.html:21 msgid "Number of available posts" msgstr "Anzahl der zur Wahl stehenden Posten" +#: application/templates/projector/ItemAssignment.html:30 +#: application/templates/projector/ItemAssignment.html:48 +#: assignment/views.py:370 assignment/views.py:403 +#: assignment/templates/assignment/overview.html:26 +#: assignment/templates/assignment/poll_view.html:18 +#: assignment/templates/assignment/view.html:36 +#: assignment/templates/assignment/view.html:110 +#: assignment/templates/projector/Assignment.html:38 +#: assignment/templates/projector/Assignment.html:56 +msgid "Candidates" +msgstr "Kandidaten/innen" + +#: application/templates/projector/ItemAssignment.html:36 +#: assignment/templates/assignment/view.html:47 +#: assignment/templates/projector/Assignment.html:44 +msgid "No candidates available." +msgstr "Keine Kandidaten/innen vorhanden." + +#: application/templates/projector/ItemAssignment.html:45 +#: assignment/templates/assignment/view.html:95 +#: assignment/templates/projector/Assignment.html:52 +msgid "Election results" +msgstr "Wahlergebnisse" + +#: application/templates/projector/ItemAssignment.html:51 +#: assignment/views.py:395 +#: assignment/templates/assignment/base_assignment.html:71 +#: assignment/templates/assignment/poll_view.html:5 +#: assignment/templates/assignment/poll_view.html:8 +#: assignment/templates/assignment/view.html:104 +#: assignment/templates/assignment/view.html:113 +#: assignment/templates/projector/Assignment.html:59 +msgid "ballot" +msgstr "Wahlgang" + +#: application/templates/projector/ItemAssignment.html:60 +#: assignment/templates/assignment/view.html:145 +#: assignment/templates/projector/Assignment.html:69 +msgid "Candidate is elected" +msgstr "Kandidat/in ist gewählt" + +#: application/templates/projector/ItemAssignment.html:81 +#: assignment/templates/assignment/view.html:213 +#: assignment/templates/projector/Assignment.html:126 +msgid "No ballots available." +msgstr "Keine Wahlgänge vorhanden." + +#: application/templates/projector/ItemPoll.html:4 +msgid "Poll about" +msgstr "Abstimmung über" + #: assignment/forms.py:35 msgid "Nominate a participant" msgstr "Teilnehmer/in vorschlagen" @@ -1382,26 +1459,6 @@ msgstr "Keine Wahlen vorhanden." msgid "Election: %s" msgstr "Wahlen: %s" -#: assignment/views.py:370 assignment/views.py:403 -#: assignment/templates/assignment/overview.html:26 -#: assignment/templates/assignment/poll_view.html:18 -#: assignment/templates/assignment/view.html:36 -#: assignment/templates/assignment/view.html:110 -#: assignment/templates/projector/Assignment.html:38 -#: assignment/templates/projector/Assignment.html:56 -msgid "Candidates" -msgstr "Kandidaten/innen" - -#: assignment/views.py:395 -#: assignment/templates/assignment/base_assignment.html:71 -#: assignment/templates/assignment/poll_view.html:5 -#: assignment/templates/assignment/poll_view.html:8 -#: assignment/templates/assignment/view.html:104 -#: assignment/templates/assignment/view.html:113 -#: assignment/templates/projector/Assignment.html:59 -msgid "ballot" -msgstr "Wahlgang" - #: assignment/views.py:398 msgid "ballots" msgstr "Wahlgänge" @@ -1417,14 +1474,6 @@ msgstr "" "N: %(NO)s\n" "E: %(ABSTAIN)s" -#: assignment/views.py:501 assignment/views.py:517 -#: assignment/templates/assignment/overview.html:25 -#: assignment/templates/assignment/poll_view.html:5 -#: assignment/templates/assignment/view.html:6 -#: assignment/templates/projector/Assignment.html:27 -msgid "Election" -msgstr "Wahl" - #: assignment/views.py:523 #, python-format msgid "%d. ballot" @@ -1512,11 +1561,6 @@ msgstr "Status ändern" msgid "Remove candidate" msgstr "Kandidate/in entfernen" -#: assignment/templates/assignment/view.html:47 -#: assignment/templates/projector/Assignment.html:44 -msgid "No candidates available." -msgstr "Keine Kandidaten/innen vorhanden." - #: assignment/templates/assignment/view.html:60 msgid "Withdraw self candidature" msgstr "Eigene Kandidatur zurückziehen" @@ -1529,11 +1573,6 @@ msgstr "Selbst kandidieren" msgid "Add new participant" msgstr "Neue/n Teilnehmer/in hinzufügen" -#: assignment/templates/assignment/view.html:95 -#: assignment/templates/projector/Assignment.html:52 -msgid "Election results" -msgstr "Wahlergebnisse" - #: assignment/templates/assignment/view.html:118 msgid "Publish/unpublish results" msgstr "Ergebnisse veröffentlichen/unveröffentlichen" @@ -1543,21 +1582,11 @@ msgstr "Ergebnisse veröffentlichen/unveröffentlichen" msgid "New ballot" msgstr "Neuer Wahlgang" -#: assignment/templates/assignment/view.html:145 -#: assignment/templates/projector/Assignment.html:69 -msgid "Candidate is elected" -msgstr "Kandidat/in ist gewählt" - #: assignment/templates/assignment/view.html:164 #: assignment/templates/projector/Assignment.html:84 msgid "was not a
    candidate" msgstr "war kein Kandidat" -#: assignment/templates/assignment/view.html:213 -#: assignment/templates/projector/Assignment.html:126 -msgid "No ballots available." -msgstr "Keine Wahlgänge vorhanden." - #: config/forms.py:24 msgid "Event name" msgstr "Veranstaltungsname" @@ -1890,9 +1919,12 @@ msgstr "Soll das Passwort für %s wirklich zurückgesetzt werden?" #: participant/views.py:571 #, python-format -msgid "The password for the user %(user)s is %(password)s. Please change it" +msgid "" +"Installation was successfully! Use %(user)s (password: %(password)s) for " +"first login and change password!" msgstr "" -"Das Passwort für den Benutzer %(user)s ist %(password)s. Bitte ändere es" +"Die Installation war erfolgreich! Bitte %(user)s (Passwort: %(password)s) für " +"die erste Anmeldung verwenden und das Passwort ändern!" #: participant/views.py:588 #: participant/templates/participant/base_participant.html:12 @@ -2185,7 +2217,6 @@ msgid "Custom slides" msgstr "Benutzerdefinierte Folien" #: projector/templates/projector/control_countdown.html:6 -msgctxt "seconds" msgid "s" msgstr "s" diff --git a/openslides/participant/views.py b/openslides/participant/views.py index bb8cfefbb..2574c2ed6 100644 --- a/openslides/participant/views.py +++ b/openslides/participant/views.py @@ -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,8 @@ 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 and change password!") % { 'user': html_strong(admin.username), 'password': html_strong(config['admin_password'])} else: From 688809c3e5a1b6d78fd021e80b1d59df237a8739 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 21:21:36 +0200 Subject: [PATCH 08/14] Added forms. --- extras/website/website/forms.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 extras/website/website/forms.py diff --git a/extras/website/website/forms.py b/extras/website/website/forms.py new file mode 100644 index 000000000..f7c81ca86 --- /dev/null +++ b/extras/website/website/forms.py @@ -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) + From 7421628da444ff01d8a1ac506bd544eff8e84f4e Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 22:38:16 +0200 Subject: [PATCH 09/14] Added documentation and faq section. --- extras/website/website/static/css/style.css | 4 ++++ extras/website/website/templates/base.html | 3 ++- .../website/templates/base_documentation.html | 14 +++++++++++++ .../website/templates/base_support.html | 15 ------------- .../website/templates/documentation.html | 21 +++++++++++++++++++ extras/website/website/templates/faq.html | 21 +++++++++++++++++++ extras/website/website/templates/support.html | 4 ++-- extras/website/website/urls.py | 3 ++- 8 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 extras/website/website/templates/base_documentation.html delete mode 100644 extras/website/website/templates/base_support.html create mode 100644 extras/website/website/templates/documentation.html create mode 100644 extras/website/website/templates/faq.html diff --git a/extras/website/website/static/css/style.css b/extras/website/website/static/css/style.css index 08a401717..e6108954f 100755 --- a/extras/website/website/static/css/style.css +++ b/extras/website/website/static/css/style.css @@ -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; diff --git a/extras/website/website/templates/base.html b/extras/website/website/templates/base.html index ef10e90c2..36e998ab5 100644 --- a/extras/website/website/templates/base.html +++ b/extras/website/website/templates/base.html @@ -38,7 +38,8 @@
    -

    Support & Dokumentation

    +

    Hilfe

    @@ -106,13 +106,13 @@
  • Wiki
  • Roadmap
  • Tickets
  • -
  • Quellcode durchsuchen
  • +
  • Quellcode
  • Mehr

    diff --git a/extras/website/website/templates/donate.html b/extras/website/website/templates/donate.html new file mode 100644 index 000000000..b6222a163 --- /dev/null +++ b/extras/website/website/templates/donate.html @@ -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 %} + +

    TODO

    + +{% endblock %} \ No newline at end of file diff --git a/extras/website/website/urls.py b/extras/website/website/urls.py index cb6581120..28e86146e 100644 --- a/extras/website/website/urls.py +++ b/extras/website/website/urls.py @@ -22,6 +22,7 @@ urlpatterns = i18n_patterns('', 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/$', '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',), ) From 4a29aedb64b1a4e9024d53031c9e8a309a8bb5d8 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Wed, 18 Jul 2012 22:53:29 +0200 Subject: [PATCH 11/14] Updated virtualenv section. --- INSTALL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL b/INSTALL index 3f291ee55..516f99eef 100644 --- a/INSTALL +++ b/INSTALL @@ -109,7 +109,7 @@ II. Installation on GNU/Linux and MacOSX $ virtualenv .venv - For virtualenv >= 1.7 use: + For virtualenv >= 1.7 use instead: $ virtualenv --system-site-packages .venv 4. Activate the virtual environment: From 2af0a995dc72a7d905d7861256010b352d07dcda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norman=20J=C3=A4ckel?= Date: Thu, 19 Jul 2012 01:56:05 +0200 Subject: [PATCH 12/14] =?UTF-8?q?Update=20documentation=20(Chapter=203=20-?= =?UTF-8?q?=20Tutorial=20Pr=C3=A4sentationsmodus)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/de/chapter3.rst | 176 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 147 insertions(+), 29 deletions(-) diff --git a/docs/de/chapter3.rst b/docs/de/chapter3.rst index 1f737d176..3b2989a13 100644 --- a/docs/de/chapter3.rst +++ b/docs/de/chapter3.rst @@ -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 `_ 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 From 7ff3d1382dbd527db87f5a836cdf43dc012b5a7d Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Thu, 19 Jul 2012 07:54:49 +0200 Subject: [PATCH 13/14] #304: Added link to projector-view for non-admins --- openslides/agenda/templates/agenda/base_agenda.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openslides/agenda/templates/agenda/base_agenda.html b/openslides/agenda/templates/agenda/base_agenda.html index 1da6ca241..c2d17c4f6 100644 --- a/openslides/agenda/templates/agenda/base_agenda.html +++ b/openslides/agenda/templates/agenda/base_agenda.html @@ -14,6 +14,11 @@
  • {% trans "New item" %}
  • {% endif %}
  • {% trans 'Agenda as PDF' %}
  • + {% if perms.projector.can_see_projector %} +
  • + {% trans 'Projector view' %} +
  • + {% endif %} {# second submenu #} From c678b557fa2fa959a060f46f598afd649386a828 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Thu, 19 Jul 2012 08:21:51 +0200 Subject: [PATCH 14/14] #311: Updated first login message and translations. --- openslides/application/models.py | 2 +- openslides/locale/de/LC_MESSAGES/django.mo | Bin 34981 -> 35379 bytes openslides/locale/de/LC_MESSAGES/django.po | 68 ++++++++++++--------- openslides/participant/views.py | 5 +- 4 files changed, 45 insertions(+), 30 deletions(-) diff --git a/openslides/application/models.py b/openslides/application/models.py index 7abb8922a..911b4fb84 100644 --- a/openslides/application/models.py +++ b/openslides/application/models.py @@ -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 diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index 96d72bf704ce32ba09de0b5209bae31f0e56513d..679f13f003f645bea574faca2cb508cf5a2468f2 100644 GIT binary patch delta 9160 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 delta 8773 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 N+P->K*X9gu@c)~jM{NKA diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 1c9c72d8b..a9f9b504e 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-18 21:11+0200\n" +"POT-Creation-Date: 2012-07-19 08:19+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emanuel Schuetze \n" "Language-Team: German\n" @@ -156,22 +156,28 @@ msgstr "Neuer Eintrag" msgid "Agenda as PDF" msgstr "Tagesordnung als PDF" -#: agenda/templates/agenda/base_agenda.html:26 +#: agenda/templates/agenda/base_agenda.html:19 +#: projector/templates/projector/base_projector.html:20 +#: templates/front_page.html:25 +msgid "Projector view" +msgstr "Projektor-Ansicht" + +#: agenda/templates/agenda/base_agenda.html:31 msgid "View item" msgstr "Eintrag anzeigen" -#: agenda/templates/agenda/base_agenda.html:31 +#: agenda/templates/agenda/base_agenda.html:36 #: agenda/templates/agenda/edit.html:8 agenda/templates/agenda/edit.html:16 #: agenda/templates/agenda/item_row.html:49 msgid "Edit item" msgstr "Eintrag bearbeiten" -#: agenda/templates/agenda/base_agenda.html:33 +#: agenda/templates/agenda/base_agenda.html:38 #: agenda/templates/agenda/item_row.html:50 msgid "Delete item" msgstr "Eintrag löschen" -#: agenda/templates/agenda/base_agenda.html:38 +#: agenda/templates/agenda/base_agenda.html:43 msgid "Show item" msgstr "Eintrag projizieren" @@ -484,6 +490,12 @@ msgstr "Benötigt Review" msgid "Version %d permitted" msgstr "Version %d zugelassen" +#: application/models.py:109 +#, python-format +msgctxt "Rejected means not permitted" +msgid "Version %d rejected" +msgstr "Version %d verworfen" + #: application/models.py:138 msgid "Searching for supporters." msgstr "Auf Unterstützersuche." @@ -1744,7 +1756,7 @@ msgstr "Mitarbeiter" msgid "Guest" msgstr "Gast" -#: participant/models.py:39 participant/views.py:605 +#: participant/models.py:39 participant/views.py:608 #: participant/templates/participant/overview.html:29 #: participant/templates/participant/overview.html:67 msgid "Group" @@ -1766,7 +1778,7 @@ msgstr "Nur zum Filtern der Benutzerliste." msgid "Typ" msgstr "Typ" -#: participant/models.py:46 participant/views.py:606 +#: participant/models.py:46 participant/views.py:609 #: participant/templates/participant/overview.html:44 #: participant/templates/participant/overview.html:69 msgid "Committee" @@ -1921,12 +1933,16 @@ msgstr "Soll das Passwort für %s wirklich zurückgesetzt werden?" #, python-format msgid "" "Installation was successfully! Use %(user)s (password: %(password)s) for " -"first login and change password!" +"first login.
    Important: Please change the password after " +"first login! Otherwise this message still appears for everyone and could be " +"a security risk." msgstr "" -"Die Installation war erfolgreich! Bitte %(user)s (Passwort: %(password)s) für " -"die erste Anmeldung verwenden und das Passwort ändern!" +"Die Installation war erfolgreich! Bitte %(user)s (Passwort: %(password)s) " +"für die erste Anmeldung verwenden.
    Wichtig: Bitte ändern " +"Sie das Passwort direkt nach der erster Anmeldung! Andernfalls erscheint " +"diese Nachricht für alle Teilnehmer/innen und wäre ein Sicherheitsrisiko." -#: participant/views.py:588 +#: participant/views.py:591 #: participant/templates/participant/base_participant.html:12 #: participant/templates/participant/overview.html:7 #: participant/templates/participant/overview.html:17 @@ -1934,56 +1950,56 @@ msgstr "" msgid "Participants" msgstr "Teilnehmer/innen" -#: participant/views.py:601 +#: participant/views.py:604 msgid "Participant-list" msgstr "Teilnehmerliste" -#: participant/views.py:602 +#: participant/views.py:605 msgid "List of Participants" msgstr "Teilnehmerliste" -#: participant/views.py:605 participant/templates/participant/overview.html:66 +#: participant/views.py:608 participant/templates/participant/overview.html:66 msgid "Last Name" msgstr "Nachname" -#: participant/views.py:605 participant/templates/participant/overview.html:65 +#: participant/views.py:608 participant/templates/participant/overview.html:65 msgid "First Name" msgstr "Vorname" -#: participant/views.py:605 participant/templates/participant/overview.html:36 +#: participant/views.py:608 participant/templates/participant/overview.html:36 #: participant/templates/participant/overview.html:68 msgid "Type" msgstr "Typ" -#: participant/views.py:642 +#: participant/views.py:645 msgid "Participant-passwords" msgstr "Teilnehmer-Passwoerter" -#: participant/views.py:661 +#: participant/views.py:664 msgid "Account for OpenSlides" msgstr "Zugang für OpenSlides" -#: participant/views.py:663 +#: participant/views.py:666 #, python-format msgid "for %s" msgstr "für %s" -#: participant/views.py:666 +#: participant/views.py:669 #, python-format msgid "User: %s" msgstr "Nutzername: %s" -#: participant/views.py:668 +#: participant/views.py:671 #, python-format msgid "Password: %s" msgstr "Passwort: %s" -#: participant/views.py:671 +#: participant/views.py:674 #, python-format msgid "URL: %s" msgstr "URL: %s" -#: participant/views.py:716 +#: participant/views.py:719 msgid "Participants settings successfully saved." msgstr "Teilnehmer/innen-Einstellungen wurden erfolgreich gespeichert." @@ -2171,11 +2187,6 @@ msgstr "Projektor" msgid "Overview" msgstr "Übersicht" -#: projector/templates/projector/base_projector.html:20 -#: templates/front_page.html:25 -msgid "Projector view" -msgstr "Projektor-Ansicht" - #: projector/templates/projector/control.html:20 msgid "Adjust projector view" msgstr "Projektor-Ansicht anpassen" @@ -2217,6 +2228,7 @@ msgid "Custom slides" msgstr "Benutzerdefinierte Folien" #: projector/templates/projector/control_countdown.html:6 +msgctxt "seconds" msgid "s" msgstr "s" diff --git a/openslides/participant/views.py b/openslides/participant/views.py index 2574c2ed6..0024116c4 100644 --- a/openslides/participant/views.py +++ b/openslides/participant/views.py @@ -569,7 +569,10 @@ def login(request): admin = User.objects.get(pk=1) if admin.check_password(config['admin_password']): first_time_message = _("Installation was successfully! Use %(user)s " - "(password: %(password)s) for first login and change password!") % { + "(password: %(password)s) for first login.
    " + "Important: 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: