From 8303a2e4d9a7cd1c682f879f3d1517070a423f4e Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 21 Mar 2014 09:04:08 +0100 Subject: [PATCH] Initial commit of the new Radicale extension. --- .../core/commands/templates/settings.py.tpl | 1 + modoboa/extensions/radicale/__init__.py | 42 +++++++++++++++++++ modoboa/extensions/radicale/app_settings.py | 8 ++++ .../extensions/radicale/general_callbacks.py | 15 +++++++ modoboa/extensions/radicale/models.py | 3 ++ modoboa/extensions/radicale/tests.py | 16 +++++++ modoboa/extensions/radicale/urls.py | 6 +++ modoboa/extensions/radicale/views.py | 5 +++ 8 files changed, 96 insertions(+) create mode 100644 modoboa/extensions/radicale/__init__.py create mode 100644 modoboa/extensions/radicale/app_settings.py create mode 100644 modoboa/extensions/radicale/general_callbacks.py create mode 100644 modoboa/extensions/radicale/models.py create mode 100644 modoboa/extensions/radicale/tests.py create mode 100644 modoboa/extensions/radicale/urls.py create mode 100644 modoboa/extensions/radicale/views.py diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index c0df35122..e3a81a7ef 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -161,6 +161,7 @@ MODOBOA_APPS = ( 'modoboa.extensions.webmail', 'modoboa.extensions.stats', 'modoboa.extensions.sievefilters', + 'modoboa.extensions.radicale', {% if not amavis_conn %}#{% endif %}'modoboa.extensions.amavis', ) diff --git a/modoboa/extensions/radicale/__init__.py b/modoboa/extensions/radicale/__init__.py new file mode 100644 index 000000000..0dbb36e46 --- /dev/null +++ b/modoboa/extensions/radicale/__init__.py @@ -0,0 +1,42 @@ +""" +Radicale management frontend. + +""" +import sys +from django.utils.translation import ugettext_lazy +from modoboa.lib import events, parameters +from modoboa.core.extensions import ModoExtension, exts_pool + + +class Radicale(ModoExtension): + """ + """ + name = "radicale" + label = ugettext_lazy("Radicale management frontend") + version = "1.0" + description = ugettext_lazy( + "Management frontend for Radicale, a simple calendar and contact server." + ) + + def init(self): + """Plugin initialization. + """ + pass + + def load(self): + """Plugin loading. + """ + from .app_settings import ParametersForm + + parameters.register(ParametersForm, "Radicale") + from modoboa.extensions.radicale import general_callbacks + if 'modoboa.extensions.radicale.general_callbacks' in sys.modules: + reload(general_callbacks) + + def destroy(self): + """Plugin unloading. + """ + events.unregister_extension() + parameters.unregister() + +exts_pool.register_extension(Radicale) diff --git a/modoboa/extensions/radicale/app_settings.py b/modoboa/extensions/radicale/app_settings.py new file mode 100644 index 000000000..82e5783b9 --- /dev/null +++ b/modoboa/extensions/radicale/app_settings.py @@ -0,0 +1,8 @@ +from django.utils.translation import ugettext_lazy as _ +from django import forms +from modoboa.lib.parameters import AdminParametersForm, UserParametersForm +from modoboa.lib.formutils import SeparatorField, YesNoField, InlineRadioSelect + + +class ParametersForm(AdminParametersForm): + app = "radicale" diff --git a/modoboa/extensions/radicale/general_callbacks.py b/modoboa/extensions/radicale/general_callbacks.py new file mode 100644 index 000000000..806111417 --- /dev/null +++ b/modoboa/extensions/radicale/general_callbacks.py @@ -0,0 +1,15 @@ +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext as _ +from django.template import Template, Context +from modoboa.lib import events, parameters + + +@events.observe("UserMenuDisplay") +def top_menu(target, user): + if target == "top_menu": + return [ + {"name": "radicale", + "label": _("Radicale"), + "url": reverse('modoboa.extensions.radicale.views.index')} + ] + return [] diff --git a/modoboa/extensions/radicale/models.py b/modoboa/extensions/radicale/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/modoboa/extensions/radicale/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/modoboa/extensions/radicale/tests.py b/modoboa/extensions/radicale/tests.py new file mode 100644 index 000000000..501deb776 --- /dev/null +++ b/modoboa/extensions/radicale/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/modoboa/extensions/radicale/urls.py b/modoboa/extensions/radicale/urls.py new file mode 100644 index 000000000..265613174 --- /dev/null +++ b/modoboa/extensions/radicale/urls.py @@ -0,0 +1,6 @@ +from django.conf.urls import patterns + +urlpatterns = patterns( + 'modoboa.extensions.radicale.views', + (r'^$', 'index'), +) diff --git a/modoboa/extensions/radicale/views.py b/modoboa/extensions/radicale/views.py new file mode 100644 index 000000000..d6ab77c68 --- /dev/null +++ b/modoboa/extensions/radicale/views.py @@ -0,0 +1,5 @@ +# Create your views here. + + +def index(request): + pass