Fix storing info plugin status and order
[cascardo/ipsilon.git] / ipsilon / admin / info.py
index 4a8aaba..d3f5284 100755 (executable)
@@ -3,14 +3,23 @@
 # Copyright (C) 2014  Ipsilon Contributors see COPYING for license
 
 import cherrypy
-from ipsilon.util.page import Page
-from ipsilon.util.page import admin_protect, auth_protect
+from ipsilon.util.page import admin_protect
 from ipsilon.util.plugin import PluginObject
 from ipsilon.admin.common import AdminPluginPage
+from ipsilon.admin.common import AdminPage
 from ipsilon.info.common import FACILITY
 
 
-class InfoPluginsOrder(Page):
+def save_enabled_plugins(names):
+    po = PluginObject()
+    po.name = "global"
+    globalconf = dict()
+    globalconf['order'] = ','.join(names)
+    po.set_config(globalconf)
+    po.save_plugin_config(FACILITY)
+
+
+class InfoPluginsOrder(AdminPage):
 
     def __init__(self, site, parent):
         super(InfoPluginsOrder, self).__init__(site, form=True)
@@ -51,12 +60,7 @@ class InfoPluginsOrder(Page):
                                 new_names.append(val)
                                 new_plugins.append(plugins_by_name[val])
 
-                    po = PluginObject()
-                    po.name = "global"
-                    globalconf = dict()
-                    globalconf['order'] = ','.join(new_names)
-                    po.set_config(globalconf)
-                    po.save_plugin_config(FACILITY)
+                    save_enabled_plugins(new_names)
 
                     # When all is saved update also live config. The
                     # live config is a list of the actual plugin
@@ -84,7 +88,7 @@ class InfoPluginsOrder(Page):
                               options=opts)
 
 
-class InfoPlugins(Page):
+class InfoPlugins(AdminPage):
     def __init__(self, site, parent):
         super(InfoPlugins, self).__init__(site)
         self._master = parent
@@ -112,7 +116,6 @@ class InfoPlugins(Page):
                               enabled=ordered,
                               menu=self._master.menu)
 
-    @auth_protect
     def root(self, *args, **kwargs):
         return self.root_with_msg()
 
@@ -126,6 +129,7 @@ class InfoPlugins(Page):
         obj = plugins['available'][plugin]
         if obj not in plugins['enabled']:
             obj.enable(self._site)
+            save_enabled_plugins(list(x.name for x in plugins['enabled']))
             msg = "Plugin %s enabled" % obj.name
         return self.root_with_msg(msg, "success")
     enable.public_function = True
@@ -140,6 +144,7 @@ class InfoPlugins(Page):
         obj = plugins['available'][plugin]
         if obj in plugins['enabled']:
             obj.disable(self._site)
+            save_enabled_plugins(list(x.name for x in plugins['enabled']))
             msg = "Plugin %s disabled" % obj.name
         return self.root_with_msg(msg, "success")
     disable.public_function = True