diff --git a/tabellio/config/controlpanel.pt b/tabellio/config/controlpanel.pt
index a2bd552..bd5027e 100644
--- a/tabellio/config/controlpanel.pt
+++ b/tabellio/config/controlpanel.pt
@@ -267,6 +267,56 @@
+
Topics settings
+
+
+
+
+
+
+
Greffier settings
diff --git a/tabellio/config/controlpanel.py b/tabellio/config/controlpanel.py
index 3baec3a..0c76996 100644
--- a/tabellio/config/controlpanel.py
+++ b/tabellio/config/controlpanel.py
@@ -71,6 +71,11 @@ class TabellioControlpanel(BrowserView):
submitted = True
self.settings.sessions = form.get('sessions')
+ if 'form.button.TopicsSave' in form:
+ self.authorize()
+ submitted = True
+ self.settings.topics = form.get('topics')
+
if 'form.button.GreffierSave' in form:
self.authorize()
submitted = True
diff --git a/tabellio/config/interfaces.py b/tabellio/config/interfaces.py
index e5b577a..958afea 100644
--- a/tabellio/config/interfaces.py
+++ b/tabellio/config/interfaces.py
@@ -51,6 +51,10 @@ class ITabellioSettings(Interface):
title=_('sessions', 'Sessions'),
required=False)
+ topics = schema.Text(
+ title=_('topics', 'Topics'),
+ required=False)
+
greffier_name = schema.Text(title=_(u'Greffier Name'), required=False)
greffier_email = schema.Text(title=_(u'Greffier Email'), required=False)
greffier_address_line1 = schema.Text(title=_(u'Greffier Address Line 1'), required=False)
diff --git a/tabellio/config/utils.py b/tabellio/config/utils.py
index f89ac7e..619c251 100644
--- a/tabellio/config/utils.py
+++ b/tabellio/config/utils.py
@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
+import time
+
from zope import component
from plone.registry.interfaces import IRegistry
from interfaces import ITabellioSettings
+from plone.memoize import ram
def get_dossiers_path():
return component.getUtility(IRegistry).forInterface(ITabellioSettings, False).dossiersPath
@@ -24,6 +27,18 @@ def get_sessions():
terms = [x.split(':')[1].strip() for x in sessions.splitlines() if x]
return terms
+@ram.cache(lambda *args: time.time() // (5 * 60)) # 5 minutes
+def get_topics_dict():
+ from plone.i18n.normalizer.fr import normalizer
+ settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
+ if not settings.topics:
+ return {}
+ topics = {}
+ for line in settings.topics.splitlines():
+ id, term = line.strip().split('|')
+ topics[id] = (term, normalizer.normalize(term).lower())
+ return topics
+
def get_legisl_and_sessions():
settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
sessions = settings.sessions