diff --git a/admin/templatetags/admin_extras.py b/admin/templatetags/admin_extras.py index 6c0c59c35..a29337ae3 100644 --- a/admin/templatetags/admin_extras.py +++ b/admin/templatetags/admin_extras.py @@ -62,6 +62,9 @@ def settings_menu(selection, perms): "url" : reverse(admin.views.viewparameters), "img" : "/static/pics/domains.png", "label" : _("Parameters")}, + {"name" : "extensions", + "url" : reverse(admin.views.viewextensions), + "label" : _("Extensions")}, ] return render_to_string('main/menu.html', {"selection" : selection, "entries" : entries, diff --git a/admin/urls.py b/admin/urls.py index cb296bf2f..191e6950a 100644 --- a/admin/urls.py +++ b/admin/urls.py @@ -19,6 +19,7 @@ urlpatterns = patterns('mailng.admin.views', (r'^settings/$', 'settings'), (r'^settings/addperm/$', 'addpermission'), (r'^settings/delperm/(?P\d+)/(?P\w+)/$', 'deletepermission'), + (r'^settings/extensions/$', 'viewextensions'), (r'^settings/parameters/$', 'viewparameters'), (r'^settings/parameters/save/$', 'saveparameters'), ) diff --git a/admin/views.py b/admin/views.py index eee9810da..d58b4a719 100644 --- a/admin/views.py +++ b/admin/views.py @@ -442,3 +442,11 @@ def saveparameters(request): parameters.save(app, name, v) request.user.message_set.create(message=_("Configuration saved.")) return HttpResponseRedirect(reverse(admin.views.viewparameters)) + +@login_required +@user_passes_test(lambda u: u.is_superuser) +def viewextensions(request): + from mailng.extensions import list_extensions + return _render(request, 'admin/extensions.html', { + "extensions" : list_extensions() + }) diff --git a/extensions/__init__.py b/extensions/__init__.py index 459e1035f..8dff92659 100644 --- a/extensions/__init__.py +++ b/extensions/__init__.py @@ -24,3 +24,22 @@ def loadmenus(): continue result += (u,) return result + +def list_extensions(): + basedir = "extensions" + result = [] + for d in os.listdir(basedir): + if not os.path.isdir("%s/%s" % (basedir, d)): + continue + isvalid = True + for f in ['urls.py', 'main.py', '__init__.py']: + if not os.path.exists("%s/%s/%s" % (basedir, d, f)): + isvalid = False + break + if isvalid: + module = __import__(d, globals(), locals(), ['main']) + try: + result += [module.main.infos()] + except AttributeError: + pass + return result diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index 0a8c55ce3..3530abb42 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -24,6 +24,13 @@ from templatetags.amextras import * from mailng.lib.email_listing import parse_search_parameters from sql_listing import * +def infos(): + return { + "name" : "Amavis quarantine", + "version" : "1.0", + "description" : _("Simple amavis quarantine management tool") + } + def init(): events.register("UserMenuDisplay", menu) parameters.register("amavis_quarantine", "MAX_MESSAGES_AGE", "int", 14, diff --git a/extensions/stats/main.py b/extensions/stats/main.py index 7dc1d9840..cd0fe18d4 100644 --- a/extensions/stats/main.py +++ b/extensions/stats/main.py @@ -25,6 +25,13 @@ graph_list = [{"name" : "traffic", "label" : _("Average normal traffic")}, {"name" : "badtraffic", "label" : _("Average bad traffic")}, {"name" : "size", "label" : _("Average normal traffic size")}] +def infos(): + return { + "name" : "Statistics", + "version" : "1.0", + "description" : _("Graphical statistics about emails traffic using RRDtool") + } + def init(): events.register("AdminMenuDisplay", menu) parameters.register("stats", "LOGFILE", "string", "/var/log/mail.log", diff --git a/extensions/webmail/main.py b/extensions/webmail/main.py index 7d3f4c80d..d747fa877 100644 --- a/extensions/webmail/main.py +++ b/extensions/webmail/main.py @@ -34,6 +34,13 @@ def init(): parameters.register("webmail", "SMTP_SECURED", "list_yesno", "no", help=_("Use a secured connection to access SMTP server")) +def infos(): + return { + "name" : "Webmail", + "version" : "1.0", + "description" : _("Simple IMAP webmail") + } + def urls(): return (r'^mailng/webmail/', include('mailng.extensions.webmail.urls')) diff --git a/templates/admin/extensions.html b/templates/admin/extensions.html new file mode 100644 index 000000000..44c58e708 --- /dev/null +++ b/templates/admin/extensions.html @@ -0,0 +1,14 @@ +{% extends "admin/settings_header.html" %} +{% block menu %} +{% load admin_extras %} +{% settings_menu "extensions" perms %} +{% endblock %} +{% block setcontent %} +{% load i18n %} + + +{% for ext in extensions %} + +{% endfor %} +
{% trans "Name" %}{% trans "Version" %}{% trans "Description" %}
{{ ext.name }}{{ ext.version }}{{ ext.description }}
+{% endblock %}