Fix plugins enablement code
[cascardo/ipsilon.git] / ipsilon / admin / common.py
index b3c318b..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(',')
@@ -215,7 +221,8 @@ class AdminPlugins(AdminPage):
         enabled = []
         if self.order:
             for plugin in plugins['enabled']:
-                enabled.append(plugin.name)
+                if plugin.is_enabled:
+                    enabled.append(plugin.name)
         else:
             for _, plugin in plugins['available'].iteritems():
                 if plugin.is_enabled:
@@ -277,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):
@@ -292,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