forked from rc/aircox
		
	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