""" 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): if USE_ADMIN_THUMBNAIL: admin_thumbnail = AdminThumbnail( image_field=image_thumbnail, template='imagekit/admin/selectable_thumbnail.html') admin_thumbnail.short_description = _("image") 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") def get_readonly_fields(self, request, obj=None): readonly_fields = list(super().get_readonly_fields(request, obj)) if USE_ADMIN_THUMBNAIL: readonly_fields += ['admin_thumbnail'] readonly_fields += ['get_is_public_display'] return readonly_fields 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): 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") def get_readonly_fields(self, request, obj=None): readonly_fields = list(super().get_readonly_fields(request, obj)) readonly_fields += ['get_is_public_display'] return readonly_fields admin_inline_baseclass = AdminInline