Revision 0be81d73 snf-astakos-app/astakos/im/views/im.py
b/snf-astakos-app/astakos/im/views/im.py | ||
---|---|---|
41 | 41 |
from django.shortcuts import get_object_or_404 |
42 | 42 |
from django.contrib import messages |
43 | 43 |
from django.contrib.auth.decorators import login_required |
44 |
from django.contrib.auth.models import User |
|
44 | 45 |
from django.core.urlresolvers import reverse |
45 | 46 |
from django.db import transaction |
46 | 47 |
from django.http import HttpResponse, HttpResponseRedirect, Http404 |
... | ... | |
814 | 815 |
return render_response( |
815 | 816 |
'im/api_access.html', |
816 | 817 |
context_instance=get_context(request)) |
818 |
|
|
819 |
@cookie_fix |
|
820 |
def get_menu(request, with_extra_links=False, with_signout=True): |
|
821 |
user = request.user |
|
822 |
index_url = reverse('index') |
|
823 |
|
|
824 |
if isinstance(user, User) and user.is_authenticated(): |
|
825 |
l = [] |
|
826 |
append = l.append |
|
827 |
item = MenuItem |
|
828 |
item.current_path = request.build_absolute_uri(request.path) |
|
829 |
append(item(url=request.build_absolute_uri(reverse('index')), |
|
830 |
name=user.email)) |
|
831 |
if with_extra_links: |
|
832 |
append(item(url=request.build_absolute_uri(reverse('landing')), |
|
833 |
name="Overview")) |
|
834 |
if with_signout: |
|
835 |
append(item(url=request.build_absolute_uri(reverse('landing')), |
|
836 |
name="Dashboard")) |
|
837 |
if with_extra_links: |
|
838 |
append(item(url=request.build_absolute_uri(reverse('edit_profile')), |
|
839 |
name="Profile")) |
|
840 |
|
|
841 |
if with_extra_links: |
|
842 |
if settings.INVITATIONS_ENABLED: |
|
843 |
append(item(url=request.build_absolute_uri(reverse('invite')), |
|
844 |
name="Invitations")) |
|
845 |
|
|
846 |
append(item(url=request.build_absolute_uri(reverse('resource_usage')), |
|
847 |
name="Usage")) |
|
848 |
|
|
849 |
if settings.PROJECTS_VISIBLE: |
|
850 |
append(item(url=request.build_absolute_uri(reverse('project_list')), |
|
851 |
name="Projects")) |
|
852 |
|
|
853 |
append(item(url=request.build_absolute_uri(reverse('feedback')), |
|
854 |
name="Contact")) |
|
855 |
if with_signout: |
|
856 |
append(item(url=request.build_absolute_uri(reverse('logout')), |
|
857 |
name="Sign out")) |
|
858 |
else: |
|
859 |
l = [{'url': request.build_absolute_uri(index_url), |
|
860 |
'name': _("Sign in")}] |
|
861 |
|
|
862 |
callback = request.GET.get('callback', None) |
|
863 |
data = json.dumps(tuple(l)) |
|
864 |
mimetype = 'application/json' |
|
865 |
|
|
866 |
if callback: |
|
867 |
mimetype = 'application/javascript' |
|
868 |
data = '%s(%s)' % (callback, data) |
|
869 |
|
|
870 |
return HttpResponse(content=data, mimetype=mimetype) |
|
871 |
|
|
872 |
|
|
873 |
class MenuItem(dict): |
|
874 |
current_path = '' |
|
875 |
|
|
876 |
def __init__(self, *args, **kwargs): |
|
877 |
super(MenuItem, self).__init__(*args, **kwargs) |
|
878 |
if kwargs.get('url') or kwargs.get('submenu'): |
|
879 |
self.__set_is_active__() |
|
880 |
|
|
881 |
def __setitem__(self, key, value): |
|
882 |
super(MenuItem, self).__setitem__(key, value) |
|
883 |
if key in ('url', 'submenu'): |
|
884 |
self.__set_is_active__() |
|
885 |
|
|
886 |
def __set_is_active__(self): |
|
887 |
if self.get('is_active'): |
|
888 |
return |
|
889 |
if self.current_path.startswith(self.get('url')): |
|
890 |
self.__setitem__('is_active', True) |
|
891 |
else: |
|
892 |
submenu = self.get('submenu', ()) |
|
893 |
current = (i for i in submenu if i.get('url') == self.current_path) |
|
894 |
try: |
|
895 |
current_node = current.next() |
|
896 |
if not current_node.get('is_active'): |
|
897 |
current_node.__setitem__('is_active', True) |
|
898 |
self.__setitem__('is_active', True) |
|
899 |
except StopIteration: |
|
900 |
return |
|
901 |
|
|
902 |
def __setattribute__(self, name, value): |
|
903 |
super(MenuItem, self).__setattribute__(name, value) |
|
904 |
if name == 'current_path': |
|
905 |
self.__set_is_active__() |
Also available in: Unified diff