This commit is contained in:
Stephan Telling 2017-08-14 18:58:19 +02:00
parent cc43b0cb4d
commit 973bdc575c
No known key found for this signature in database
GPG key ID: D4892289F36ADA9B
3 changed files with 67 additions and 42 deletions

View file

@ -1,12 +1,25 @@
from django.apps import AppConfig
from django.db.models.signals import m2m_changed, pre_save
from .signal_handlers import check_speaker_event_camp_consistency, check_speaker_camp_change
class ProgramConfig(AppConfig):
name = 'program'
def ready(self):
from .models import Speaker
m2m_changed.connect(check_speaker_event_camp_consistency, sender=Speaker.events.through)
from .models import (
Speaker,
SpeakerProposal,
EventProposal
)
from .signal_handlers import (
check_speaker_event_camp_consistency,
check_speaker_camp_change,
notify_proposal_submitted
)
m2m_changed.connect(
check_speaker_event_camp_consistency,
sender=Speaker.events.through
)
pre_save.connect(check_speaker_camp_change, sender=Speaker)
pre_save.connect(notify_proposal_submitted, sender=SpeakerProposal)
pre_save.connect(notify_proposal_submitted, sender=EventProposal)

View file

@ -12,18 +12,14 @@ from django.db import models
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.dispatch import receiver
from django.utils.text import slugify
from django.utils import timezone
from django.conf import settings
from django.core.urlresolvers import reverse_lazy
from django.core.files.storage import FileSystemStorage
from django.urls import reverse
from django.apps import apps
from django.core.files.base import ContentFile
from django.db.models.signals import post_save
from utils.models import CreatedUpdatedModel, CampRelatedModel
from .email import add_new_speakerproposal_email, add_new_eventproposal_email
from ircbot.models import OutgoingIrcMessage
logger = logging.getLogger("bornhack.%s" % __name__)
@ -287,40 +283,6 @@ class EventProposal(UserSubmittedModel):
self.proposal_status = eventproposalmodel.PROPOSAL_APPROVED
self.save()
@receiver(post_save, sender=EventProposal)
@receiver(post_save, sender=SpeakerProposal)
def notify_proposals(sender, created, instance, **kwargs):
target = settings.IRCBOT_CHANNELS['orga'] if 'orga' in settings.IRCBOT_CHANNELS else settings.IRCBOT_CHANNELS['default']
if created and isinstance(instance, SpeakerProposal):
if not add_new_speakerproposal_email(instance):
logger.error(
'Error adding speaker proposal email to outgoing queue for {}'.format(instance)
)
OutgoingIrcMessage.objects.create(
target=target,
message="New speaker proposal: {} - https://bornhack.dk/admin/program/speakerproposal/{}/change/".format(
instance.name,
instance.uuid
),
timeout=timezone.now()+timedelta(minutes=10)
)
if created and isinstance(instance, EventProposal):
if not add_new_eventproposal_email(instance):
logger.error(
'Error adding event proposal email to outgoing queue for {}'.format(instance)
)
OutgoingIrcMessage.objects.create(
target=target,
message="New event proposal: {} - https://bornhack.dk/admin/program/eventproposal/{}/change/".format(
instance.title,
instance.uuid
),
timeout=timezone.now()+timedelta(minutes=10)
)
###############################################################################

View file

@ -1,4 +1,15 @@
import logging
from datetime import timedelta
from django.core.exceptions import ValidationError
from django.utils import timezone
from django.conf import settings
from .email import add_new_speakerproposal_email, add_new_eventproposal_email
from .models import EventProposal, SpeakerProposal
from ircbot.models import OutgoingIrcMessage
logger = logging.getLogger("bornhack.%s" % __name__)
def check_speaker_event_camp_consistency(sender, instance, **kwargs):
@ -26,3 +37,42 @@ def check_speaker_camp_change(sender, instance, **kwargs):
if event.camp != instance.camp:
raise ValidationError({'camp': 'You cannot change the camp a speaker belongs to if the speaker is associated with one or more events.'})
# pre_save signal that notifies if a proposal changes status from draft to
# pending i.e. is submitted.
def notify_proposal_submitted(sender, instance, **kwargs):
try:
original = sender.objects.get(pk=instance.pk)
except sender.DoesNotExist:
return False
target = settings.IRCBOT_CHANNELS['orga'] if 'orga' in settings.IRCBOT_CHANNELS else settings.IRCBOT_CHANNELS['default']
if original.proposal_status == 'draft' and instance.proposal_status == 'pending':
if isinstance(instance, EventProposal):
if not add_new_eventproposal_email(instance):
logger.error(
'Error adding event proposal email to outgoing queue for {}'.format(instance)
)
OutgoingIrcMessage.objects.create(
target=target,
message="New event proposal: {} - https://bornhack.dk/admin/program/eventproposal/{}/change/".format(
instance.title,
instance.uuid
),
timeout=timezone.now()+timedelta(minutes=10)
)
if isinstance(instance, SpeakerProposal):
if not add_new_speakerproposal_email(instance):
logger.error(
'Error adding speaker proposal email to outgoing queue for {}'.format(instance)
)
OutgoingIrcMessage.objects.create(
target=target,
message="New speaker proposal: {} - https://bornhack.dk/admin/program/speakerproposal/{}/change/".format(
instance.name,
instance.uuid
),
timeout=timezone.now()+timedelta(minutes=10)
)