OpenSlides/openslides/agenda/signals.py

115 lines
4.2 KiB
Python
Raw Normal View History

from datetime import datetime
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError as DjangoValidationError
from django.core.validators import MaxLengthValidator, MinValueValidator
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext_lazy
2015-06-29 12:08:15 +02:00
from openslides.core.config import ConfigVariable
2013-03-18 12:34:47 +01:00
from .models import Item
2013-03-18 12:34:47 +01:00
def validate_start_time(value):
try:
datetime.strptime(value, '%d.%m.%Y %H:%M')
except ValueError:
raise DjangoValidationError(_('Invalid input.'))
def setup_agenda_config(sender, **kwargs):
"""
Receiver function to setup all agenda config variables.
This function connected to the signal openslides.core.signals.config_signal
during app loading.
"""
yield ConfigVariable(
name='agenda_number_prefix',
default_value='',
label=ugettext_lazy('Numbering prefix for agenda items'),
help_text=ugettext_lazy('This prefix will be set if you run the automatic agenda numbering.'),
weight=210,
group=ugettext_lazy('Agenda'),
subgroup=ugettext_lazy('General'),
validators=(MaxLengthValidator(20),))
yield ConfigVariable(
name='agenda_numeral_system',
default_value='arabic',
input_type='choice',
label=ugettext_lazy('Numeral system for agenda items'),
choices=(
{'value': 'arabic', 'display_name': ugettext_lazy('Arabic')},
{'value': 'roman', 'display_name': ugettext_lazy('Roman')}),
weight=215,
group=ugettext_lazy('Agenda'),
subgroup=ugettext_lazy('General'))
# TODO: Use an input type with generic datetime support.
yield ConfigVariable(
name='agenda_start_event_date_time',
default_value='',
label=ugettext_lazy('Begin of event'),
help_text=ugettext_lazy('Input format: DD.MM.YYYY HH:MM'),
weight=220,
group=ugettext_lazy('Agenda'),
subgroup=ugettext_lazy('General'),
validators=(validate_start_time,))
# List of speakers
yield ConfigVariable(
name='agenda_show_last_speakers',
default_value=1,
input_type='integer',
label=ugettext_lazy('Number of last speakers to be shown on the projector'),
weight=230,
group=ugettext_lazy('Agenda'),
subgroup=ugettext_lazy('List of speakers'),
validators=(MinValueValidator(0),))
yield ConfigVariable(
name='agenda_countdown_warning_time',
default_value=0,
input_type='integer',
label=ugettext_lazy('Show orange countdown in the last x seconds of speaking time'),
help_text=ugettext_lazy('Enter duration in seconds. Choose 0 to disable warning color.'),
weight=235,
group=ugettext_lazy('Agenda'),
subgroup=ugettext_lazy('List of speakers'),
validators=(MinValueValidator(0),))
yield ConfigVariable(
name='agenda_couple_countdown_and_speakers',
default_value=False,
input_type='boolean',
label=ugettext_lazy('Couple countdown with the list of speakers'),
help_text=ugettext_lazy('[Begin speech] starts the countdown, [End speech] stops the countdown.'),
weight=240,
group=ugettext_lazy('Agenda'),
subgroup=ugettext_lazy('List of speakers'))
2013-03-18 12:34:47 +01:00
def listen_to_related_object_post_save(sender, instance, created, **kwargs):
"""
Receiver function to create agenda items. It is connected to the signal
django.db.models.signals.post_save during app loading.
"""
if created and hasattr(instance, 'get_agenda_title'):
Item.objects.create(content_object=instance)
def listen_to_related_object_post_delete(sender, instance, **kwargs):
"""
Receiver function to delete agenda items. It is connected to the signal
django.db.models.signals.post_delete during app loading.
"""
if hasattr(instance, 'get_agenda_title'):
content_type = ContentType.objects.get_for_model(instance)
try:
Item.objects.get(object_id=instance.pk, content_type=content_type).delete()
except Item.DoesNotExist:
# Item does not exist so we do not have to delete it.
pass