summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2020-07-11 13:58:00 +0000
committerMagnus Hagander2020-07-11 14:00:35 +0000
commitae4f0047b289f04c075d0a607c394c48f0ec7671 (patch)
treeb516686c31aa8f3bb2395bf7736132d73dd88e61
parent48888675df69d1ae6e7aaa9b4fe883e6b812b364 (diff)
Add support for an admin to add/edit/delete slides on a session
In particular being able to delete slides if bad ones are uploaded is important, but it's also useful for the admin to be able to upload slides that are for example emailed in from speakers for some reason unable to use the system. Both uploaded PDFs and copy/pasted links are supported. Fixes #48
-rw-r--r--postgresqleu/confreg/backendforms.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/postgresqleu/confreg/backendforms.py b/postgresqleu/confreg/backendforms.py
index b88d64cf..d383dbc5 100644
--- a/postgresqleu/confreg/backendforms.py
+++ b/postgresqleu/confreg/backendforms.py
@@ -31,6 +31,7 @@ from postgresqleu.confreg.models import Conference, ConferenceRegistration, Conf
from postgresqleu.confreg.models import RegistrationClass, RegistrationType, RegistrationDay
from postgresqleu.confreg.models import ConferenceFeedbackQuestion, Speaker
from postgresqleu.confreg.models import ConferenceSession, Track, Room, ConferenceSessionTag
+from postgresqleu.confreg.models import ConferenceSessionSlides
from postgresqleu.confreg.models import ConferenceSessionScheduleSlot, VolunteerSlot
from postgresqleu.confreg.models import DiscountCode, AccessToken, AccessTokenPermissions
from postgresqleu.confreg.models import ConferenceSeries
@@ -529,6 +530,70 @@ class BackendRefundPatternForm(BackendForm):
s.todate, s.todate + xform)
+class ConferenceSessionSlideForm(BackendForm):
+ helplink = 'callforpapers#slides'
+ exclude_fields_from_validation = ['content', ]
+ formnote = 'Either enter an URL or upload a PDF file (not both)'
+
+ class Meta:
+ model = ConferenceSessionSlides
+ fields = ['url', 'content', ]
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ self.override_filename = 'unknown_pdf.pdf'
+ if 'files' in kwargs:
+ if 'content' in kwargs['files']:
+ self.override_filename = kwargs['files']['content'].name
+
+ def clean(self):
+ d = super().clean()
+ url = d.get('url', None)
+ pdf = d.get('content', None)
+
+ if url and pdf:
+ self.add_error('url', 'Cannot both specify URL and upload PDF!')
+ self.add_error('content', 'Cannot both specify URL and upload PDF!')
+ elif not (url or pdf):
+ self.add_error('url', 'Must either specify URL or upload PDF')
+ self.add_error('content', 'Must either specify URL or upload PDF')
+
+ if url:
+ self.override_name = url
+ else:
+ self.override_name = self.override_filename
+ print("Set override to %s" % self.override_name)
+
+ return d
+
+ def post_save(self):
+ if self.instance.name != self.override_name:
+ self.instance.name = self.override_name
+ self.instance.save(update_fields=['name', ])
+
+
+class ConferenceSessionSlideManager(object):
+ title = 'Slides'
+ singular = 'slide'
+ can_add = True
+
+ def get_list(self, instance):
+ return [(s.id, s.name, '') for s in instance.conferencesessionslides_set.all()]
+
+ def get_form(self, obj, POST):
+ return ConferenceSessionSlideForm
+
+ def get_object(self, masterobj, subid):
+ try:
+ return ConferenceSessionSlides.objects.get(session=masterobj, pk=subid)
+ except ConferenceSessionSlides.DoesNotExist:
+ return None
+
+ def get_instancemaker(self, masterobj):
+ return lambda: ConferenceSessionSlides(session=masterobj)
+
+
class BackendConferenceSessionForm(BackendForm):
helplink = 'schedule#sessions'
list_fields = ['title', 'q_speaker_list', 'q_status_string', 'starttime', 'track', 'room', 'cross_schedule']
@@ -545,6 +610,9 @@ class BackendConferenceSessionForm(BackendForm):
'speaker': SpeakerLookup(),
'tags': SessionTagLookup(None),
}
+ linked_objects = OrderedDict({
+ 'slides': ConferenceSessionSlideManager(),
+ })
markdown_fields = ['abstract', ]
allow_copy_previous = True
copy_transform_form = BackendTransformConferenceDateTimeForm