work on admin interface, player, list of sounds
This commit is contained in:
@ -1,14 +1,84 @@
|
||||
from django.utils import timezone as tz
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.staticfiles.templatetags.staticfiles import static
|
||||
from django.utils.html import format_html
|
||||
|
||||
from wagtail.wagtailcore import hooks
|
||||
from wagtail.wagtailadmin.menu import MenuItem, Menu, SubmenuMenuItem
|
||||
|
||||
from wagtail.contrib.modeladmin.options import \
|
||||
ModelAdmin, ModelAdminGroup, modeladmin_register
|
||||
|
||||
|
||||
import aircox.programs.models as programs
|
||||
import aircox.cms.models as models
|
||||
|
||||
|
||||
class ProgramAdmin(ModelAdmin):
|
||||
model = programs.Program
|
||||
menu_label = _('Programs')
|
||||
menu_icon = 'pick'
|
||||
menu_order = 200
|
||||
list_display = ('name', 'active')
|
||||
search_fields = ('name',)
|
||||
|
||||
class DiffusionAdmin(ModelAdmin):
|
||||
model = programs.Diffusion
|
||||
menu_label = _('Diffusions')
|
||||
menu_icon = 'date'
|
||||
menu_order = 200
|
||||
list_display = ('program', 'start', 'end', 'frequency', 'initial')
|
||||
list_filter = ('frequency', 'start', 'program')
|
||||
|
||||
class ScheduleAdmin(ModelAdmin):
|
||||
model = programs.Schedule
|
||||
menu_label = _('Schedules')
|
||||
menu_icon = 'time'
|
||||
menu_order = 200
|
||||
list_display = ('program', 'frequency', 'duration', 'initial')
|
||||
list_filter = ('frequency', 'date', 'duration', 'program')
|
||||
|
||||
class StreamAdmin(ModelAdmin):
|
||||
model = programs.Stream
|
||||
menu_label = _('Streams')
|
||||
menu_icon = 'time'
|
||||
menu_order = 200
|
||||
list_display = ('program', 'delay', 'begin', 'end')
|
||||
list_filter = ('program', 'delay', 'begin', 'end')
|
||||
|
||||
class AdvancedAdminGroup(ModelAdminGroup):
|
||||
menu_label = _("Advanced")
|
||||
menu_icon = 'plus-inverse'
|
||||
items = (ProgramAdmin, DiffusionAdmin, ScheduleAdmin, StreamAdmin)
|
||||
|
||||
modeladmin_register(AdvancedAdminGroup)
|
||||
|
||||
|
||||
class SoundAdmin(ModelAdmin):
|
||||
model = programs.Sound
|
||||
menu_label = _('Sounds')
|
||||
menu_icon = 'media'
|
||||
menu_order = 350
|
||||
list_display = ('name', 'duration', 'type', 'path', 'good_quality', 'public')
|
||||
list_filter = ('type', 'good_quality', 'public')
|
||||
search_fields = ('name', 'path')
|
||||
|
||||
modeladmin_register(SoundAdmin)
|
||||
|
||||
|
||||
## Hooks
|
||||
|
||||
@hooks.register('insert_editor_css')
|
||||
def editor_css():
|
||||
return format_html(
|
||||
'<link rel="stylesheet" href="{}">',
|
||||
static('cms/css/cms.css')
|
||||
)
|
||||
|
||||
|
||||
class GenericMenu(Menu):
|
||||
last_time = None
|
||||
page_model = models.Publication
|
||||
|
||||
def __init__(self):
|
||||
super().__init__('')
|
||||
@ -19,40 +89,47 @@ class GenericMenu(Menu):
|
||||
def get_title(self, item):
|
||||
pass
|
||||
|
||||
def get_parent_page(self, item):
|
||||
def get_parent(self, item):
|
||||
pass
|
||||
|
||||
def get_page_url(self, item):
|
||||
def get_page_url(self, page_model, item):
|
||||
if item.page.count():
|
||||
return reverse('wagtailadmin_pages:edit', args=[item.page.first().id])
|
||||
parent_page = self.get_parent_page(item)
|
||||
|
||||
parent_page = self.get_parent(item)
|
||||
if not parent_page:
|
||||
return ''
|
||||
return reverse('wagtailadmin_pages:add_subpage', args=[parent_page.id])
|
||||
|
||||
return reverse(
|
||||
'wagtailadmin_pages:add', args= [
|
||||
page_model._meta.app_label, page_model._meta.model_name,
|
||||
parent_page.id
|
||||
]
|
||||
)
|
||||
|
||||
@property
|
||||
def registered_menu_items(self):
|
||||
now = tz.now()
|
||||
last_max = now - tz.timedelta(minutes = 10)
|
||||
|
||||
if self._registered_menu_items is None or self.last_time < last_max:
|
||||
qs = self.get_queryset()
|
||||
self._registered_menu_items = [
|
||||
MenuItem(self.get_title(x), self.get_page_url(x))
|
||||
for x in qs
|
||||
]
|
||||
self.last_time = now
|
||||
return self._registered_menu_items
|
||||
qs = self.get_queryset()
|
||||
return [
|
||||
MenuItem(self.get_title(x), self.get_page_url(self.page_model, x))
|
||||
for x in qs
|
||||
]
|
||||
|
||||
|
||||
class DiffusionsMenu(GenericMenu):
|
||||
"""
|
||||
Menu to display diffusions of today
|
||||
"""
|
||||
page_model = models.DiffusionPage
|
||||
|
||||
def get_queryset(self):
|
||||
return programs.Diffusion.objects.filter(
|
||||
type = programs.Diffusion.Type.normal,
|
||||
start__contains = tz.now().date(),
|
||||
initial__isnull = True,
|
||||
).order_by('start')
|
||||
|
||||
def get_title(self, item):
|
||||
@ -74,6 +151,8 @@ class ProgramsMenu(GenericMenu):
|
||||
"""
|
||||
Menu to display all active programs.
|
||||
"""
|
||||
page_model = models.DiffusionPage
|
||||
|
||||
def get_queryset(self):
|
||||
return programs.Program.objects \
|
||||
.filter(active = True, page__isnull = False) \
|
||||
@ -92,7 +171,6 @@ class ProgramsMenu(GenericMenu):
|
||||
return settings.default_program_parent_page
|
||||
|
||||
|
||||
|
||||
@hooks.register('register_admin_menu_item')
|
||||
def register_programs_menu_item():
|
||||
return SubmenuMenuItem(
|
||||
@ -101,4 +179,3 @@ def register_programs_menu_item():
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user