symposion_app/pinaxcon/proposals/models.py

199 lines
5.3 KiB
Python
Raw Normal View History

from django.db import models
from symposion.proposals.models import ProposalBase
class Proposal(ProposalBase):
TARGET_USER = 1
TARGET_BUSINESS = 2
TARGET_COMMUNITY = 3
TARGET_DEVELOPER = 4
TARGET_AUDIENCES = [
(TARGET_USER, "User"),
(TARGET_BUSINESS, "Business"),
(TARGET_COMMUNITY, "Community"),
(TARGET_DEVELOPER, "Developer"),
]
target_audience = models.IntegerField(choices=TARGET_AUDIENCES)
recording_release = models.BooleanField(
default=True,
help_text="I allow Linux Australia to release any recordings of "
"presentations covered by this proposal, under the <a "
"href='https://creativecommons.org/licenses/by-sa/3.0/au/deed.en'> "
"Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"
)
materials_release = models.BooleanField(
default=True,
help_text="I allow Linux Australia to release any other material "
"(such as slides) from presentations covered by this proposal, under "
"the <a "
"href='https://creativecommons.org/licenses/by-sa/3.0/au/deed.en'> "
"Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"
)
class Meta:
abstract = True
class TalkProposal(Proposal):
class Meta:
verbose_name = "talk proposal"
2017-03-05 07:34:15 +00:00
class TutorialProposal(Proposal):
class Meta:
verbose_name = "tutorial proposal"
2017-03-05 07:34:15 +00:00
class MiniconfProposal(Proposal):
target_audience = models.IntegerField(choices=Proposal.TARGET_AUDIENCES,
default=Proposal.TARGET_DEVELOPER)
class Meta:
verbose_name = "miniconf proposal"
class MiniconfSessionProposal(Proposal):
FORMAT_SHORT_PRESENTATION = 1
FORMAT_LONG_PRESENTATION = 2
TALK_FORMATS = [
(FORMAT_SHORT_PRESENTATION, "Short Presentation (15 or 20 min)"),
(FORMAT_LONG_PRESENTATION, "Long Presentation (45 min)"),
]
talk_format = models.IntegerField(
choices=TALK_FORMATS,
default=FORMAT_LONG_PRESENTATION,
help_text="Please indicate your preferred talk length in the private abstract field below."
)
ticket_acknowledgement = models.BooleanField(
default=False,
help_text="I understand that I may be required to purchase a conference ticket "
"as linux.conf.au miniconfs are unfunded community run events."
)
class Meta:
abstract = True
class GlamProposal(MiniconfSessionProposal):
require_approval = models.BooleanField(
default=False,
help_text="Do you require further approval from your employer or institution "
"before you can confirm your availability to present?"
)
@property
def is_glam_miniconf(self):
return True
class Meta:
verbose_name = "GO GLAM Miniconf Proposal"
class KernelProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Kernel Miniconf Proposal"
class OpenHardwareProposal(MiniconfSessionProposal):
TARGET_HARDWARE = 1
TARGET_FIRMWARE = 2
TARGET_COMMUNITY = 3
TARGET_OTHER = 4
TARGET_AUDIENCES = [
(TARGET_HARDWARE, "Hardware"),
(TARGET_FIRMWARE, "Firmware"),
(TARGET_COMMUNITY, "Community"),
(TARGET_OTHER, "Other"),
]
LEVEL_BEGINNER = 1
LEVEL_INTERMEDIATE = 2
LEVEL_ADVANCED = 3
EXPERIENCE_LEVEL = [
(LEVEL_BEGINNER, "Beginner"),
(LEVEL_INTERMEDIATE, "Intermediate"),
(LEVEL_ADVANCED, "Advanced"),
]
FORMAT_PRESENTATION = 1
FORMAT_TUTORIAL = 2
FORMAT_HANDS_ON = 3
TALK_FORMATS = [
(FORMAT_PRESENTATION, "Presentation"),
(FORMAT_TUTORIAL, "Tutorial"),
(FORMAT_HANDS_ON, "Hands-on"),
]
target_audience = models.IntegerField(
choices=TARGET_AUDIENCES,
help_text="What is the main focus for your session? If Other, please provide detail in the private abstract.",
)
experience_level = models.IntegerField(
choices=EXPERIENCE_LEVEL,
help_text="What level of experience will your session be pitched at? Note: We are aiming for a range of session skill levels."
)
talk_format = models.IntegerField(
choices=TALK_FORMATS,
default=FORMAT_PRESENTATION,
help_text="Will your session be a presentation, tutorial or hands-on (e.g how to use KiCAD or some other tooling)?"
)
class Meta:
verbose_name = "Open Hardware Miniconf Proposal"
class SysAdminProposal(MiniconfSessionProposal):
FORMAT_SHORT_PRESENTATION = 1
TALK_FORMATS = [
(FORMAT_SHORT_PRESENTATION, "Short Presentation (15 or 20 min)"),
]
talk_format = models.IntegerField(
choices=TALK_FORMATS,
default=FORMAT_SHORT_PRESENTATION,
help_text="Talks at the System Administration Miniconf will be short presentations."
)
local_timezone = models.CharField(
max_length=100,
blank=False,
default="",
help_text="What is your local timezone that you will be presenting from?"
)
tech_check = models.BooleanField(
"AV Tech Check",
default=False,
help_text="Will you be available for an 'AV Tech Check' on 5 January 2021?"
)
@property
def is_sysadmin_miniconf(self):
return True
class Meta:
verbose_name = "System Administration Miniconf Proposal"