diff --git a/pinaxcon/proposals/models.py b/pinaxcon/proposals/models.py
index 2da49d83aa4098d45a6a31a40df8d600be5fe37b..d0f81af3c20038e7001f6da51b81f4cfeef2dcd4 100644
--- a/pinaxcon/proposals/models.py
+++ b/pinaxcon/proposals/models.py
@@ -1,25 +1,121 @@
from django.db import models
+from django.utils.translation import ugettext_lazy as _
+from symposion.markdown_parser import parse
from symposion.proposals.models import ProposalBase
+from symposion.speakers.models import SpeakerBase
-class Proposal(ProposalBase):
- AUDIENCE_LEVEL_NOVICE = 1
- AUDIENCE_LEVEL_EXPERIENCED = 2
- AUDIENCE_LEVEL_INTERMEDIATE = 3
+class ConferenceSpeaker(SpeakerBase):
+
+ def clean_twitter_username(self):
+ value = self.twitter_username
+ if value.startswith("@"):
+ value = value[1:]
+ return value
- AUDIENCE_LEVELS = [
- (AUDIENCE_LEVEL_NOVICE, "Novice"),
- (AUDIENCE_LEVEL_INTERMEDIATE, "Intermediate"),
- (AUDIENCE_LEVEL_EXPERIENCED, "Experienced"),
- ]
+ def save(self, *args, **kwargs):
+ self.experience_html = parse(self.experience)
+ self.twitter_username = self.clean_twitter_username()
+ return super(ConferenceSpeaker, self).save(*args, **kwargs)
+
+ twitter_username = models.CharField(
+ max_length=15,
+ blank=True,
+ help_text=_(u"Your Twitter account")
+ )
- audience_level = models.IntegerField(choices=AUDIENCE_LEVELS)
+ first_time = models.BooleanField(
+ blank=True,
+ verbose_name=_("First-time speaker?"),
+ help_text=_("Check this field if this is your first time speaking "
+ "at a technical conference."),
+ )
+ experience = models.TextField(blank=True, help_text=_
+ ("List any past speaking experience you have. This can include "
+ "user groups, meetups, or presentations at work or school. Edit "
+ "using "
+ "Markdown."),
+ verbose_name=_("Past speaking experience"),
+ )
+ experience_html = models.TextField(blank=True)
+
+ travel_assistance = models.BooleanField(
+ blank=True,
+ verbose_name=_("Travel assistance required?"),
+ help_text=_("Check this field if you require travel assistance to get "
+ "to North Bay Python in Petaluma, California."),
+ )
+
+ lodging_assistance = models.BooleanField(
+ blank=True,
+ verbose_name=_("Lodging assistance required?"),
+ help_text=_("Check this field if you require lodging assistance in "
+ "Petaluma, California during North Bay Python."),
+ )
+
+ home_city = models.CharField(
+ blank=True,
+ max_length=127,
+ help_text=_("Which city (and state, and country) will you be "
+ "traveling from to get to North Bay Python?"),
+ )
+
+ minority_group = models.CharField(blank=True, max_length=256,
+ verbose_name=_("Diversity statement"),
+ help_text=_("If you are a member of one or more groups that are "
+ "under-represented in the tech industry, you may list "
+ "these here. Your response is optional."),
+ )
+
+ code_of_conduct = models.BooleanField(
+ help_text=_("I have read and, in the event that my proposal is "
+ "accepted, agree that I will comply with the "
+ "Code of Conduct."),
+ )
+
+
+class Proposal(ProposalBase):
+
+ extended_presentation = models.BooleanField(
+ default=False,
+ verbose_name=_("Optionally consider this proposal for a 45-minute "
+ "slot"),
+ help_text=_("Most talks at North Bay Python go for 30 minutes. We "
+ "have some openings for 45-minute talks. If you check this "
+ "field, please explain in your additional notes how you "
+ "would use the extra 15 minutes."),
+ )
+ extra_av = models.TextField(
+ blank=True,
+ verbose_name=_("Extra tech and A/V requirements"),
+ help_text=_("We will provide you with a projector with HDMI "
+ "connection, an audio connection, and one microphone per "
+ "speaker. If you need anything more than this to present "
+ "this talk, please list them here."),
+ )
+ new_presentation = models.BooleanField(
+ default=False,
+ verbose_name=_("This is a new presentation"),
+ help_text=_("Check this box if North Bay Python will be the first "
+ "time this talk is presented at a technical conference."),
+ )
+ slides_release = models.BooleanField(
+ default=True,
+ help_text=_("I authorize North Bay Python to release a copy of my "
+ "slides and related materials under the Creative Commons "
+ "Attribution-ShareAlike 3.0 United States licence, and "
+ "certify that I have the authority to do so."),
+ )
recording_release = models.BooleanField(
default=True,
- help_text="By submitting your proposal, you agree to give permission to the conference organizers to record, edit, and release audio and/or video of your presentation. If you do not agree to this, please uncheck this box."
+ help_text=_("I authorize North Bay Python to release a recording of "
+ "my talk under the Creative Commons "
+ "Attribution-ShareAlike 3.0 United States licence."),
+
)
class Meta: