Merge pull request #18 from lca2017/chrisjrn/017-cfp-models-and-forms
CFP models and forms
This commit is contained in:
commit
f56ce51459
3 changed files with 100 additions and 23 deletions
|
@ -86,28 +86,56 @@ class ProposalBase(models.Model):
|
|||
kind = models.ForeignKey(ProposalKind, verbose_name=_("Kind"))
|
||||
|
||||
title = models.CharField(max_length=100, verbose_name=_("Title"))
|
||||
description = models.TextField(
|
||||
_("Brief Description"),
|
||||
max_length=400, # @@@ need to enforce 400 in UI
|
||||
help_text=_("If your proposal is accepted this will be made public and printed in the "
|
||||
"program. Should be one paragraph, maximum 400 characters.")
|
||||
)
|
||||
abstract = models.TextField(
|
||||
_("Detailed Abstract"),
|
||||
help_text=_("Detailed outline. Will be made public if your proposal is accepted. Edit "
|
||||
"using <a href='http://daringfireball.net/projects/markdown/basics' "
|
||||
"target='_blank'>Markdown</a>.")
|
||||
_("Abstract"),
|
||||
help_text=_("This will appear in the conference programme. Up to about "
|
||||
"500 words. Edit using <a "
|
||||
"href='http://daringfireball.net/projects/markdown/basics' " "target='_blank'>Markdown</a>.")
|
||||
)
|
||||
abstract_html = models.TextField(blank=True)
|
||||
additional_notes = models.TextField(
|
||||
_("Addtional Notes"),
|
||||
blank=True,
|
||||
help_text=_("Anything else you'd like the program committee to know when making their "
|
||||
"selection: your past experience, etc. This is not made public. Edit using "
|
||||
"<a href='http://daringfireball.net/projects/markdown/basics' "
|
||||
|
||||
private_abstract = models.TextField(
|
||||
_("Private Abstract"),
|
||||
help_text=_("This will only be shown to organisers and reviewers. You "
|
||||
"should provide any details about your proposal that you "
|
||||
"don't want to be public here. Edit using <a " "href='http://daringfireball.net/projects/markdown/basics' "
|
||||
"target='_blank'>Markdown</a>.")
|
||||
)
|
||||
additional_notes_html = models.TextField(blank=True)
|
||||
private_abstract_html = models.TextField(blank=True)
|
||||
|
||||
technical_requirements = models.TextField(
|
||||
_("Special Requirements"),
|
||||
blank=True,
|
||||
help_text=_("Speakers will be provided with: Internet access, power, "
|
||||
"projector, audio. If you require anything in addition, "
|
||||
"please list your technical requirements here. Such as: a "
|
||||
"static IP address, A/V equipment or will be demonstrating "
|
||||
"security-related techniques on the conference network. "
|
||||
"Edit using <a "
|
||||
"href='http://daringfireball.net/projects/markdown/basics' "
|
||||
"target='_blank'>Markdown</a>.")
|
||||
)
|
||||
technical_requirements_html = models.TextField(blank=True)
|
||||
|
||||
project = models.CharField(
|
||||
max_length=100,
|
||||
blank=True,
|
||||
help_text=_("The name of the project you will be talking about."),
|
||||
)
|
||||
project_url = models.URLField(
|
||||
_("Project URL"),
|
||||
blank=True,
|
||||
help_text=_("If your project has a webpage, specify the URL here so "
|
||||
"the committee can find out more about your proposal.")
|
||||
)
|
||||
video_url = models.URLField(
|
||||
_("Video"),
|
||||
blank=True,
|
||||
help_text=_("You may optionally provide us with a link to a video of "
|
||||
"you speaking at another event, or of a short 'elevator "
|
||||
"pitch' of your proposed talk.")
|
||||
)
|
||||
|
||||
submitted = models.DateTimeField(
|
||||
default=now,
|
||||
editable=False,
|
||||
|
@ -130,7 +158,8 @@ class ProposalBase(models.Model):
|
|||
|
||||
def save(self, *args, **kwargs):
|
||||
self.abstract_html = parse(self.abstract)
|
||||
self.additional_notes_html = parse(self.additional_notes)
|
||||
self.private_abstract_html = parse(self.private_abstract)
|
||||
self.technical_requirements_html = parse(self.technical_requirements)
|
||||
return super(ProposalBase, self).save(*args, **kwargs)
|
||||
|
||||
def can_edit(self):
|
||||
|
|
|
@ -11,13 +11,21 @@ class SpeakerForm(forms.ModelForm):
|
|||
fields = [
|
||||
"name",
|
||||
"biography",
|
||||
"experience",
|
||||
"photo",
|
||||
"telephone",
|
||||
"homepage",
|
||||
"twitter_username",
|
||||
"accessibility",
|
||||
"travel_assistance",
|
||||
"accommodation_assistance",
|
||||
"agreement",
|
||||
]
|
||||
|
||||
def __init__(self, *a, **k):
|
||||
super(SpeakerForm, self).__init__(*a, **k)
|
||||
self.fields['agreement'].required = True
|
||||
|
||||
def clean_twitter_username(self):
|
||||
value = self.cleaned_data["twitter_username"]
|
||||
if value.startswith("@"):
|
||||
|
|
|
@ -24,12 +24,40 @@ class Speaker(models.Model):
|
|||
name = models.CharField(verbose_name=_("Name"), max_length=100,
|
||||
help_text=_("As you would like it to appear in the"
|
||||
" conference program."))
|
||||
biography = models.TextField(blank=True, help_text=_("A little bit about you. Edit using "
|
||||
"<a href='http://warpedvisions.org/projects/"
|
||||
"markdown-cheat-sheet/target='_blank'>"
|
||||
"Markdown</a>."), verbose_name=_("Biography"))
|
||||
biography = models.TextField(
|
||||
blank=True,
|
||||
help_text=_("This will appear on the conference website and in the "
|
||||
"programme. Please write in the third person, eg 'Alice "
|
||||
"is a Moblin hacker...', 150-200 words. Edit using "
|
||||
"<a href='http://warpedvisions.org/projects/"
|
||||
"markdown-cheat-sheet/target='_blank'>"
|
||||
"Markdown</a>."),
|
||||
verbose_name=_("Biography"),
|
||||
)
|
||||
biography_html = models.TextField(blank=True)
|
||||
experience = models.TextField(
|
||||
blank=True,
|
||||
help_text=_("Have you had any experience presenting elsewhere? If so, "
|
||||
"we'd like to know. Anything you put here will only be "
|
||||
"seen by the organisers and reviewers; use it to convince "
|
||||
"them why they should accept your proposal. Edit using "
|
||||
"<a href='http://warpedvisions.org/projects/"
|
||||
"markdown-cheat-sheet/target='_blank'>"
|
||||
"Markdown</a>."),
|
||||
verbose_name=_("Speaking experience"),
|
||||
)
|
||||
experience_html = models.TextField(blank=True)
|
||||
photo = models.ImageField(upload_to="speaker_photos", blank=True, verbose_name=_("Photo"))
|
||||
telephone = models.CharField(
|
||||
max_length=15,
|
||||
help_text=_(u"The conference team will need this to contact you "
|
||||
"during the conference week. If you don't have one, or do "
|
||||
"not wish to provide it, then enter NONE in this field.")
|
||||
)
|
||||
homepage = models.URLField(
|
||||
blank=True,
|
||||
help_text=_(u"Your home page, if you have one")
|
||||
)
|
||||
twitter_username = models.CharField(
|
||||
max_length=15,
|
||||
blank=True,
|
||||
|
@ -37,8 +65,12 @@ class Speaker(models.Model):
|
|||
)
|
||||
accessibility = models.TextField(
|
||||
blank=True,
|
||||
help_text=_("Please describe any special accessibility requirements that you may have."),
|
||||
help_text=_("Please describe any special accessibility requirements "
|
||||
"that you may have. Edit using "
|
||||
"<a href='http://warpedvisions.org/projects/"
|
||||
"markdown-cheat-sheet/target='_blank'>Markdown</a>."),
|
||||
verbose_name=_("Accessibility requirements"))
|
||||
accessibility_html = models.TextField(blank=True)
|
||||
travel_assistance = models.BooleanField(
|
||||
blank=True,
|
||||
default=False,
|
||||
|
@ -53,6 +85,12 @@ class Speaker(models.Model):
|
|||
"accommodation in order to present your proposed sessions."),
|
||||
verbose_name=_("Accommodation assistance required"),
|
||||
)
|
||||
agreement = models.BooleanField(
|
||||
default=False,
|
||||
help_text=_("I agree to the terms and confitions of attendance, and "
|
||||
"I have read, understood, and agree to act according to "
|
||||
"the standards set forth in our Code of Conduct ")
|
||||
)
|
||||
|
||||
annotation = models.TextField(verbose_name=_("Annotation")) # staff only
|
||||
invite_email = models.CharField(max_length=200, unique=True, null=True, db_index=True, verbose_name=_("Invite_email"))
|
||||
|
@ -70,6 +108,8 @@ class Speaker(models.Model):
|
|||
|
||||
def save(self, *args, **kwargs):
|
||||
self.biography_html = parse(self.biography)
|
||||
self.experience_html = parse(self.experience)
|
||||
self.accessibility_html = parse(self.accessibility)
|
||||
return super(Speaker, self).save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
|
|
Loading…
Reference in a new issue