allow only one program or diffusion for pages;
in cms.signals, manage cases when Diffusion.initial is set/changed & clean up; fix bug in loglist nav when max_age is 0 (no limit); work on design for date lists; fix bug in player on item removal;
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
from django.db.models import Q
|
||||
from django.db.models.signals import post_save, pre_delete
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
@ -142,17 +143,49 @@ def program_post_saved(sender, instance, created, *args, **kwargs):
|
||||
parent.add_child(instance = page)
|
||||
|
||||
|
||||
def void_pages_of(page_set):
|
||||
"""
|
||||
Return a queryset from page_set that select only empty pages. If
|
||||
`inverse` is True, select only pages that are not empty.
|
||||
|
||||
Empty is defined on theses parameters:
|
||||
- `numchild = 0` => no children
|
||||
- no headline
|
||||
- no body
|
||||
"""
|
||||
if not page_set.count():
|
||||
return
|
||||
|
||||
page_set = page_set.filter(numchild = 0)
|
||||
|
||||
# as publications
|
||||
page_set = models.Publication.objects.filter(
|
||||
page_ptr_id__in = page_set.values('pk')
|
||||
)
|
||||
|
||||
# only empty
|
||||
q = (Q(headline__isnull = True) | Q(headline = '')) & \
|
||||
(Q(body__isnull = True) | Q(body = ''))
|
||||
return page_set.filter(q)
|
||||
|
||||
|
||||
@receiver(pre_delete, sender=aircox.Program)
|
||||
def program_post_deleted(sender, instance, *args, **kwargs):
|
||||
for page in instance.page.all():
|
||||
if page.specific.body or Page.objects.descendant_of(page).count():
|
||||
continue
|
||||
page.delete()
|
||||
void_pages_of(instance.page).delete()
|
||||
|
||||
|
||||
@receiver(post_save, sender=aircox.Diffusion)
|
||||
def diffusion_post_saved(sender, instance, created, *args, **kwargs):
|
||||
if not created or instance.page.count():
|
||||
initial = instance.initial
|
||||
if initial:
|
||||
if not created and hasattr(instance, 'page'):
|
||||
# fuck it
|
||||
page = instance.page
|
||||
page.diffusion = None
|
||||
page.save()
|
||||
return
|
||||
|
||||
if instance.page:
|
||||
return
|
||||
|
||||
page = models.DiffusionPage.from_diffusion(
|
||||
@ -164,9 +197,5 @@ def diffusion_post_saved(sender, instance, created, *args, **kwargs):
|
||||
|
||||
@receiver(pre_delete, sender=aircox.Diffusion)
|
||||
def diffusion_pre_deleted(sender, instance, *args, **kwargs):
|
||||
for page in instance.page.all():
|
||||
if page.specific.body or Page.objects.descendant_of(page).count():
|
||||
continue
|
||||
page.delete()
|
||||
|
||||
void_pages_of(instance.page).delete()
|
||||
|
||||
|
Reference in New Issue
Block a user