add hooks for admin interface

This commit is contained in:
bkfox 2016-07-25 01:12:14 +02:00
parent 9ea2c2c945
commit 52814c1c5b
3 changed files with 124 additions and 15 deletions

View File

@ -39,28 +39,31 @@ class Command (BaseCommand):
logger.warning('no default program page for this website: skip') logger.warning('no default program page for this website: skip')
continue continue
logger.info('start syncing programs...') # programs
logger.info('Programs...')
parent = settings.default_program_parent_page parent = settings.default_program_parent_page
for program in Program.objects.all(): qs = Program.objects.filter(
if program.page.count(): active = True,
continue stream__isnull = True,
page__isnull = True,
)
for program in qs:
logger.info('- ' + program.name) logger.info('- ' + program.name)
page = ProgramPage( page = ProgramPage(
program = program, program = program,
title = program.name, title = program.name,
live = False live = False,
) )
parent.add_child(instance = page) parent.add_child(instance = page)
logger.info('start syncing diffusions...') # diffusions
logger.info('Diffusions...')
min_date = tz.now().date() - tz.timedelta(days = 20) qs = Diffusion.objects.filter(
for diffusion in Diffusion.objects.filter(start__gt = min_date): start__gt = tz.now().date() - tz.timedelta(days = 20),
if diffusion.page.count() or diffusion.initial: page__isnull = True,
continue initial__isnull = True
)
for diffusion in qs:
if not diffusion.program.page.count(): if not diffusion.program.page.count():
if not hasattr(diffusion.program, '__logged_diff_error'): if not hasattr(diffusion.program, '__logged_diff_error'):
logger.warning( logger.warning(
@ -74,7 +77,9 @@ class Command (BaseCommand):
logger.info('- ' + str(diffusion)) logger.info('- ' + str(diffusion))
try: try:
page = DiffusionPage.from_diffusion(diffusion) page = DiffusionPage.from_diffusion(
diffusion, live = False
)
diffusion.program.page.first().add_child(instance = page) diffusion.program.page.first().add_child(instance = page)
except: except:
import sys import sys

View File

@ -790,6 +790,7 @@ class SectionList(ListBase, SectionItem):
context = super().get_context(request, page, *args, **kwargs) context = super().get_context(request, page, *args, **kwargs)
qs = self.get_queryset() qs = self.get_queryset()
qs = qs.live()
if self.focus_available: if self.focus_available:
focus = qs.type(Publication).filter(focus = True).first() focus = qs.type(Publication).filter(focus = True).first()
if focus: if focus:

103
cms/wagtail_hooks.py Normal file
View 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
)