diff options
| author | Magnus Hagander | 2020-07-11 13:58:00 +0000 |
|---|---|---|
| committer | Magnus Hagander | 2020-07-11 14:00:35 +0000 |
| commit | ae4f0047b289f04c075d0a607c394c48f0ec7671 (patch) | |
| tree | b516686c31aa8f3bb2395bf7736132d73dd88e61 | |
| parent | 48888675df69d1ae6e7aaa9b4fe883e6b812b364 (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.py | 68 |
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 |
