1 from unfold.plugin import Plugin
3 class TopmenuValidation (Plugin):
5 """This plugin is designed to work together with topmenu.
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.
10 A realistic example would have incoming query as
12 Query.get('ple:user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
16 def __init__ (self, query=None, button_domid=None, **settings):
17 Plugin.__init__ (self, **settings)
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"
23 self.button_domid=button_domid
25 # this does not have any materialization
26 def render_content (self, request):
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",
34 def json_settings_list (self):
35 return [ 'query_uuid', 'button_domid', ]
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)
43 ### # Required: the user must have an authority in its user.config
44 ### # XXX Temporary solution
45 ### # not always found in user_details...
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')
60 #### pi_authorities_query = Query.get('user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
62 #### pi_authorities_tmp = execute_query(request, pi_authorities_query)
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/'})