Skip to content

Commit

Permalink
Issue #3283: Taiga 1.8.0: HTTP error 500 while trying to delete proje…
Browse files Browse the repository at this point in the history
…ct as admin.
  • Loading branch information
superalex authored and bameda committed Jan 4, 2016
1 parent a28b04a commit 9341284
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 24 deletions.
3 changes: 3 additions & 0 deletions taiga/projects/admin.py
Expand Up @@ -98,6 +98,9 @@ def formfield_for_manytomany(self, db_field, request, **kwargs):
memberships__project=self.obj)
return super().formfield_for_manytomany(db_field, request, **kwargs)

def delete_model(self, request, obj):
obj.delete_related_content()
super().delete_model(request, obj)

# User Stories common admins

Expand Down
25 changes: 1 addition & 24 deletions taiga/projects/api.py
Expand Up @@ -253,36 +253,13 @@ def pre_save(self, obj):
super().pre_save(obj)

def destroy(self, request, *args, **kwargs):
from taiga.events.apps import connect_events_signals, disconnect_events_signals
from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals
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

obj = self.get_object_or_none()
self.check_permissions(request, 'destroy', obj)

if obj is None:
raise Http404

disconnect_events_signals()
disconnect_all_issues_signals()
disconnect_all_tasks_signals()
disconnect_all_userstories_signals()
disconnect_memberships_signals()

try:
obj.tasks.all().delete()
obj.user_stories.all().delete()
obj.issues.all().delete()
obj.memberships.all().delete()
obj.roles.all().delete()
finally:
connect_events_signals()
connect_all_issues_signals()
connect_all_tasks_signals()
connect_all_userstories_signals()
connect_memberships_signals()
obj.delete_related_content()

self.pre_delete(obj)
self.pre_conditions_on_delete(obj)
Expand Down
25 changes: 25 additions & 0 deletions taiga/projects/models.py
Expand Up @@ -308,6 +308,31 @@ def remove_watcher(self, user):
notify_policy = get_notify_policy(self, user)
set_notify_policy_level_to_ignore(notify_policy)

def delete_related_content(self):
from taiga.events.apps import connect_events_signals, disconnect_events_signals
from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals
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()
disconnect_all_userstories_signals()
disconnect_memberships_signals()

try:
self.tasks.all().delete()
self.user_stories.all().delete()
self.issues.all().delete()
self.memberships.all().delete()
self.roles.all().delete()
finally:
connect_events_signals()
connect_all_issues_signals()
connect_all_tasks_signals()
connect_all_userstories_signals()
connect_memberships_signals()

class ProjectModulesConfig(models.Model):
project = models.OneToOneField("Project", null=False, blank=False,
Expand Down

0 comments on commit 9341284

Please sign in to comment.