2018-06-03 17:41:49 +00:00
import logging
2018-05-20 16:16:20 +00:00
from betterforms . multiform import MultiModelForm
from collections import OrderedDict
2018-06-03 17:41:49 +00:00
from django import forms
2018-05-20 16:16:20 +00:00
from django . forms . widgets import TextInput
from django . utils . dateparse import parse_duration
2018-06-03 17:41:49 +00:00
from . models import SpeakerProposal , EventProposal , EventTrack
2018-05-20 16:16:20 +00:00
logger = logging . getLogger ( " bornhack. %s " % __name__ )
2018-06-03 17:41:49 +00:00
class SpeakerProposalForm ( forms . ModelForm ) :
2018-05-20 16:16:20 +00:00
"""
2018-06-03 17:41:49 +00:00
The SpeakerProposalForm . Takes an EventType in __init__ and changes fields accordingly .
2018-05-20 16:16:20 +00:00
"""
class Meta :
model = SpeakerProposal
fields = [ ' name ' , ' biography ' , ' needs_oneday_ticket ' , ' submission_notes ' ]
2018-06-03 17:41:49 +00:00
def __init__ ( self , camp , eventtype = None , * args , * * kwargs ) :
# initialise the form
2018-05-20 16:16:20 +00:00
super ( ) . __init__ ( * args , * * kwargs )
2018-06-03 17:41:49 +00:00
# adapt form based on EventType?
if not eventtype :
return
2018-05-24 08:23:42 +00:00
2018-06-03 17:41:49 +00:00
if eventtype . name == ' Debate ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Guest Name '
self . fields [ ' name ' ] . help_text = ' The name of a debate guest. Can be a real name or an alias. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Guest Biography '
self . fields [ ' biography ' ] . help_text = ' The biography of the guest. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Guest Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this guest. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no free tickets for workshops
del ( self . fields [ ' needs_oneday_ticket ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Lightning Talk ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Speaker Name '
self . fields [ ' name ' ] . help_text = ' The name of the speaker. Can be a real name or an alias. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Speaker Biography '
self . fields [ ' biography ' ] . help_text = ' The biography of the speaker. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Speaker Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this speaker. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no free tickets for lightning talks
del ( self . fields [ ' needs_oneday_ticket ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Music Act ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Artist Name '
self . fields [ ' name ' ] . help_text = ' The name of the artist. Can be a real name or artist alias. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Artist Description '
self . fields [ ' biography ' ] . help_text = ' The description of the artist. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Artist Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this artist. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no oneday tickets for music acts
del ( self . fields [ ' needs_oneday_ticket ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Recreational Event ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Host Name '
self . fields [ ' name ' ] . help_text = ' The name of the event host. Can be a real name or an alias. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Host Biography '
self . fields [ ' biography ' ] . help_text = ' The biography of the host. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Host Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this host. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no oneday tickets for music acts
del ( self . fields [ ' needs_oneday_ticket ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Talk ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Speaker Name '
self . fields [ ' name ' ] . help_text = ' The name of the speaker. Can be a real name or an alias. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Speaker Biography '
self . fields [ ' biography ' ] . help_text = ' The biography of the speaker. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Speaker Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this speaker. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Workshop ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Host Name '
self . fields [ ' name ' ] . help_text = ' The name of the workshop host. Can be a real name or an alias. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Host Biography '
self . fields [ ' biography ' ] . help_text = ' The biography of the host. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Host Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this host. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no free tickets for workshops
del ( self . fields [ ' needs_oneday_ticket ' ] )
2018-05-20 16:16:20 +00:00
2018-06-23 23:02:06 +00:00
elif eventtype . name == ' Slacking Off ' :
# fix label and help_text for the name field
self . fields [ ' name ' ] . label = ' Host Name '
self . fields [ ' name ' ] . help_text = ' Can be a real name or an alias. '
# fix label and help_text for the biograpy field
self . fields [ ' biography ' ] . label = ' Host Biography '
self . fields [ ' biography ' ] . help_text = ' The biography of the host. '
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Host Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this host. Only visible to yourself and the BornHack organisers. '
# no free tickets for workshops
del ( self . fields [ ' needs_oneday_ticket ' ] )
2018-06-03 17:41:49 +00:00
else :
raise ImproperlyConfigured ( " Unsupported event type, don ' t know which form class to use " )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
class EventProposalForm ( forms . ModelForm ) :
2018-05-20 16:16:20 +00:00
"""
2018-06-03 17:41:49 +00:00
The EventProposalForm . Takes an EventType in __init__ and changes fields accordingly .
2018-05-20 16:16:20 +00:00
"""
2018-06-03 17:41:49 +00:00
class Meta :
model = EventProposal
fields = [ ' title ' , ' abstract ' , ' allow_video_recording ' , ' duration ' , ' submission_notes ' , ' track ' ]
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
def clean_duration ( self ) :
duration = self . cleaned_data [ ' duration ' ]
if not duration or duration < 60 or duration > 180 :
raise forms . ValidationError ( " Please keep duration between 60 and 180 minutes. " )
return duration
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
def clean_track ( self ) :
track = self . cleaned_data [ ' track ' ]
# TODO: make sure the track is part of the current camp, needs camp as form kwarg to verify
return track
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
def __init__ ( self , camp , eventtype = None , * args , * * kwargs ) :
# initialise form
2018-05-20 16:16:20 +00:00
super ( ) . __init__ ( * args , * * kwargs )
2018-06-03 17:41:49 +00:00
# disable the empty_label for the track select box
self . fields [ ' track ' ] . empty_label = None
self . fields [ ' track ' ] . queryset = EventTrack . objects . filter ( camp = camp )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# make sure video_recording checkbox defaults to checked
self . fields [ ' allow_video_recording ' ] . initial = True
2018-05-20 19:29:37 +00:00
2018-06-03 17:41:49 +00:00
if eventtype . name == ' Debate ' :
# fix label and help_text for the title field
self . fields [ ' title ' ] . label = ' Title of debate '
self . fields [ ' title ' ] . help_text = ' The title of this debate '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the abstract field
self . fields [ ' abstract ' ] . label = ' Description '
self . fields [ ' abstract ' ] . help_text = ' The description of this debate '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Debate Act Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this debate. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# better placeholder text for duration field
self . fields [ ' duration ' ] . widget . attrs [ ' placeholder ' ] = ' Debate Duration (minutes) '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Music Act ' :
# fix label and help_text for the title field
self . fields [ ' title ' ] . label = ' Title of music act '
self . fields [ ' title ' ] . help_text = ' The title of this music act/concert/set. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the abstract field
self . fields [ ' abstract ' ] . label = ' Description '
self . fields [ ' abstract ' ] . help_text = ' The description of this music act '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Music Act Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this music act. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no video recording for music acts
del ( self . fields [ ' allow_video_recording ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# better placeholder text for duration field
self . fields [ ' duration ' ] . widget . attrs [ ' placeholder ' ] = ' Duration (minutes) '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Recreational Event ' :
# fix label and help_text for the title field
self . fields [ ' title ' ] . label = ' Event Title '
self . fields [ ' title ' ] . help_text = ' The title of this recreational event '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the abstract field
self . fields [ ' abstract ' ] . label = ' Event Abstract '
self . fields [ ' abstract ' ] . help_text = ' The description/abstract of this recreational event. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Event Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this recreational event. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no video recording for music acts
del ( self . fields [ ' allow_video_recording ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# better placeholder text for duration field
self . fields [ ' duration ' ] . label = ' Event Duration '
self . fields [ ' duration ' ] . widget . attrs [ ' placeholder ' ] = ' Duration (minutes) '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Talk ' or eventtype . name == ' Lightning Talk ' :
# fix label and help_text for the title field
self . fields [ ' title ' ] . label = ' Title of Talk '
self . fields [ ' title ' ] . help_text = ' The title of this talk/presentation. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the abstract field
self . fields [ ' abstract ' ] . label = ' Abstract of Talk '
self . fields [ ' abstract ' ] . help_text = ' The description/abstract of this talk/presentation. Explain what the audience will experience. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Talk Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this talk. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no duration for talks
del ( self . fields [ ' duration ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
elif eventtype . name == ' Workshop ' :
# fix label and help_text for the title field
self . fields [ ' title ' ] . label = ' Workshop Title '
self . fields [ ' title ' ] . help_text = ' The title of this workshop. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Workshop Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this workshop. Only visible to yourself and the BornHack organisers. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# fix label and help_text for the abstract field
self . fields [ ' abstract ' ] . label = ' Workshop Abstract '
self . fields [ ' abstract ' ] . help_text = ' The description/abstract of this workshop. Explain what the participants will learn. '
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# no video recording for workshops
del ( self . fields [ ' allow_video_recording ' ] )
2018-05-20 16:16:20 +00:00
2018-06-03 17:41:49 +00:00
# duration field
self . fields [ ' duration ' ] . label = ' Workshop Duration '
self . fields [ ' duration ' ] . help_text = ' How much time (in minutes) should we set aside for this workshop? Please keep it between 60 and 180 minutes (1-3 hours). '
2018-05-20 16:16:20 +00:00
2018-06-26 21:37:39 +00:00
elif eventtype . name == ' Slacking Off ' :
# fix label and help_text for the title field
self . fields [ ' title ' ] . label = ' Event Title '
self . fields [ ' title ' ] . help_text = ' The title of this recreational event. '
# fix label and help_text for the submission_notes field
self . fields [ ' submission_notes ' ] . label = ' Event Notes '
self . fields [ ' submission_notes ' ] . help_text = ' Private notes regarding this recreational event. Only visible to yourself and the BornHack organisers. '
# fix label and help_text for the abstract field
self . fields [ ' abstract ' ] . label = ' Event Abstract '
self . fields [ ' abstract ' ] . help_text = ' The description/abstract of this event. Explain what the participants will experience. '
# no video recording for recreational events
del ( self . fields [ ' allow_video_recording ' ] )
# duration field
self . fields [ ' duration ' ] . label = ' Event Duration '
self . fields [ ' duration ' ] . help_text = ' How much time (in minutes) should we set aside for this event? Please keep it between 60 and 180 minutes (1-3 hours). '
2018-06-03 17:41:49 +00:00
else :
raise ImproperlyConfigured ( " Unsupported event type, don ' t know which form class to use " )
2018-05-20 16:16:20 +00:00