6eafaf8c45a137e3e92b9425f90b537108afaa49
[myslice.git] / plugins / topmenuvalidation / __init__.py
1 from unfold.plugin import Plugin
2
3 class TopmenuValidation (Plugin):
4
5     """This plugin is designed to work together with topmenu.
6     
7 It will check to see if user has PI rights at least on one authority, 
8 and if so will enable corresponding validation button in topmenu.
9
10 A realistic example would have incoming query as
11
12 Query.get('ple:user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
13
14 """
15
16     def __init__ (self, query=None, button_domid=None, **settings):
17         Plugin.__init__ (self, **settings)
18         # set defaults
19         if query is None: 
20             query = Query.get('ple:user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
21         if button_domid is None: button_domid="topmenu-validate"
22         self.query=query
23         self.button_domid=button_domid
24
25     # this does not have any materialization
26     def render_content (self, request):
27         return ""
28     
29     def requirements (self):
30         return { 'js_files': [ 'js/topmenuvalidation.js', 'js/manifold-query.js', 
31                                "js/spin-presets.js", "js/spin.min.js", "js/jquery.spin.js", 
32                                ], }
33
34     def json_settings_list (self):
35         return [ 'query_uuid', 'button_domid', ]
36
37 #################### here is an extract previously in topmenu.py
38 ###        # ** Where am I a PI **
39 ###        # For this we need to ask SFA (of all authorities) = PI function
40 ###        user_query  = Query().get('local:user').select('config','email')
41 ###        user_details = execute_query(request, user_query)
42 ###
43 ###        # Required: the user must have an authority in its user.config
44 ###        # XXX Temporary solution
45 ###        # not always found in user_details...
46 ###        config={}
47 #### Deactivated until fixed 
48 ####        if user_details is not None:
49 ####            for user_detail in user_details:
50 ####                #email = user_detail['email']
51 ####                if user_detail['config']:
52 ####                    config = json.loads(user_detail['config'])
53 ####            user_detail['authority'] = config.get('authority',"Unknown Authority")
54 ####            print "topmenu: %s", (user_detail['authority'])
55 ####            if user_detail['authority'] is not None:
56 ####                sub_authority = user_detail['authority'].split('.')
57 ####                root_authority = sub_authority[0]
58 ####                pi_authorities_query = Query.get(root_authority+':user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
59 ####        else:
60 ####            pi_authorities_query = Query.get('user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
61 ####        try:
62 ####            pi_authorities_tmp = execute_query(request, pi_authorities_query)
63 ####        except:
64 ####            pi_authorities_tmp = set()
65 ####        pi_authorities = set()
66 ####        for pa in pi_authorities_tmp:
67 ####            if 'pi_authorities' in pa:
68 ####                pi_authorities |= set(pa['pi_authorities'])
69 ####        print "pi_authorities =", pi_authorities
70 ####        if len(pi_authorities) > 0:
71 ####            result.append({'label':'Validation', 'href': '/portal/validate/'})
72 ###        result.append({'label':'Validation', 'href': '/portal/validate/'})