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
115 lines
3.1 KiB
6 years ago
|
"""
|
||
|
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
|