You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
3.1 KiB

"""
Plugins for use with django-shared-mediarchive.
"""
from django.apps import registry
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
try:
from imagekit.admin import AdminThumbnail
USE_ADMIN_THUMBNAIL = True
except ImportError:
USE_ADMIN_THUMBNAIL = False
from ..admin import ContentInlineBase
from ..base import ObjectPluginBase
image_model = getattr(settings, 'CONTENTPLUGINS_IMAGE_MODEL', None)
download_model = getattr(settings, 'CONTENTPLUGINS_DOWNLOAD_MODEL', None)
if image_model:
image_model = registry.apps.get_model(image_model)
else:
from shared.media_archive.models import Image
image_model = Image
if download_model:
download_model = registry.apps.get_model(download_model)
else:
from shared.media_archive.models import Download
download_model = Download
#
# Media Plugins
def image_thumbnail(obj):
return obj.image.thumbnail
class ImageBase(ObjectPluginBase):
image = models.ForeignKey(Image, on_delete=models.CASCADE,
verbose_name=_("image"))
fk_fieldname = 'image'
class Meta:
abstract = True
verbose_name = _("image")
verbose_name_plural = _("images")
def get_type_slug(self):
return ''
class AdminInline(ContentInlineBase):
fields = ContentInlineBase.fields or []
if USE_ADMIN_THUMBNAIL:
fields = fields + ['admin_thumbnail']
admin_thumbnail = AdminThumbnail(
image_field=image_thumbnail,
template='imagekit/admin/selectable_thumbnail.html')
admin_thumbnail.short_description = _("image")
fields = fields + [
'image',
'get_is_public_display',
]
readonly_fields = ContentInlineBase.fields or [] + [
'admin_thumbnail',
'get_is_public_display',
]
def get_is_public_display(self, obj):
if not obj.image.is_public:
return _("not published/visible")
else:
return _("published")
get_is_public_display.short_description = _("published")
admin_inline_baseclass = AdminInline
class DownloadBase(ObjectPluginBase):
download = models.ForeignKey(Download, on_delete=models.CASCADE,
verbose_name=_("download"))
fk_fieldname = 'download'
class Meta:
abstract = True
verbose_name = _("download")
verbose_name_plural = _("downloads")
def get_type_slug(self):
return ''
class AdminInline(ContentInlineBase):
fields = ContentInlineBase.fields or [] + [
'download',
'get_is_public_display',
]
readonly_fields = ContentInlineBase.readonly_fields or [] + [
'get_is_public_display',
]
def get_is_public_display(self, obj):
if not obj.download.is_public:
return _("not published/visible")
else:
return _("published")
get_is_public_display.short_description = _("published")
admin_inline_baseclass = AdminInline