from wagtail.admin.edit_handlers import InlinePanel
from wagtailvideos.edit_handlers import VideoChooserPanel
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from django.conf.urls import include, url
from django.templatetags.static import static
from django.urls import reverse
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from wagtail.admin.menu import Menu, MenuItem, SubmenuMenuItem
from wagtail.admin.search import SearchArea
from wagtail.admin.site_summary import SummaryItem
from wagtail.core import hooks
from wagtailvideos import get_video_model, urls
from wagtailvideos.forms import GroupVideoPermissionFormSet
from wagtailvideos.models import TrackListing
from .permissions import permission_policy
Video = get_video_model()
@hooks.register('register_admin_urls')
def register_admin_urls():
return [
url(r'^videos/', include(urls)),
]
@hooks.register('insert_editor_js')
def editor_js():
return format_html(
"""
""",
reverse('wagtailvideos:chooser')
)
@hooks.register('register_group_permission_panel')
def register_video_permissions_panel():
return GroupVideoPermissionFormSet
class VideoMenu(Menu):
# Dummy class
def __init__(self, *args, **kwargs):
pass
def menu_items_for_request(self, request):
return [
MenuItem(_('Manage videos'), reverse('wagtailvideos:index'),
name='videos', classnames='icon icon-media', order=300)
]
def render_html(self, request):
menu_items = self.menu_items_for_request(request)
rendered_menu_items = []
for item in sorted(menu_items, key=lambda i: i.order):
rendered_menu_items.append(item.render_html(request))
return mark_safe(''.join(rendered_menu_items))
@hooks.register('register_admin_menu_item')
def register_images_menu_item():
return SubmenuMenuItem(
_('Videos'), VideoMenu(),
name='videos', classnames='icon icon-media', order=300
)
class VideoSummaryItem(SummaryItem):
order = 300
template = "wagtailvideos/homepage/videos_summary.html"
def get_context(self):
return {
"total_videos": Video.objects.count(),
}
def is_shown(self):
return permission_policy.user_has_any_permission(
self.request.user, ["add", "change", "delete"]
)
@hooks.register("construct_homepage_summary_items")
def add_media_summary_item(request, items):
items.append(VideoSummaryItem(request))
class VideoSearchArea(SearchArea):
def is_shown(self, request):
return permission_policy.user_has_any_permission(
request.user, ["add", "change", "delete"]
)
@hooks.register("register_admin_search_area")
def register_media_search_area():
return VideoSearchArea(
_("Video"),
reverse("wagtailvideos:index"),
name="video",
classnames="icon icon-media",
order=400,
)
@hooks.register('insert_global_admin_css')
def summary_css():
return format_html('', static('wagtailvideos/css/summary-override.css'))
@modeladmin_register
class TracksAdmin(ModelAdmin):
model = TrackListing
list_display = ('__str__', 'track_count')
def track_count(self, track_listing):
return track_listing.tracks.count()
track_count.short_description = 'No. tracks'
panels = [
VideoChooserPanel('video'),
InlinePanel('tracks', heading="Tracks")
]