diff --git a/taiga/timeline/api.py b/taiga/timeline/api.py index 41b24548..e940e019 100644 --- a/taiga/timeline/api.py +++ b/taiga/timeline/api.py @@ -76,15 +76,23 @@ class TimelineViewSet(ReadOnlyListViewSet): qs = self.get_timeline(obj) if request.GET.get("only_relevant", None) is not None: - qs = qs.exclude(event_type="issues.issue.change", data__at_values_diff="{}") - qs = qs.exclude(event_type="tasks.task.change", data__at_values_diff="{}") - qs = qs.exclude(event_type="userstories.userstory.change", data__at_values_diff="{}") - qs = qs.exclude(event_type="wiki.wikipage.change", data__at_values_diff="{}") - qs = qs.exclude(event_type="issues.issue.delete") - qs = qs.exclude(event_type="tasks.task.delete") - qs = qs.exclude(event_type="userstories.userstory.delete") - qs = qs.exclude(event_type="wiki.wikipage.delete") - qs = qs.exclude(event_type="projects.project.change") + qs = qs.extra(where=[ + """ + NOT( + data::text LIKE '%%\"values_diff\": {}%%' + AND + event_type::text = ANY('{issues.issue.change, + tasks.task.change, + userstories.userstory.change, + wiki.wikipage.change}'::text[]) + ) + """]) + + qs = qs.exclude(event_type__in=["issues.issue.delete", + "tasks.task.delete", + "userstories.userstory.delete", + "wiki.wikipage.delete", + "projects.project.change"]) return self.response_for_queryset(qs) diff --git a/taiga/timeline/service.py b/taiga/timeline/service.py index 5bfdeebb..88c85a9a 100644 --- a/taiga/timeline/service.py +++ b/taiga/timeline/service.py @@ -130,10 +130,9 @@ def filter_timeline_for_user(timeline, user): # Filtering private projects where user is member if not user.is_anonymous(): for membership in user.cached_memberships: - for content_type_key, content_type in content_types.items(): - if content_type_key in membership.role.permissions or membership.is_owner: - tl_filter |= Q(project=membership.project, data_content_type=content_type) - tl_filter |= Q(project=membership.project, data_content_type=membership_content_type) + data_content_types = list(filter(None, [content_types.get(a, None) for a in membership.role.permissions])) + data_content_types.append(membership_content_type) + tl_filter |= Q(project=membership.project, data_content_type__in=data_content_types) timeline = timeline.filter(tl_filter) return timeline