[Backport] Create actions to make projects public or private

remotes/origin/issue/4795/notification_even_they_are_disabled
David Barragán Merino 2016-05-03 13:05:32 +02:00
parent 846e5d940d
commit bfd10e7ec1
1 changed files with 41 additions and 2 deletions

View File

@ -17,9 +17,11 @@
from django.contrib import admin from django.contrib import admin
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import transaction
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from taiga.permissions import permissions
from taiga.projects.milestones.admin import MilestoneInline from taiga.projects.milestones.admin import MilestoneInline
from taiga.projects.notifications.admin import NotifyPolicyInline from taiga.projects.notifications.admin import NotifyPolicyInline
from taiga.projects.likes.admin import LikeInline from taiga.projects.likes.admin import LikeInline
@ -73,7 +75,7 @@ class ProjectAdmin(admin.ModelAdmin):
"owner_url", "blocked_code", "is_featured"] "owner_url", "blocked_code", "is_featured"]
list_display_links = ["id", "name", "slug"] list_display_links = ["id", "name", "slug"]
list_filter = ("is_private", "blocked_code", "is_featured") list_filter = ("is_private", "blocked_code", "is_featured")
list_editable = ["is_private", "is_featured", "blocked_code"] list_editable = ["is_featured", "blocked_code"]
search_fields = ["id", "name", "slug", "owner__username", "owner__email", "owner__full_name"] search_fields = ["id", "name", "slug", "owner__username", "owner__email", "owner__full_name"]
inlines = [RoleInline, MembershipInline, MilestoneInline, NotifyPolicyInline, LikeInline] inlines = [RoleInline, MembershipInline, MilestoneInline, NotifyPolicyInline, LikeInline]
@ -121,8 +123,45 @@ class ProjectAdmin(admin.ModelAdmin):
obj.delete_related_content() obj.delete_related_content()
super().delete_model(request, obj) super().delete_model(request, obj)
# User Stories common admins ## Actions
actions = [
"make_public",
"make_private"
]
@transaction.atomic
def make_public(self, request, queryset):
total_updates = 0
for project in queryset.exclude(is_private=False):
project.is_private = False
anon_permissions = list(map(lambda perm: perm[0], 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))
project.save()
total_updates += 1
self.message_user(request, _("{count} successfully made public.").format(count=total_updates))
make_public.short_description = _("Make public")
@transaction.atomic
def make_private(self, request, queryset):
total_updates = 0
for project in queryset.exclude(is_private=True):
project.is_private = True
project.anon_permissions = []
project.public_permissions = []
project.save()
total_updates += 1
self.message_user(request, _("{count} successfully made private.").format(count=total_updates))
make_private.short_description = _("Make private")
# User Stories common admins
class PointsAdmin(admin.ModelAdmin): class PointsAdmin(admin.ModelAdmin):
list_display = ["project", "order", "name", "value"] list_display = ["project", "order", "name", "value"]
list_display_links = ["name"] list_display_links = ["name"]