diff --git a/modoboa/admin/static/admin/js/settings.js b/modoboa/admin/static/admin/js/settings.js
new file mode 100644
index 000000000..bea2ee05d
--- /dev/null
+++ b/modoboa/admin/static/admin/js/settings.js
@@ -0,0 +1,49 @@
+var Settings = function(options) {
+ this.initialize(options);
+};
+
+Settings.prototype = {
+ constructor: Settings,
+
+ defaults: {
+ deflocation: "parameters/"
+ },
+
+ initialize: function(options) {
+ this.options = $.extend({}, this.defaults, options);
+ this.options.defcallback = $.proxy(this.default_cb, this);
+ this.navobj = new History(this.options);
+
+ this.listen();
+ },
+
+ listen: function() {
+ $("a.ajaxlink").click($.proxy(this.load_page, this));
+ $(document).on("click", "#update", $.proxy(function(e) {
+ simple_ajax_form_post(e, {
+ formid: "settings_form",
+ reload_on_success: false,
+ success_cb: $.proxy(this.save_cb, this)
+ });
+ }, this));
+ },
+
+ save_cb: function(data) {
+ if (this.navobj.getbaseurl() == 'extensions') {
+ window.location.reload();
+ }
+ $("body").notify("success", data.respmsg, 2000);
+ },
+
+ load_page: function(e) {
+ var $link = get_target(e);
+ e.preventDefault();
+ this.navobj.baseurl($link.attr("href")).update();
+ },
+
+ default_cb: function(data) {
+ $("a.ajaxlink").parent().removeClass("active");
+ $("a[name=" + this.navobj.getbaseurl() + "]").parent().addClass("active");
+ $("#settings_content").html(data.content);
+ }
+};
\ No newline at end of file
diff --git a/modoboa/admin/templates/admin/extensions.html b/modoboa/admin/templates/admin/extensions.html
index 1999eeb71..aabf44f81 100644
--- a/modoboa/admin/templates/admin/extensions.html
+++ b/modoboa/admin/templates/admin/extensions.html
@@ -1,8 +1,6 @@
-{% extends "admin/settings_header.html" %}{% load i18n %}
-{% block pagetitle %}{% trans "Extensions" %}{% endblock %}
-{% block apparea %}
-
{% trans 'Save' %}
-{% endblock %}
diff --git a/modoboa/admin/templates/admin/parameters.html b/modoboa/admin/templates/admin/parameters.html
index 4714658b7..02d48423f 100644
--- a/modoboa/admin/templates/admin/parameters.html
+++ b/modoboa/admin/templates/admin/parameters.html
@@ -1,10 +1,8 @@
-{% extends "admin/settings_header.html" %}{% load i18n %}
-{% block pagetitle %}{% trans "Parameters" %}{% endblock %}
-{% block apparea %}
+{% load i18n %}
{% url modoboa.admin.views.saveparameters as action %}
-
{% trans 'Save' %}
-{% endblock %}
diff --git a/modoboa/admin/templates/admin/settings_header.html b/modoboa/admin/templates/admin/settings_header.html
index 287812511..ad2c246ee 100644
--- a/modoboa/admin/templates/admin/settings_header.html
+++ b/modoboa/admin/templates/admin/settings_header.html
@@ -1,22 +1,14 @@
{% extends "twocols.html" %}
{% load i18n libextras admin_extras %}
+{% block pagetitle %}{% trans "Modoboa settings" %}{% endblock %}
{% block html_head %}
+
+
{% endblock %}
{% block leftcol %}{% endblock %}
+{% block apparea %}{% endblock %}
diff --git a/modoboa/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py
index a7831a741..21ff4f8a9 100644
--- a/modoboa/admin/templatetags/admin_extras.py
+++ b/modoboa/admin/templatetags/admin_extras.py
@@ -33,7 +33,7 @@ def admin_menu(selection, user):
entries += [
{"name" : "settings",
"label" : _("Modoboa"),
- "url" : reverse(admin.views.viewparameters)}
+ "url" : reverse(admin.views.viewsettings)}
]
if not len(entries):
@@ -45,12 +45,14 @@ def admin_menu(selection, user):
def settings_menu(selection, user):
entries = [
{"name" : "extensions",
- "url" : reverse(admin.views.viewextensions),
+ "class" : "ajaxlink",
+ "url" : "extensions/",
"label" : _("Extensions"),
- "img" : static_url("pics/extensions.png")},
+ "img" : ""},
{"name" : "parameters",
- "url" : reverse(admin.views.viewparameters),
- "img" : static_url("pics/domains.png"),
+ "class" : "ajaxlink",
+ "url" : "parameters/",
+ "img" : "",
"label" : _("Parameters")},
]
return render_to_string('common/menu.html', {
diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py
index bd2133c07..bede38e01 100644
--- a/modoboa/admin/urls.py
+++ b/modoboa/admin/urls.py
@@ -11,7 +11,7 @@ urlpatterns = patterns(
(r'^domains/delete/$', 'deldomain'),
(r'^domains/import/$', 'import_domains'),
- (r'^settings/$', 'viewparameters'),
+ (r'^settings/$', 'viewsettings'),
(r'^settings/parameters/$', 'viewparameters'),
(r'^settings/parameters/save/$', 'saveparameters'),
(r'^settings/extensions/$', 'viewextensions'),
diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py
index c26ed50dd..01eb2ff95 100644
--- a/modoboa/admin/views.py
+++ b/modoboa/admin/views.py
@@ -466,6 +466,13 @@ def remove_permission(request):
ungrant_access_to_object(domain, account)
return ajax_simple_response(dict(status="ok"))
+@login_required
+@user_passes_test(lambda u: u.is_superuser)
+def viewsettings(request, tplname='admin/settings_header.html'):
+ return render(request, tplname, {
+ "selection" : "settings"
+ })
+
@login_required
@user_passes_test(lambda u: u.is_superuser)
def viewparameters(request, tplname='admin/parameters.html'):
@@ -486,10 +493,10 @@ def viewparameters(request, tplname='admin/parameters.html'):
tmp["params"] += [newdef]
gparams += [tmp]
- return render(request, tplname, {
- "selection" : "settings",
+ return ajax_simple_response({
+ "status" : "ok",
"left_selection" : "parameters",
- "gparams" : gparams
+ "content" : render_to_string(tplname, {"gparams" : gparams})
})
@login_required
@@ -500,7 +507,7 @@ def saveparameters(request):
continue
app, name = pname.split('.')
parameters.save_admin(name, v, app=app)
- return ajax_simple_response(dict(status="ok", message=_("Parameters saved")))
+ return ajax_simple_response(dict(status="ok", respmsg=_("Parameters saved")))
@login_required
@user_passes_test(lambda u: u.is_superuser)
@@ -520,10 +527,9 @@ def viewextensions(request, tplname='admin/extensions.html'):
ext["selection"] = False
tbl = ExtensionsTable(request, exts)
- return render(request, tplname, {
- "selection" : "settings",
- "left_selection" : "extensions",
- "extensions" : tbl
+ return ajax_simple_response({
+ "status" : "ok",
+ "content" : render_to_string(tplname, {"extensions" : tbl})
})
@login_required
@@ -546,7 +552,7 @@ def saveextensions(request):
ext.off()
return ajax_simple_response(dict(
- status="ok", message=_("Modifications applied."), reload=True
+ status="ok", respmsg=_("Modifications applied.")
))
def import_domain(user, row):