diff --git a/openslides/agenda/api.py b/openslides/agenda/api.py
index 757ea2db6..dc356ca09 100644
--- a/openslides/agenda/api.py
+++ b/openslides/agenda/api.py
@@ -10,7 +10,7 @@
:license: GNU GPL, see LICENSE for more details.
"""
-from system import config
+from config.models import config
def is_summary():
diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py
index 06add6519..424eeb773 100644
--- a/openslides/agenda/models.py
+++ b/openslides/agenda/models.py
@@ -19,7 +19,7 @@ from django.db import models
from mptt.models import MPTTModel, TreeForeignKey
-from system import config
+from config.models import config
from projector.projector import SlideMixin
from projector.api import register_slidemodel
@@ -140,3 +140,15 @@ from projector.api import register_slidefunc
from agenda.slides import agenda_show
register_slidefunc(_('Agenda'), agenda_show)
+
+
+from django.dispatch import receiver
+from openslides.config.signals import default_config_value
+
+
+@receiver(default_config_value, dispatch_uid="agenda_default_config")
+def default_config(sender, key, **kwargs):
+ return {
+ 'agenda_countdown_time': 60,
+ }.get(key)
+
diff --git a/openslides/agenda/templates/agenda/config.html b/openslides/agenda/templates/agenda/config.html
index a02d26e3e..4e738721d 100644
--- a/openslides/agenda/templates/agenda/config.html
+++ b/openslides/agenda/templates/agenda/config.html
@@ -1,4 +1,4 @@
-{% extends "system/base_system.html" %}
+{% extends "config/base_config.html" %}
{% load i18n %}
diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py
index e32495e40..c74667829 100644
--- a/openslides/agenda/views.py
+++ b/openslides/agenda/views.py
@@ -21,7 +21,7 @@ from utils.pdf import stylesheet
from utils.views import TemplateView, RedirectView, UpdateView, CreateView, DeleteView, PDFView, FormView
from utils.template import Tab
-from system import config
+from config.models import config
from projector.api import get_active_slide, set_active_slide
@@ -201,7 +201,7 @@ class AgendaPDF(PDFView):
class Config(FormView):
- permission_required = 'system.can_manage_system'
+ permission_required = 'config.can_manage_config'
form_class = ConfigForm
template_name = 'agenda/config.html'
diff --git a/openslides/application/models.py b/openslides/application/models.py
index 4a31e17bf..2b09b368a 100644
--- a/openslides/application/models.py
+++ b/openslides/application/models.py
@@ -21,7 +21,7 @@ from projector.api import register_slidemodel
from projector.models import SlideMixin
from participant.models import Profile
-from system import config
+from config.models import config
from utils.utils import _propper_unicode
from utils.translation_ext import xugettext as _
from poll.models import BaseOption, BasePoll, CountVotesCast, CountInvalid, Vote
@@ -527,3 +527,17 @@ class ApplicationPoll(BasePoll, CountInvalid, CountVotesCast):
def get_absolute_url(self):
return reverse('application_poll_view', args=[self.id])
+
+
+from django.dispatch import receiver
+from openslides.config.signals import default_config_value
+
+
+@receiver(default_config_value, dispatch_uid="application_default_config")
+def default_config(sender, key, **kwargs):
+ return {
+ 'application_min_supporters': 4,
+ 'application_preamble': 'Die Versammlung möge beschließen,',
+ 'application_pdf_ballot_papers_selection': '1',
+ 'application_pdf_title': _('Applications'),
+ }.get(key)
diff --git a/openslides/application/templates/application/config.html b/openslides/application/templates/application/config.html
index 13680a297..2fc58d7b2 100644
--- a/openslides/application/templates/application/config.html
+++ b/openslides/application/templates/application/config.html
@@ -1,4 +1,4 @@
-{% extends "system/base_system.html" %}
+{% extends "config/base_config.html" %}
{% load i18n %}
diff --git a/openslides/application/views.py b/openslides/application/views.py
index a830d01de..0a6df40f9 100644
--- a/openslides/application/views.py
+++ b/openslides/application/views.py
@@ -29,7 +29,7 @@ from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import PageBreak, Paragraph, Spacer, Table, TableStyle
-from system import config
+from config.models import config
from settings import SITE_ROOT
from utils.pdf import stylesheet
from utils.views import PDFView
@@ -506,7 +506,7 @@ def application_import(request):
# check for valid encoding (will raise UnicodeDecodeError if not)
request.FILES['csvfile'].read().decode('utf-8')
request.FILES['csvfile'].seek(0)
-
+
users_generated = 0
applications_generated = 0
applications_modified = 0
@@ -777,7 +777,7 @@ class ApplicationPollPDF(PDFView):
class Config(FormView):
- permission_required = 'system.can_manage_system'
+ permission_required = 'config.can_manage_config'
form_class = ConfigForm
template_name = 'application/config.html'
diff --git a/openslides/assignment/models.py b/openslides/assignment/models.py
index c900ea8df..2d98a4a5e 100644
--- a/openslides/assignment/models.py
+++ b/openslides/assignment/models.py
@@ -144,3 +144,14 @@ class AssignmentPoll(BasePoll, CountInvalid, CountVotesCast, PublishPollMixin):
CountInvalid.append_pollform_fields(self, fields)
CountVotesCast.append_pollform_fields(self, fields)
+
+from django.dispatch import receiver
+from openslides.config.signals import default_config_value
+
+
+@receiver(default_config_value, dispatch_uid="assignment_default_config")
+def default_config(sender, key, **kwargs):
+ return {
+ 'assignment_pdf_ballot_papers_selection': '1',
+ 'assignment_pdf_title': _('Elections'),
+ }.get(key)
diff --git a/openslides/assignment/templates/assignment/config.html b/openslides/assignment/templates/assignment/config.html
index 33bdc11c0..edb32fd6b 100644
--- a/openslides/assignment/templates/assignment/config.html
+++ b/openslides/assignment/templates/assignment/config.html
@@ -1,4 +1,4 @@
-{% extends "system/base_system.html" %}
+{% extends "config/base_config.html" %}
{% load i18n %}
diff --git a/openslides/assignment/views.py b/openslides/assignment/views.py
index 0b7dd8430..217a1682a 100644
--- a/openslides/assignment/views.py
+++ b/openslides/assignment/views.py
@@ -21,7 +21,7 @@ from utils.pdf import print_assignment, print_assignment_poll
from utils.views import FormView
from utils.template import Tab
-from system import config
+from config.models import config
from poll.views import PollFormView
@@ -271,7 +271,7 @@ def set_elected(request, assignment_id, profile_id, elected=True):
class Config(FormView):
- permission_required = 'system.can_manage_system'
+ permission_required = 'config.can_manage_config'
form_class = ConfigForm
template_name = 'assignment/config.html'
diff --git a/openslides/config/__init__.py b/openslides/config/__init__.py
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/openslides/config/__init__.py
@@ -0,0 +1 @@
+
diff --git a/openslides/system/forms.py b/openslides/config/forms.py
similarity index 94%
rename from openslides/system/forms.py
rename to openslides/config/forms.py
index 35bc15ad5..b17f54558 100644
--- a/openslides/system/forms.py
+++ b/openslides/config/forms.py
@@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
- openslides.system.forms
+ openslides.config.forms
~~~~~~~~~~~~~~~~~~~~~~~
- Forms for the system app.
+ Forms for the config app.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
@@ -14,7 +14,7 @@ from django.forms import Form, CharField, TextInput, BooleanField, IntegerField,
from django.utils.translation import ugettext as _
from utils.forms import CssClassMixin
-from system import config
+from models import config
class SystemConfigForm(Form, CssClassMixin):
diff --git a/openslides/system/models.py b/openslides/config/models.py
similarity index 75%
rename from openslides/system/models.py
rename to openslides/config/models.py
index 346a72c64..4cee5caf6 100644
--- a/openslides/system/models.py
+++ b/openslides/config/models.py
@@ -1,10 +1,10 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
- openslides.system.models
+ openslides.config.models
~~~~~~~~~~~~~~~~~~~~~~~~
- Models for the system app.
+ Models for the config app.
:copyright: 2011 by the OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
@@ -13,21 +13,12 @@ from pickle import dumps, loads
import base64
from django.db import models
+from django.dispatch import receiver
+
from utils.translation_ext import xugettext as _
-DEFAULT_DATA = {
- 'event_name': 'OpenSlides',
- 'event_description': 'Presentation and voting system',
- 'agenda_countdown_time': 60,
- 'application_min_supporters': 4,
- 'application_preamble': 'Die Versammlung möge beschließen,',
- 'application_pdf_ballot_papers_selection': '1',
- 'application_pdf_title': _('Applications'),
- 'assignment_pdf_ballot_papers_selection': '1',
- 'assignment_pdf_title': _('Elections'),
- 'system_url': 'http://127.0.0.1:8000',
- 'system_welcometext': 'Welcome to OpenSlides!',
-}
+from openslides.config.signals import default_config_value
+
class ConfigStore(models.Model):
key = models.CharField(max_length=100, primary_key=True)
@@ -39,9 +30,10 @@ class ConfigStore(models.Model):
class Meta:
verbose_name = 'config'
permissions = (
- ('can_manage_system', _("Can manage system configuration", fixstr=True)),
+ ('can_manage_config', _("Can manage config configuration", fixstr=True)),
)
+
# TODO:
# I used base64 to save pickled Data, there has to be another way see:
# http://stackoverflow.com/questions/2524970/djangounicodedecodeerror-while-storing-pickled-data
@@ -57,14 +49,16 @@ class Config(object):
self.config
except AttributeError:
self.load_config()
+
try:
return self.config[key]
except KeyError:
pass
- try:
- return DEFAULT_DATA[key]
- except KeyError:
- return None
+
+ for receiver, value in default_config_value.send(sender='config', key=key):
+ if value is not None:
+ return value
+ return None
def __setitem__(self, key, value):
try:
@@ -79,6 +73,21 @@ class Config(object):
self.load_config()
self.config[key] = value
+config = Config()
+
+
+@receiver(default_config_value, dispatch_uid="config_default_config")
+def default_config(sender, key, **kwargs):
+ return {
+ 'event_name': 'OpenSlides',
+ 'event_description': 'Presentation and voting system',
+ 'system_url': 'http://127.0.0.1:8000',
+ 'system_welcometext': 'Welcome to OpenSlides!',
+ }.get(key)
+
+
+
+
from django.dispatch import receiver
from django.core.urlresolvers import reverse
from django.utils.importlib import import_module
@@ -88,7 +97,7 @@ from openslides.utils.signals import template_manipulation
-@receiver(template_manipulation, dispatch_uid="system_base_system")
+@receiver(template_manipulation, dispatch_uid="config_submenu")
def set_submenu(sender, request, context, **kwargs):
if not request.path.startswith('/config/'):
return None
diff --git a/openslides/config/signals.py b/openslides/config/signals.py
new file mode 100644
index 000000000..4e0880e40
--- /dev/null
+++ b/openslides/config/signals.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+ openslides.config.signals
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Defines Signals for the config.
+
+ :copyright: 2011 by the OpenSlides team, see AUTHORS.
+ :license: GNU GPL, see LICENSE for more details.
+"""
+
+from django.dispatch import Signal
+
+default_config_value = Signal(providing_args=['key'])
diff --git a/openslides/system/templates/system/base_system.html b/openslides/config/templates/config/base_config.html
similarity index 100%
rename from openslides/system/templates/system/base_system.html
rename to openslides/config/templates/config/base_config.html
diff --git a/openslides/system/templates/system/system.html b/openslides/config/templates/config/config.html
similarity index 83%
rename from openslides/system/templates/system/system.html
rename to openslides/config/templates/config/config.html
index 04f724212..f5fd185e8 100644
--- a/openslides/system/templates/system/system.html
+++ b/openslides/config/templates/config/config.html
@@ -1,4 +1,4 @@
-{% extends "system/base_system.html" %}
+{% extends "config/base_config.html" %}
{% load i18n %}
@@ -13,8 +13,8 @@
-
-