diff --git a/CHANGES b/CHANGES index 2f892dd..fcf8775 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +0.4.1 2019-04-30 +- Default plugin templates. + 0.4 2019-04-29 - Slightly refactored AdminInline construction and plugin mixins. - Added django-media-archive plugins, ImageBase and DownloadBase. diff --git a/content_plugins/base.py b/content_plugins/base.py index 5891d2b..31d0b75 100644 --- a/content_plugins/base.py +++ b/content_plugins/base.py @@ -13,8 +13,8 @@ from shared.utils.models.slugs import DowngradingSlugField # TODO Rename ContentInlineBase to PluginInlineBase from .admin import ContentInlineBase, RichTextInlineBase +from .plugins.mixins import StyleMixin # Make available for import -from .plugins.mixins import StyleMixin from . import USE_TRANSLATABLE_FIELDS diff --git a/content_plugins/plugins/media_archive.py b/content_plugins/plugins/media_archive.py new file mode 100644 index 0000000..11a29ae --- /dev/null +++ b/content_plugins/plugins/media_archive.py @@ -0,0 +1,114 @@ +""" +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 diff --git a/content_plugins/templates/plugins/_base.html b/content_plugins/templates/plugins/_base.html new file mode 100644 index 0000000..01cf280 --- /dev/null +++ b/content_plugins/templates/plugins/_base.html @@ -0,0 +1,4 @@ + +