From 5230a8e0a06a5d67d6c13f2359bc51be07b4fb5a Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 9 Sep 2016 00:41:57 +0200 Subject: Shortcut menu: menu is now dynamic - selected items filter dependant items (refs #2996) - can now pin items from sheet (refs #3078) --- ishtar_common/models.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'ishtar_common/models.py') diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 6150ab0aa..9e48df8d2 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -235,7 +235,7 @@ class OwnPerms: return cls.objects.filter(query).count() @classmethod - def get_owns(cls, user): + def get_owns(cls, user, extra_query={}): """ Get Own items """ @@ -249,8 +249,10 @@ class OwnPerms: query = cls.get_query_owns(user) if not query: return cls.objects.filter(pk__isnull=True) - items += list( - cls.objects.filter(query).order_by(*cls._meta.ordering).all()) + q = cls.objects.filter(query) + if extra_query: + q = q.filter(**extra_query) + items += list(q.order_by(*cls._meta.ordering).all()) return items -- cgit v1.2.3 From 916920ad3dcc18c2c252698ee192c265743ab01a Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 9 Sep 2016 14:32:28 +0200 Subject: Shortcut menu: show all dependent items of pinned but not own parent item --- archaeological_context_records/models.py | 6 +++--- archaeological_finds/models.py | 6 +++--- archaeological_operations/models.py | 7 ++++--- ishtar_common/models.py | 8 ++++---- ishtar_common/views.py | 1 + 5 files changed, 15 insertions(+), 13 deletions(-) (limited to 'ishtar_common/models.py') diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index d4e175d55..0123dd2ed 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -227,11 +227,11 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): @classmethod def get_owns(cls, user, menu_filtr=None): - extra_query = {} + replace_query = {} if menu_filtr: - extra_query = {'operation': menu_filtr} + replace_query = {'operation': menu_filtr} owns = super(ContextRecord, cls).get_owns(user, - extra_query=extra_query) + replace_query=replace_query) return sorted(owns, key=lambda x: x.cached_label) def full_label(self): diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index d266bba76..603e046ee 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -575,10 +575,10 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): @classmethod def get_owns(cls, user, menu_filtr=None): - extra_query = {} + replace_query = {} if menu_filtr: - extra_query = {'base_finds__context_record': menu_filtr} - owns = super(Find, cls).get_owns(user, extra_query=extra_query) + replace_query = {'base_finds__context_record': menu_filtr} + owns = super(Find, cls).get_owns(user, replace_query=replace_query) return sorted(owns, key=lambda x: x.cached_label) def _generate_cached_label(self): diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 701ae4593..228e9859e 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -300,10 +300,11 @@ class Operation(ClosedItem, BaseHistorizedItem, ImageModel, OwnPerms, @classmethod def get_owns(cls, user, menu_filtr=None): - extra_query = {} + replace_query = {} if menu_filtr: - extra_query = {'associated_file': menu_filtr} - owns = super(Operation, cls).get_owns(user, extra_query=extra_query) + replace_query = {'associated_file': menu_filtr} + owns = super(Operation, cls).get_owns( + user, replace_query=replace_query) # owns = owns.annotate(null_count=Count('operation_code')) # return owns.order_by("common_name", "-year", "operation_code") return sorted(owns, key=lambda x: x.cached_label) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 9e48df8d2..29dedd113 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -235,7 +235,7 @@ class OwnPerms: return cls.objects.filter(query).count() @classmethod - def get_owns(cls, user, extra_query={}): + def get_owns(cls, user, replace_query={}): """ Get Own items """ @@ -247,11 +247,11 @@ class OwnPerms: if hasattr(cls, 'BASKET_MODEL'): items = list(cls.BASKET_MODEL.objects.filter(user=user).all()) query = cls.get_query_owns(user) - if not query: + if not query and not replace_query: return cls.objects.filter(pk__isnull=True) q = cls.objects.filter(query) - if extra_query: - q = q.filter(**extra_query) + if replace_query: + q = cls.objects.filter(**replace_query) items += list(q.order_by(*cls._meta.ordering).all()) return items diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 5022aa08e..95c4dbd76 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -236,6 +236,7 @@ def shortcut_menu(request): if not new_selected_item and current: try: item = model.objects.get(pk=int(current)) + new_selected_item = item items.append((item.pk, shortify(unicode(item), 60), True, item.get_short_menu_class())) except (model.DoesNotExist, ValueError): -- cgit v1.2.3 From 5d82761818925d118537043ccd8dc287a0e41209 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 9 Sep 2016 17:21:35 +0200 Subject: Reactivate right cache (finger crossed) --- ishtar_common/menu_base.py | 4 ++-- ishtar_common/models.py | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'ishtar_common/models.py') diff --git a/ishtar_common/menu_base.py b/ishtar_common/menu_base.py index 7c309d376..64dfbae95 100644 --- a/ishtar_common/menu_base.py +++ b/ishtar_common/menu_base.py @@ -89,9 +89,9 @@ class MenuItem: for access_control in self.access_controls: access_control = prefix + access_control if hasattr(user, 'ishtaruser') and \ - user.ishtaruser.has_perm(access_control, self.model) or\ + user.ishtaruser.has_perm(access_control, self.model, + session=session) or \ access_control in user.get_group_permissions(): - # session=session) or \ return True # manage by person type if hasattr(user, 'ishtaruser'): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 29dedd113..e4a72eab7 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2414,10 +2414,10 @@ class Person(Address, Merge, OwnPerms, ValueGetter): bool(self.person_types.filter( groups__permissions__codename=right_name).count()) or \ bool(self.ishtaruser.filter( - groups__permissions__codename__in=right_name + groups__permissions__codename__in=[right_name] ).count()) or\ bool(self.ishtaruser.filter( - user_permissions__codename__in=right_name).count()) + user_permissions__codename__in=[right_name]).count()) # or self.person_types.filter(wizard__url_name=right_name).count()) if session: cache.set(cache_key, res, settings.CACHE_SMALLTIMEOUT) @@ -2514,8 +2514,9 @@ class IshtarUser(User): def has_perm(self, perm, model=None, session=None, obj=None): if not session: return super(IshtarUser, self).has_perm(perm, model) - cache_key = 'usersession-{}-{}'.format(session.session_key, perm, - model or 'no') + cache_key = 'usersession-{}-{}-{}-{}'.format( + session.session_key, perm, model.__name__ if model else 'no', + obj.pk if obj else 'no') res = cache.get(cache_key) if res in (True, False): return res -- cgit v1.2.3