Messages for bulk cations, bulk actions as staticmethods of PostAdmin
This commit is contained in:
parent
c079a86582
commit
13ac239576
1 changed files with 107 additions and 61 deletions
|
@ -11,12 +11,15 @@ from django.apps import apps
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from django.contrib import messages
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.six import callable, text_type
|
from django.utils.six import callable, text_type
|
||||||
from django.utils.translation import get_language_from_request, ugettext_lazy as _
|
from django.utils.translation import get_language_from_request, ugettext_lazy as _
|
||||||
|
from django.utils.translation import ungettext as __
|
||||||
|
|
||||||
from parler.admin import TranslatableAdmin
|
from parler.admin import TranslatableAdmin
|
||||||
|
|
||||||
from .cms_appconfig import BlogConfig
|
from .cms_appconfig import BlogConfig
|
||||||
|
@ -31,59 +34,6 @@ except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Bulk actions for post admin
|
|
||||||
def make_published(modeladmin, request, queryset):
|
|
||||||
""" Bulk action to mark selected posts as published. If
|
|
||||||
the date_published field is empty the current time is
|
|
||||||
saved as date_published.
|
|
||||||
"""
|
|
||||||
for post in queryset:
|
|
||||||
if not post.publish:
|
|
||||||
if not post.date_published:
|
|
||||||
post.date_published = timezone.now()
|
|
||||||
post.publish = True
|
|
||||||
post.save()
|
|
||||||
|
|
||||||
|
|
||||||
def make_unpublished(modeladmin, request, queryset):
|
|
||||||
""" Bulk action to mark selected posts as UNpublished.
|
|
||||||
"""
|
|
||||||
queryset.update(publish=False)
|
|
||||||
|
|
||||||
|
|
||||||
def enable_comments(modeladmin, request, queryset):
|
|
||||||
""" Bulk action to enable comments for selected posts.
|
|
||||||
"""
|
|
||||||
queryset.update(enable_comments=True)
|
|
||||||
|
|
||||||
|
|
||||||
def disable_comments(modeladmin, request, queryset):
|
|
||||||
""" Bulk action to disable comments for selected posts.
|
|
||||||
"""
|
|
||||||
queryset.update(enable_comments=False)
|
|
||||||
|
|
||||||
|
|
||||||
def enable_liveblog(modeladmin, request, queryset):
|
|
||||||
""" Bulk action to enable comments for selected posts.
|
|
||||||
"""
|
|
||||||
queryset.update(enable_liveblog=True)
|
|
||||||
|
|
||||||
|
|
||||||
def disable_liveblog(modeladmin, request, queryset):
|
|
||||||
""" Bulk action to disable comments for selected posts.
|
|
||||||
"""
|
|
||||||
queryset.update(enable_liveblog=False)
|
|
||||||
|
|
||||||
|
|
||||||
# Make bulk action menu entries localizable
|
|
||||||
make_published.short_description = _("Publish selection")
|
|
||||||
make_unpublished.short_description = _("Unpublish selection")
|
|
||||||
enable_comments.short_description = _("Enable comments for selection")
|
|
||||||
disable_comments.short_description = _("Disable comments for selection ")
|
|
||||||
enable_liveblog.short_description = _("Enable liveblog for selection")
|
|
||||||
disable_liveblog.short_description = _("Disable liveblog for selection ")
|
|
||||||
|
|
||||||
|
|
||||||
class SiteListFilter(admin.SimpleListFilter):
|
class SiteListFilter(admin.SimpleListFilter):
|
||||||
title = _('site')
|
title = _('site')
|
||||||
parameter_name = 'sites'
|
parameter_name = 'sites'
|
||||||
|
@ -136,14 +86,6 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
|
||||||
search_fields = ('translations__title',)
|
search_fields = ('translations__title',)
|
||||||
date_hierarchy = 'date_published'
|
date_hierarchy = 'date_published'
|
||||||
raw_id_fields = ['author']
|
raw_id_fields = ['author']
|
||||||
actions = [
|
|
||||||
make_published,
|
|
||||||
make_unpublished,
|
|
||||||
enable_comments,
|
|
||||||
disable_comments,
|
|
||||||
]
|
|
||||||
if 'djangocms_blog.liveblog' in settings.INSTALLED_APPS:
|
|
||||||
actions += [enable_liveblog, disable_liveblog]
|
|
||||||
frontend_editable_fields = ('title', 'abstract', 'post_text')
|
frontend_editable_fields = ('title', 'abstract', 'post_text')
|
||||||
enhance_exclude = ('main_image', 'tags')
|
enhance_exclude = ('main_image', 'tags')
|
||||||
_fieldsets = [
|
_fieldsets = [
|
||||||
|
@ -171,6 +113,110 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
|
||||||
}
|
}
|
||||||
_sites = None
|
_sites = None
|
||||||
|
|
||||||
|
# Bulk actions for post admin
|
||||||
|
@staticmethod
|
||||||
|
def make_published(modeladmin, request, queryset):
|
||||||
|
""" Bulk action to mark selected posts as published. If
|
||||||
|
the date_published field is empty the current time is
|
||||||
|
saved as date_published.
|
||||||
|
queryset must not be empty (ensured by DjangoCMS).
|
||||||
|
"""
|
||||||
|
cnt1 = queryset.filter(
|
||||||
|
date_published__isnull=True,
|
||||||
|
publish=False,
|
||||||
|
).update(date_published=timezone.now(), publish=True)
|
||||||
|
cnt2 = queryset.filter(
|
||||||
|
date_published__isnull=False,
|
||||||
|
publish=False,
|
||||||
|
).update(publish=True)
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.INFO,
|
||||||
|
__('%(updates)d entry published.',
|
||||||
|
'%(updates)d entries published.', cnt1+cnt2) % {
|
||||||
|
'updates': cnt1+cnt2, })
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def make_unpublished(modeladmin, request, queryset):
|
||||||
|
""" Bulk action to mark selected posts as UNpublished.
|
||||||
|
queryset must not be empty (ensured by DjangoCMS).
|
||||||
|
"""
|
||||||
|
updates = queryset.filter(publish=True)\
|
||||||
|
.update(publish=False)
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.INFO,
|
||||||
|
__('%(updates)d entry unpublished.',
|
||||||
|
'%(updates)d entries unpublished.', updates) % {
|
||||||
|
'updates': updates, })
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def enable_comments(modeladmin, request, queryset):
|
||||||
|
""" Bulk action to enable comments for selected posts.
|
||||||
|
queryset must not be empty (ensured by DjangoCMS).
|
||||||
|
"""
|
||||||
|
updates = queryset.filter(enable_comments=False)\
|
||||||
|
.update(enable_comments=True)
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.INFO,
|
||||||
|
__('Comments for %(updates)d entry enabled.',
|
||||||
|
'Comments for %(updates)d entries enabled', updates) % {
|
||||||
|
'updates': updates, })
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def disable_comments(modeladmin, request, queryset):
|
||||||
|
""" Bulk action to disable comments for selected posts.
|
||||||
|
queryset must not be empty (ensured by DjangoCMS).
|
||||||
|
"""
|
||||||
|
updates = queryset.filter(enable_comments=True)\
|
||||||
|
.update(enable_comments=False)
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.INFO,
|
||||||
|
__('Comments for %(updates)d entry disabled.',
|
||||||
|
'Comments for %(updates)d entries disabled.', updates) % {
|
||||||
|
'updates': updates, })
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def enable_liveblog(modeladmin, request, queryset):
|
||||||
|
""" Bulk action to enable comments for selected posts.
|
||||||
|
queryset must not be empty (ensured by DjangoCMS).
|
||||||
|
"""
|
||||||
|
updates = queryset.filter(enable_liveblog=False)\
|
||||||
|
.update(enable_liveblog=True)
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.INFO,
|
||||||
|
__('Liveblog for %(updates)d entry enabled.',
|
||||||
|
'Liveblog for %(updates)d entries enabled.', updates) % {
|
||||||
|
'updates': updates, })
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def disable_liveblog(modeladmin, request, queryset):
|
||||||
|
""" Bulk action to disable comments for selected posts.
|
||||||
|
queryset must not be empty (ensured by DjangoCMS).
|
||||||
|
"""
|
||||||
|
updates = queryset.filter(enable_liveblog=True)\
|
||||||
|
.update(enable_liveblog=False)
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.INFO,
|
||||||
|
__('Liveblog for %(updates)d entry enabled.',
|
||||||
|
'Liveblog for %(updates)d entries enabled.') % {
|
||||||
|
'updates': updates, })
|
||||||
|
|
||||||
|
# Make bulk action menu entries localizable
|
||||||
|
make_published.__func__.short_description = _("Publish selection")
|
||||||
|
make_unpublished.__func__.short_description = _("Unpublish selection")
|
||||||
|
enable_comments.__func__.short_description = _("Enable comments for selection")
|
||||||
|
disable_comments.__func__.short_description = _("Disable comments for selection ")
|
||||||
|
enable_liveblog.__func__.short_description = _("Enable liveblog for selection")
|
||||||
|
disable_liveblog.__func__.short_description = _("Disable liveblog for selection ")
|
||||||
|
|
||||||
|
actions = [
|
||||||
|
make_published.__func__,
|
||||||
|
make_unpublished.__func__,
|
||||||
|
enable_comments.__func__,
|
||||||
|
disable_comments.__func__,
|
||||||
|
]
|
||||||
|
if 'djangocms_blog.liveblog' in settings.INSTALLED_APPS:
|
||||||
|
actions += [enable_liveblog.__func__, disable_liveblog.__func__]
|
||||||
|
|
||||||
def get_list_filter(self, request):
|
def get_list_filter(self, request):
|
||||||
filters = ['app_config', 'publish', 'date_published']
|
filters = ['app_config', 'publish', 'date_published']
|
||||||
if get_setting('MULTISITE'):
|
if get_setting('MULTISITE'):
|
||||||
|
|
Loading…
Reference in a new issue