publishable setting fix
[redakcja.git] / apps / catalogue / models / listeners.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 from django.contrib.auth.models import User
7 from django.db import models
8 from catalogue.models import Book, Chunk
9 from catalogue.signals import post_publish
10 from dvcs.signals import post_publishable
11
12
13 def book_changed(sender, instance, created, **kwargs):
14     instance.touch()
15     for c in instance:
16         c.touch()
17 models.signals.post_save.connect(book_changed, sender=Book)
18
19
20 def chunk_changed(sender, instance, created, **kwargs):
21     instance.book.touch()
22     instance.touch()
23 models.signals.post_save.connect(chunk_changed, sender=Chunk)
24
25
26 def user_changed(sender, instance, *args, **kwargs):
27     books = set()
28     for c in instance.chunk_set.all():
29         books.add(c.book)
30         c.touch()
31     for b in books:
32         b.touch()
33 models.signals.post_save.connect(user_changed, sender=User)
34
35
36 def publish_listener(sender, *args, **kwargs):
37     sender.book.touch()
38     for c in sender.book:
39         c.touch()
40 post_publish.connect(publish_listener)
41
42
43 def publishable_listener(sender, *args, **kwargs):
44     sender.tree.touch()
45     sender.tree.book.touch()
46 post_publishable.connect(publishable_listener)
47
48
49 def listener_create(sender, instance, created, **kwargs):
50     if created:
51         instance.chunk_set.create(number=1, slug='1')
52 models.signals.post_save.connect(listener_create, sender=Book)
53