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.
108 lines
3.0 KiB
108 lines
3.0 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): |
|
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
|
|
|