1faa0895f039ce9447119272c1db32eeb665c3fe
[cascardo/ipsilon.git] / ipsilon / admin / loginstack.py
1 # Copyright (C) 2014  Ipsilon Contributors see COPYING for license
2
3 from ipsilon.admin.common import AdminPlugins
4
5
6 FACILITY = 'login stack'
7
8
9 class LoginStackPlugins(AdminPlugins):
10
11     def __init__(self, name, site, parent, facility, **kwargs):
12         super(LoginStackPlugins, self).__init__(name, site, parent,
13                                                 facility,  **kwargs)
14         self.parent = parent
15
16     def root_with_msg(self, message=None, message_type=None, changed=None):
17         return self.parent.root_with_msg(message, message_type, changed)
18
19
20 class LoginStack(AdminPlugins):
21     def __init__(self, site, parent):
22         self.children = []
23         site[FACILITY] = None
24         super(LoginStack, self).__init__('loginstack', site, parent, FACILITY)
25         self.title = 'Login Stack'
26         self.template = 'admin/loginstack.html'
27
28     def add_subtree(self, name, page):
29         self.__dict__[name] = page
30         self.children.append(page)
31
32     def del_subtree(self, name):
33         self.children.remove(self.__dict__[name])
34         del self.__dict__[name]
35
36     def get_children_urls(self):
37         urls = dict()
38         for item in self.children:
39             name = getattr(item, 'name', None)
40             if name:
41                 urls['%s_url' % name] = cherrypy.url('/%s/%s' % (self.mount,
42                                                                  name))
43         return urls
44
45     def root_with_msg(self, message=None, message_type=None, changed=None):
46         # Force the url to be that of the Login Stack
47         kwargs = {'title': self.title,
48                   'menu': self._master.menu,
49                   'message': message,
50                   'message_type': message_type,
51                   'newurl': self.url,
52                   'sections': list()}
53         for child in self.children:
54             plugins = child._site[child.facility]
55
56             if changed is None:
57                 changed = dict()
58
59             targs = {'title': child.title,
60                      'available': plugins.available,
61                      'enabled': plugins.enabled,
62                      'changed': changed,
63                      'baseurl': child.url}
64             if child.order:
65                 targs['order_name'] = '%s_order_form' % child.name
66                 targs['order_action'] = child.order.url
67
68             kwargs['sections'].append(targs)
69
70         # pylint: disable=star-args
71         return self._template(self.template, **kwargs)