3 # Copyright (C) 2014 Ipsilon Contributors see COPYING for license
6 from ipsilon.util.page import admin_protect
7 from ipsilon.util.plugin import PluginObject
8 from ipsilon.admin.common import AdminPluginPage
9 from ipsilon.admin.common import AdminPage
10 from ipsilon.info.common import FACILITY
13 def save_enabled_plugins(names):
17 globalconf['order'] = ','.join(names)
18 po.set_config(globalconf)
19 po.save_plugin_config(FACILITY)
22 class InfoPluginsOrder(AdminPage):
24 def __init__(self, site, parent):
25 super(InfoPluginsOrder, self).__init__(site, form=True)
26 self.url = '%s/order' % parent.url
30 def GET(self, *args, **kwargs):
31 opts = [p.name for p in self._site[FACILITY]['enabled']]
32 return self._template('admin/info_order.html',
33 title='info plugins order',
34 name='admin_info_order_form',
35 menu=self.menu, action=self.url,
39 def POST(self, *args, **kwargs):
40 message = "Nothing was modified."
42 plugins_by_name = {p.name: p for p in self._site[FACILITY]['enabled']}
45 order = kwargs['order'].split(',')
52 if val not in plugins_by_name:
53 error = "Invalid plugin name: %s" % val
54 raise ValueError(error)
56 new_plugins.append(plugins_by_name[val])
57 if len(new_names) < len(plugins_by_name):
58 for val in plugins_by_name:
59 if val not in new_names:
61 new_plugins.append(plugins_by_name[val])
63 save_enabled_plugins(new_names)
65 # When all is saved update also live config. The
66 # live config is a list of the actual plugin
68 self._site[FACILITY]['enabled'] = new_plugins
70 message = "New configuration saved."
71 message_type = "success"
75 message_type = "error"
77 except Exception, e: # pylint: disable=broad-except
78 message = "Failed to save data!"
79 message_type = "error"
81 opts = [p.name for p in self._site[FACILITY]['enabled']]
82 return self._template('admin/info_order.html',
84 message_type=message_type,
85 title='info plugins order',
86 name='admin_info_order_form',
87 menu=self.menu, action=self.url,
91 class InfoPlugins(AdminPage):
92 def __init__(self, site, parent):
93 super(InfoPlugins, self).__init__(site)
95 self.title = 'Info Plugins'
96 self.url = '%s/info' % parent.url
97 self.facility = FACILITY
98 parent.add_subtree('info', self)
100 for plugin in self._site[FACILITY]['available']:
101 cherrypy.log.error('Admin info plugin: %s' % plugin)
102 obj = self._site[FACILITY]['available'][plugin]
103 self.__dict__[plugin] = AdminPluginPage(obj, self._site, self)
105 self.order = InfoPluginsOrder(self._site, self)
107 def root_with_msg(self, message=None, message_type=None):
108 info_plugins = self._site[FACILITY]
110 for p in info_plugins['enabled']:
111 ordered.append(p.name)
112 return self._template('admin/info.html', title=self.title,
114 message_type=message_type,
115 available=info_plugins['available'],
117 menu=self._master.menu)
119 def root(self, *args, **kwargs):
120 return self.root_with_msg()
123 def enable(self, plugin):
125 plugins = self._site[FACILITY]
126 if plugin not in plugins['available']:
127 msg = "Unknown plugin %s" % plugin
128 return self.root_with_msg(msg, "error")
129 obj = plugins['available'][plugin]
130 if obj not in plugins['enabled']:
131 obj.enable(self._site)
132 save_enabled_plugins(list(x.name for x in plugins['enabled']))
133 msg = "Plugin %s enabled" % obj.name
134 return self.root_with_msg(msg, "success")
135 enable.public_function = True
138 def disable(self, plugin):
140 plugins = self._site[FACILITY]
141 if plugin not in plugins['available']:
142 msg = "Unknown plugin %s" % plugin
143 return self.root_with_msg(msg, "error")
144 obj = plugins['available'][plugin]
145 if obj in plugins['enabled']:
146 obj.disable(self._site)
147 save_enabled_plugins(list(x.name for x in plugins['enabled']))
148 msg = "Plugin %s disabled" % obj.name
149 return self.root_with_msg(msg, "success")
150 disable.public_function = True