Fix plugins enablement code
[cascardo/ipsilon.git] / ipsilon / admin / common.py
index 827038e..b9dfbf4 100755 (executable)
@@ -65,15 +65,19 @@ class AdminPluginConfig(AdminPage):
             for k in add:
                 self.options_order.append(k)
 
-    @admin_protect
-    def GET(self, *args, **kwargs):
+    def root_with_msg(self, message=None, message_type=None):
         return self._template('admin/plugin_config.html', title=self.title,
+                              menu=self.menu, action=self.url, back=self.back,
+                              message=message, message_type=message_type,
                               name='admin_%s_%s_form' % (self.facility,
                                                          self._po.name),
-                              menu=self.menu, action=self.url, back=self.back,
                               options_order=self.options_order,
                               plugin=self._po)
 
+    @admin_protect
+    def GET(self, *args, **kwargs):
+        return self.root_with_msg()
+
     @admin_protect
     def POST(self, *args, **kwargs):
 
@@ -106,13 +110,8 @@ class AdminPluginConfig(AdminPage):
             # And only if it succeeds we change the live object
             self._po.refresh_plugin_config(self.facility)
 
-        return self._template('admin/plugin_config.html', title=self.title,
-                              message=message,
-                              message_type=message_type,
-                              name='admin_%s_%s_form' % (self.facility,
-                                                         self._po.name),
-                              menu=self.menu, action=self.url,
-                              plugin=self._po)
+        return self.root_with_msg(message=message,
+                                  message_type=message_type)
 
 
 class AdminPluginsOrder(AdminPage):
@@ -128,11 +127,18 @@ class AdminPluginsOrder(AdminPage):
     def GET(self, *args, **kwargs):
         return self.parent.root_with_msg()
 
+    def _get_enabled_by_name(self):
+        by_name = dict()
+        for p in self._site[self.facility]['available'].values():
+            if p.is_enabled:
+                by_name[p.name] = p
+        return by_name
+
     @admin_protect
     def POST(self, *args, **kwargs):
         message = "Nothing was modified."
         message_type = "info"
-        by_name = {p.name: p for p in self._site[self.facility]['enabled']}
+        by_name = self._get_enabled_by_name()
 
         if 'order' in kwargs:
             order = kwargs['order'].split(',')
@@ -213,8 +219,15 @@ class AdminPlugins(AdminPage):
     def root_with_msg(self, message=None, message_type=None):
         plugins = self._site[self.facility]
         enabled = []
-        for p in plugins['enabled']:
-            enabled.append(p.name)
+        if self.order:
+            for plugin in plugins['enabled']:
+                if plugin.is_enabled:
+                    enabled.append(plugin.name)
+        else:
+            for _, plugin in plugins['available'].iteritems():
+                if plugin.is_enabled:
+                    enabled.append(plugin.name)
+
         targs = {'title': self.title,
                  'menu': self._master.menu,
                  'message': message,
@@ -240,7 +253,7 @@ class AdminPlugins(AdminPage):
             msg = "Unknown plugin %s" % plugin
             return self.root_with_msg(msg, "error")
         obj = plugins['available'][plugin]
-        if obj not in plugins['enabled']:
+        if not obj.is_enabled:
             obj.enable(self._site)
             if self.order:
                 enabled = list(x.name for x in plugins['enabled'])
@@ -257,7 +270,7 @@ class AdminPlugins(AdminPage):
             msg = "Unknown plugin %s" % plugin
             return self.root_with_msg(msg, "error")
         obj = plugins['available'][plugin]
-        if obj in plugins['enabled']:
+        if obj.is_enabled:
             obj.disable(self._site)
             if self.order:
                 enabled = list(x.name for x in plugins['enabled'])
@@ -271,12 +284,15 @@ class Admin(AdminPage):
 
     def __init__(self, site, mount):
         super(Admin, self).__init__(site)
+        self.title = 'Home'
+        self.mount = mount
         self.url = '%s/%s' % (self.basepath, mount)
-        self.menu = []
+        self.menu = [self]
 
     def root(self, *args, **kwargs):
         return self._template('admin/index.html',
                               title='Configuration',
+                              baseurl=self.url,
                               menu=self.menu)
 
     def add_subtree(self, name, page):
@@ -286,3 +302,20 @@ class Admin(AdminPage):
     def del_subtree(self, name):
         self.menu.remove(self.__dict__[name])
         del self.__dict__[name]
+
+    def get_menu_urls(self):
+        urls = dict()
+        for item in self.menu:
+            name = getattr(item, 'name', None)
+            if name:
+                urls['%s_url' % name] = cherrypy.url('/%s/%s' % (self.mount,
+                                                                 name))
+        return urls
+
+    @admin_protect
+    def scheme(self):
+        cherrypy.response.headers.update({'Content-Type': 'image/svg+xml'})
+        urls = self.get_menu_urls()
+        # pylint: disable=star-args
+        return self._template('admin/ipsilon-scheme.svg', **urls)
+    scheme.public_function = True