1
0
Fork 0
mirror of https://github.com/Kunsi/pretalx-plugin-broadcast-tools synced 2024-05-08 12:38:17 +00:00
pretalx-plugin-broadcast-tools/pretalx_lower_thirds/views.py

101 lines
3.7 KiB
Python

import datetime as dt
import json
import pytz
import random
from django.contrib import messages
from django.db.models import Case, OuterRef, Subquery, When
from django.http import Http404, JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from django.views.generic import FormView
from django.views.generic.base import TemplateView
from django_context_decorator import context
from pretalx.agenda.views.schedule import ScheduleMixin
from pretalx.common.mixins.views import EventPermissionRequired, PermissionRequired
from pretalx.common.signals import register_data_exporters
from pretalx.schedule.exporters import ScheduleData
from .forms import LowerThirdsSettingsForm
class LowerThirdsView(TemplateView):
template_name = "pretalx_lower_thirds/lower_thirds.html"
class LowerThirdsOrgaView(PermissionRequired, FormView):
form_class = LowerThirdsSettingsForm
permission_required = 'orga.change_settings'
template_name = "pretalx_lower_thirds/orga.html"
def get_success_url(self):
return self.request.path
def form_valid(self, form):
form.save()
return super().form_valid(form)
def get_object(self):
return self.request.event
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
return {'obj': self.request.event, 'attribute_name': 'settings', **kwargs}
class ScheduleView(EventPermissionRequired, ScheduleMixin, TemplateView):
permission_required = "agenda.view_schedule"
def get(self, request, *args, **kwargs):
schedule = ScheduleData(
event=self.request.event,
schedule=self.schedule,
)
tz = pytz.timezone(schedule.event.timezone)
return JsonResponse(
{
"conference": {
"slug": schedule.event.slug,
"name": str(schedule.event.name),
"no_talk": str(schedule.event.settings.lower_thirds_no_talk_info),
},
"rooms": sorted({
str(room["name"])
for day in schedule.data
for room in day["rooms"]
}),
"talks": [
{
"id": talk.submission.id,
"start": talk.start.astimezone(tz).isoformat(),
"end": (talk.start + dt.timedelta(minutes=talk.duration)).astimezone(tz).isoformat(),
"slug": talk.frab_slug,
"title": talk.submission.title,
"persons": sorted({
person.get_display_name() for person in talk.submission.speakers.all()
}),
"track": {
"color": talk.submission.track.color,
"name": str(talk.submission.track.name),
} if talk.submission.track else None,
"room": str(room["name"]),
"infoline": str(schedule.event.settings.lower_thirds_info_string).format(
EVENT_SLUG=str(schedule.event.slug),
TALK_SLUG=talk.frab_slug,
CODE=talk.submission.code,
),
}
for day in schedule.data
for room in day["rooms"]
for talk in room["talks"]
],
},
json_dumps_params={
"indent": 4,
},
)