From 50924e441020ed02dcc3269b62892d109668a203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sat, 30 Jan 2016 15:44:05 +0100 Subject: [PATCH] [Backport] Fix #3831 --- taiga/permissions/service.py | 4 ++-- taiga/projects/admin.py | 3 +++ taiga/projects/models.py | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/taiga/permissions/service.py b/taiga/permissions/service.py index ec64a95e..10c1f3b8 100644 --- a/taiga/permissions/service.py +++ b/taiga/permissions/service.py @@ -117,5 +117,5 @@ def set_base_permissions_for_project(project): If a project is public anonymous and registered users should have at least visualization permissions """ anon_permissions = list(map(lambda perm: perm[0], ANON_PERMISSIONS)) - project.anon_permissions = list(set(project.anon_permissions + anon_permissions)) - project.public_permissions = list(set(project.public_permissions + anon_permissions)) + project.anon_permissions = list(set((project.anon_permissions or []) + anon_permissions)) + project.public_permissions = list(set((project.public_permissions or []) + anon_permissions)) diff --git a/taiga/projects/admin.py b/taiga/projects/admin.py index 52022e20..18bca9c5 100644 --- a/taiga/projects/admin.py +++ b/taiga/projects/admin.py @@ -76,6 +76,9 @@ class ProjectAdmin(admin.ModelAdmin): search_fields = ["id", "name", "slug", "owner__username", "owner__email", "owner__full_name"] inlines = [RoleInline, MembershipInline, MilestoneInline, NotifyPolicyInline, LikeInline] + # NOTE: TextArrayField with a choices is broken in the admin panel. + exclude = ("anon_permissions", "public_permissions") + def get_object(self, *args, **kwargs): self.obj = super().get_object(*args, **kwargs) return self.obj diff --git a/taiga/projects/models.py b/taiga/projects/models.py index 89f8b5f9..b5576a3a 100644 --- a/taiga/projects/models.py +++ b/taiga/projects/models.py @@ -303,6 +303,12 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): if not self.is_looking_for_people: self.looking_for_people_note = "" + if self.anon_permissions == None: + self.anon_permissions = [] + + if self.public_permissions == None: + self.public_permissions = [] + super().save(*args, **kwargs) def refresh_totals(self, save=True): @@ -440,7 +446,7 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals - + disconnect_events_signals() disconnect_all_issues_signals() disconnect_all_tasks_signals()