From 4fa4c02d16b8452437303709e606a8fa40929074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Hermida?= Date: Thu, 22 Nov 2018 16:51:36 +0100 Subject: [PATCH] Add my_homepage attr to projects list --- taiga/projects/api.py | 2 +- taiga/projects/serializers.py | 9 +++++++++ taiga/projects/utils.py | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/taiga/projects/api.py b/taiga/projects/api.py index 007e939c..78495364 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -113,8 +113,8 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, qs = project_utils.attach_notify_policies(qs) qs = project_utils.attach_is_fan(qs, user=self.request.user) qs = project_utils.attach_my_role_permissions(qs, user=self.request.user) - qs = project_utils.attach_my_role_permissions(qs, user=self.request.user) qs = project_utils.attach_closed_milestones(qs) + qs = project_utils.attach_my_homepage(qs, user=self.request.user) else: qs = project_utils.attach_extra_info(qs, user=self.request.user) diff --git a/taiga/projects/serializers.py b/taiga/projects/serializers.py index 4d138e71..d87da37b 100644 --- a/taiga/projects/serializers.py +++ b/taiga/projects/serializers.py @@ -290,6 +290,8 @@ class ProjectSerializer(serializers.LightSerializer): is_fan = Field(attr="is_fan_attr") + my_homepage = MethodField() + def get_members(self, obj): assert hasattr(obj, "members_attr"), "instance must have a members_attr attribute" if obj.members_attr is None: @@ -374,6 +376,13 @@ class ProjectSerializer(serializers.LightSerializer): def get_logo_big_url(self, obj): return services.get_logo_big_thumbnail_url(obj) + def get_my_homepage(self, obj): + assert hasattr(obj, "my_homepage_attr"), "instance must have a my_homepage_attr attribute" + if obj.my_homepage_attr is None: + return False + + return obj.my_homepage_attr + class ProjectDetailSerializer(ProjectSerializer): epic_statuses = Field(attr="epic_statuses_attr") diff --git a/taiga/projects/utils.py b/taiga/projects/utils.py index 39d246eb..145602e4 100644 --- a/taiga/projects/utils.py +++ b/taiga/projects/utils.py @@ -593,6 +593,30 @@ def attach_public_projects_same_owner(queryset, user, as_field="public_projects_ return queryset +def attach_my_homepage(queryset, user, as_field="my_homepage_attr"): + """Attach a homepage array to each object of the queryset. + + :param queryset: A Django projects queryset object. + :param as_field: Attach the settings homepage as an attribute with this name. + + :return: Queryset object with the additional `as_field` field. + """ + model = queryset.model + if user is None or user.is_anonymous(): + sql = "SELECT '{}'" + else: + sql = """ + SELECT homepage + FROM settings_userprojectsettings + WHERE settings_userprojectsettings.project_id = {tbl}.id AND + settings_userprojectsettings.user_id = {user_id}""" + + sql = sql.format(tbl=model._meta.db_table, user_id=user.id) + + queryset = queryset.extra(select={as_field: sql}) + return queryset + + def attach_extra_info(queryset, user=None): queryset = attach_members(queryset) queryset = attach_closed_milestones(queryset) @@ -618,5 +642,6 @@ def attach_extra_info(queryset, user=None): queryset = attach_private_projects_same_owner(queryset, user) queryset = attach_public_projects_same_owner(queryset, user) queryset = attach_milestones(queryset) + queryset = attach_my_homepage(queryset, user) return queryset