6fbede50c3510e350fda7b07e21c2ae3d9a60f44
[myslice.git] / ui / topmenu.py
1 import json
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
6
7 # dropdowns are kind of ad hoc for now, and limited to one level
8 # [ 
9 # ### a regular first-level button
10 # {'label':...,'href':...}, 
11 # ### a dropdown
12 # { 'label': ..., 'href'=..., 'dropdown':True, 'contents': [ { 'label':.., 'href'} ] }
13 # , ..]
14
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()
18     result=[]
19     print request.user
20     if has_user:
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)
27
28         # Required: the user must have an authority in its user.config
29         # XXX Temporary solution
30         # not always found in user_details...
31         config={}
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')
44 #        else:
45 #            pi_authorities_query = Query.get('user').filter_by('user_hrn', '==', '$user_hrn').select('pi_authorities')
46 #        try:
47 #            pi_authorities_tmp = execute_query(request, pi_authorities_query)
48 #        except:
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/'})
58         dropdown = []
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})
63     else:
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']
70     
71     if current is not None:
72         current=current.lower()
73         curlen=len(current)
74         def mark_active(d,up=None):
75             if d['label'][:curlen].lower() == current: 
76                 d['is_active']=True
77                 if up is not None: up['is_active']=True
78         for d in result:
79             mark_active(d)
80             if 'dropdown' in d:
81                 for dd in d['contents']: mark_active(dd,d)
82     return result
83
84 def the_user (request):
85     "retrieves logged in user's email, or empty string"
86     if not request.user.is_authenticated (): 
87         return ''
88     else: 
89         return request.user.email