add hooks for admin interface
This commit is contained in:
parent
9ea2c2c945
commit
52814c1c5b
|
@ -39,28 +39,31 @@ class Command (BaseCommand):
|
|||
logger.warning('no default program page for this website: skip')
|
||||
continue
|
||||
|
||||
logger.info('start syncing programs...')
|
||||
|
||||
# programs
|
||||
logger.info('Programs...')
|
||||
parent = settings.default_program_parent_page
|
||||
for program in Program.objects.all():
|
||||
if program.page.count():
|
||||
continue
|
||||
|
||||
qs = Program.objects.filter(
|
||||
active = True,
|
||||
stream__isnull = True,
|
||||
page__isnull = True,
|
||||
)
|
||||
for program in qs:
|
||||
logger.info('- ' + program.name)
|
||||
page = ProgramPage(
|
||||
program = program,
|
||||
title = program.name,
|
||||
live = False
|
||||
live = False,
|
||||
)
|
||||
parent.add_child(instance = page)
|
||||
|
||||
logger.info('start syncing diffusions...')
|
||||
|
||||
min_date = tz.now().date() - tz.timedelta(days = 20)
|
||||
for diffusion in Diffusion.objects.filter(start__gt = min_date):
|
||||
if diffusion.page.count() or diffusion.initial:
|
||||
continue
|
||||
|
||||
# diffusions
|
||||
logger.info('Diffusions...')
|
||||
qs = Diffusion.objects.filter(
|
||||
start__gt = tz.now().date() - tz.timedelta(days = 20),
|
||||
page__isnull = True,
|
||||
initial__isnull = True
|
||||
)
|
||||
for diffusion in qs:
|
||||
if not diffusion.program.page.count():
|
||||
if not hasattr(diffusion.program, '__logged_diff_error'):
|
||||
logger.warning(
|
||||
|
@ -74,7 +77,9 @@ class Command (BaseCommand):
|
|||
|
||||
logger.info('- ' + str(diffusion))
|
||||
try:
|
||||
page = DiffusionPage.from_diffusion(diffusion)
|
||||
page = DiffusionPage.from_diffusion(
|
||||
diffusion, live = False
|
||||
)
|
||||
diffusion.program.page.first().add_child(instance = page)
|
||||
except:
|
||||
import sys
|
||||
|
|
|
@ -790,6 +790,7 @@ class SectionList(ListBase, SectionItem):
|
|||
context = super().get_context(request, page, *args, **kwargs)
|
||||
|
||||
qs = self.get_queryset()
|
||||
qs = qs.live()
|
||||
if self.focus_available:
|
||||
focus = qs.type(Publication).filter(focus = True).first()
|
||||
if focus:
|
||||
|
|
103
cms/wagtail_hooks.py
Normal file
103
cms/wagtail_hooks.py
Normal file
|
@ -0,0 +1,103 @@
|
|||
from django.utils import timezone as tz
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from wagtail.wagtailcore import hooks
|
||||
from wagtail.wagtailadmin.menu import MenuItem, Menu, SubmenuMenuItem
|
||||
|
||||
import aircox.programs.models as programs
|
||||
|
||||
class GenericMenu(Menu):
|
||||
last_time = None
|
||||
|
||||
def __init__(self):
|
||||
super().__init__('')
|
||||
|
||||
def get_queryset(self):
|
||||
pass
|
||||
|
||||
def get_title(self, item):
|
||||
pass
|
||||
|
||||
def get_parent_page(self, item):
|
||||
pass
|
||||
|
||||
def get_page_url(self, item):
|
||||
if item.page.count():
|
||||
return reverse('wagtailadmin_pages:edit', args=[item.page.first().id])
|
||||
parent_page = self.get_parent_page(item)
|
||||
if not parent_page:
|
||||
return ''
|
||||
return reverse('wagtailadmin_pages:add_subpage', args=[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
|
||||
|
||||
|
||||
class ProgramsMenu(GenericMenu):
|
||||
"""
|
||||
Menu to display all active programs.
|
||||
"""
|
||||
def get_queryset(self):
|
||||
return programs.Program.objects \
|
||||
.filter(active = True, page__isnull = False) \
|
||||
.filter(stream__isnull = True) \
|
||||
.order_by('name')
|
||||
|
||||
def get_title(self, item):
|
||||
return item.name
|
||||
|
||||
def get_parent(self, item):
|
||||
# TODO: #Station / get current site
|
||||
from aircox.cms.models import WebsiteSettings
|
||||
settings = WebsiteSettings.objects.first()
|
||||
if not settings:
|
||||
return
|
||||
return settings.default_program_parent_page
|
||||
|
||||
|
||||
class DiffusionsMenu(GenericMenu):
|
||||
"""
|
||||
Menu to display diffusions of today
|
||||
"""
|
||||
def get_queryset(self):
|
||||
return programs.Diffusion.objects.filter(
|
||||
type = programs.Diffusion.Type.normal,
|
||||
start__contains = tz.now().date() + tz.timedelta(days=2),
|
||||
).order_by('start')
|
||||
|
||||
def get_title(self, item):
|
||||
return item.program.name
|
||||
|
||||
def get_parent(self, item):
|
||||
return item.program.page.first()
|
||||
|
||||
|
||||
@hooks.register('register_admin_menu_item')
|
||||
def register_programs_menu_item():
|
||||
return SubmenuMenuItem(
|
||||
_('Programs'), ProgramsMenu(),
|
||||
classnames='icon icon-folder-open-inverse', order=100
|
||||
)
|
||||
|
||||
|
||||
@hooks.register('register_admin_menu_item')
|
||||
def register_programs_menu_item():
|
||||
return SubmenuMenuItem(
|
||||
_('Today\'s Diffusions'), DiffusionsMenu(),
|
||||
classnames='icon icon-folder-open-inverse', order=100
|
||||
)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user