59 |
59 |
from combo import utils
|
60 |
60 |
from combo.utils import NothingInCacheException
|
61 |
61 |
|
|
62 |
if 'mellon' in settings.INSTALLED_APPS:
|
|
63 |
from mellon.utils import user_has_roles, get_role_request_url
|
|
64 |
from mellon.exceptions import RolesNotInSession
|
|
65 |
else:
|
|
66 |
def user_has_roles(request, roles):
|
|
67 |
return len(set(page_groups).intersection(request.user.groups.all())) > 0
|
|
68 |
|
62 |
69 |
|
63 |
70 |
class PostException(Exception):
|
64 |
71 |
pass
|
65 |
72 |
|
66 |
73 |
|
67 |
|
def element_is_visible(element, user=None):
|
|
74 |
def element_is_visible(element, request=None):
|
68 |
75 |
if element.public:
|
69 |
76 |
if getattr(element, 'restricted_to_unlogged', None) is True:
|
70 |
|
return (user is None or user.is_anonymous())
|
|
77 |
return (request is None or request.user.is_anonymous())
|
71 |
78 |
return True
|
72 |
|
if user is None or user.is_anonymous():
|
|
79 |
if request is None or request.user.is_anonymous():
|
73 |
80 |
return False
|
74 |
|
if user.is_superuser:
|
75 |
|
return True
|
76 |
81 |
page_groups = element.groups.all()
|
77 |
82 |
if not page_groups:
|
78 |
83 |
groups_ok = True
|
79 |
84 |
else:
|
80 |
|
groups_ok = len(set(page_groups).intersection(user.groups.all())) > 0
|
|
85 |
groups_ok = user_has_roles(request, page_groups)
|
81 |
86 |
if getattr(element, 'restricted_to_unlogged', None) is True:
|
82 |
|
return not(groups_ok)
|
|
87 |
return request.user.is_superuser or not(groups_ok)
|
83 |
88 |
return groups_ok
|
84 |
89 |
|
85 |
90 |
|
... | ... | |
338 |
343 |
return _('Public')
|
339 |
344 |
return _('Private (%s)') % ', '.join([x.name for x in self.groups.all()])
|
340 |
345 |
|
341 |
|
def is_visible(self, user=None):
|
342 |
|
return element_is_visible(self, user=user)
|
|
346 |
def is_visible(self, request=None):
|
|
347 |
return element_is_visible(self, request=request)
|
343 |
348 |
|
344 |
349 |
def get_cells(self):
|
345 |
350 |
return CellBase.get_cells(page=self)
|
... | ... | |
669 |
674 |
def get_extra_manager_context(self):
|
670 |
675 |
return {}
|
671 |
676 |
|
672 |
|
def is_visible(self, user=None):
|
673 |
|
return element_is_visible(self, user=user)
|
|
677 |
def is_visible(self, request=None):
|
|
678 |
try:
|
|
679 |
return element_is_visible(self, request=request)
|
|
680 |
except RolesNotInSession as e:
|
|
681 |
self.missing_roles = e.roles
|
|
682 |
return True
|
674 |
683 |
|
675 |
684 |
def is_relevant(self, context):
|
676 |
685 |
'''Return whether it's relevant to render this cell in the page
|
... | ... | |
689 |
698 |
return {'cell': self}
|
690 |
699 |
|
691 |
700 |
def render(self, context):
|
|
701 |
if getattr(self, 'missing_roles', None):
|
|
702 |
# je vois un context.get('request') plus bas, mais il faudrait que je sache
|
|
703 |
# dans quel cas ca arrive avant de pouvoir le gerer proprement ici
|
|
704 |
context['url'] = get_role_request_url(context['request'], self.missing_roles)
|
|
705 |
context['title'] = _('Some permissions are missing in order to view this cell.')
|
|
706 |
tmpl = template.loader.get_template('combo/link-cell.html')
|
|
707 |
return tmpl.render(context, context['request'])
|
692 |
708 |
context.update(self.get_cell_extra_context(context))
|
693 |
709 |
template_names = ['combo/' + self._meta.model_name + '.html']
|
694 |
710 |
base_template_name = self._meta.model_name + '.html'
|