2 from pprint import pprint
3 from manifold.manifoldapi import execute_query
4 from manifold.core.query import Query
5 # a set of utilities to help make the global layout consistent across views
7 # dropdowns are kind of ad hoc for now, and limited to one level
9 # ### a regular first-level button
10 # {'label':...,'href':...},
12 # { 'label': ..., 'href'=..., 'dropdown':True, 'contents': [ { 'label':.., 'href'} ] }
15 # current: the beginning of the label in the menu that you want to outline
16 def topmenu_items (current,request=None):
17 has_user=request.user.is_authenticated()
21 result.append({'label':'Dashboard', 'href': '/portal/dashboard/'})
22 result.append({'label':'Request a slice', 'href': '/portal/slice_request/'})
23 # ** Where am I a PI **
24 # For this we need to ask SFA (of all authorities) = PI function
25 user_query = Query().get('local:user').select('config','email')
26 user_details = execute_query(request, user_query)
28 # Required: the user must have an authority in its user.config
29 # XXX Temporary solution
30 # not always found in user_details...
32 # Deactivated until fixed
33 # if user_details is not None:
34 # for user_detail in user_details:
35 # #email = user_detail['email']
36 # if user_detail['config']:
37 # config = json.loads(user_detail['config'])
38 # user_detail['authority'] = config.get('authority',"Unknown Authority")
39 # print "topmenu: %s", (user_detail['authority'])
40 # if user_detail['authority'] is not None:
41 # sub_authority = user_detail['authority'].split('.')
42 # root_authority = sub_authority[0]
43 # pi_authorities_query = Query.get(root_authority+':user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
45 # pi_authorities_query = Query.get('user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
47 # pi_authorities_tmp = execute_query(request, pi_authorities_query)
49 # pi_authorities_tmp = set()
50 # pi_authorities = set()
51 # for pa in pi_authorities_tmp:
52 # if 'pi_authorities' in pa:
53 # pi_authorities |= set(pa['pi_authorities'])
54 # print "pi_authorities =", pi_authorities
55 # if len(pi_authorities) > 0:
56 # result.append({'label':'Validation', 'href': '/portal/validate/'})
57 result.append({'label':'Validation', 'href': '/portal/validate/'})
59 dropdown.append({'label':'Platforms', 'href': '/portal/platforms/'})
60 dropdown.append({'label':'My Account', 'href': '/portal/account/'})
61 dropdown.append({'label':'Contact Support', 'href': '/portal/contact/'})
62 result.append({'label': 'More', 'href':"#", 'dropdown':True, 'contents':dropdown})
64 result.append({'label':'Home', 'href': '/login'})
65 # looks like this is accessible to non-logged users
66 result.append({'label':'Platforms', 'href': '/portal/platforms/'})
67 result.append({'label':'Register', 'href': '/portal/register/'})
68 result.append({'label':'Contact Support', 'href': '/portal/contact/'})
69 # mark active if the provided 'current', even if shorter, matches the beginning of d['label']
71 if current is not None:
72 current=current.lower()
74 def mark_active(d,up=None):
75 if d['label'][:curlen].lower() == current:
77 if up is not None: up['is_active']=True
81 for dd in d['contents']: mark_active(dd,d)
84 def the_user (request):
85 "retrieves logged in user's email, or empty string"
86 if not request.user.is_authenticated ():
89 return request.user.email