forked from AFPy/PonyConf
56 lines
2.2 KiB
Python
56 lines
2.2 KiB
Python
from django.db.models.signals import m2m_changed, post_save
|
|
from django.dispatch import Signal, receiver
|
|
from django.contrib.sites.models import Site
|
|
from django.utils.translation import ugettext_noop
|
|
from django.conf import settings
|
|
|
|
from ponyconf.decorators import disable_for_loaddata
|
|
from accounts.models import Participation
|
|
|
|
from .models import Conference, Talk, Topic, Event
|
|
|
|
|
|
talk_added = Signal(providing_args=["sender", "instance", "author"])
|
|
talk_edited = Signal(providing_args=["sender", "instance", "author"])
|
|
|
|
|
|
@receiver(post_save, sender=Site, dispatch_uid="Create Conference for Site")
|
|
@disable_for_loaddata
|
|
def create_conference(sender, instance, **kwargs):
|
|
Conference.objects.get_or_create(site=instance)
|
|
|
|
|
|
@receiver(post_save, sender=Site, dispatch_uid="Create default events type for Site")
|
|
@disable_for_loaddata
|
|
def create_events(sender, instance, **kwargs):
|
|
if not Event.objects.filter(site=instance).exists():
|
|
Event.objects.bulk_create([
|
|
Event(site=instance, name=ugettext_noop('conference (short)')),
|
|
Event(site=instance, name=ugettext_noop('conference (long)')),
|
|
Event(site=instance, name=ugettext_noop('workshop')),
|
|
Event(site=instance, name=ugettext_noop('stand')),
|
|
Event(site=instance, name=ugettext_noop('other')),
|
|
])
|
|
|
|
|
|
def call_first_site_post_save(apps, **kwargs):
|
|
site = Site.objects.filter(id=getattr(settings, 'SITE_ID', 1))
|
|
if site.exists():
|
|
site.first().save()
|
|
|
|
|
|
@receiver(m2m_changed, sender=Talk.speakers.through, dispatch_uid="Create Participation for speakers")
|
|
def create_participation_for_speakers(sender, instance, action, reverse, model, pk_set, using, **kwargs):
|
|
if action != "pre_add":
|
|
pass
|
|
for speaker in instance.speakers.all():
|
|
Participation.objects.get_or_create(user=speaker, site=instance.site)
|
|
|
|
|
|
@receiver(m2m_changed, sender=Topic.reviewers.through, dispatch_uid="Create Participation for reviewers")
|
|
def create_participation_for_reviewers(sender, instance, action, reverse, model, pk_set, using, **kwargs):
|
|
if action != "pre_add":
|
|
pass
|
|
for reviewer in instance.reviewers.all():
|
|
Participation.objects.get_or_create(user=reviewer, site=instance.site)
|