symposion_app/pinaxcon/proposals/models.py

170 lines
5.1 KiB
Python
Raw Normal View History

from django.db import models
2022-12-07 14:08:54 +00:00
from django.utils.translation import ugettext_lazy as _
from symposion.proposals.models import ProposalBase
2022-12-07 14:08:54 +00:00
from symposion.text_parser import parse
class Proposal(ProposalBase):
TARGET_USER = 1
TARGET_BUSINESS = 2
TARGET_COMMUNITY = 3
TARGET_DEVELOPER = 4
TARGET_AUDIENCES = [
(TARGET_DEVELOPER, "Developer"),
2021-08-09 11:12:43 +00:00
(TARGET_COMMUNITY, "Community"),
(TARGET_USER, "End User"),
(TARGET_BUSINESS, "Business"),
]
2022-12-07 14:08:54 +00:00
TOPIC_LINUX = 1
TOPIC_SOFTWARE = 2
TOPIC_HARDWARE = 3
TOPIC_FIRMWARE = 4
TOPIC_SYSADMIN = 5
TOPIC_SECURITY = 6
TOPIC_DOCUMENTATION = 7
TOPIC_COMMUNITY = 8
TOPIC_SCIENCE = 9
TOPIC_GLAM = 10
TOPIC_MULTIMEDIA = 11
TOPIC_AEROSPACE = 12
TOPIC_AGRICULTURE = 13
TOPIC_OTHER = 14
PROPOSAL_TOPIC = [
(TOPIC_LINUX, "Linux"),
(TOPIC_SOFTWARE, "Software"),
(TOPIC_HARDWARE, "Hardware"),
(TOPIC_FIRMWARE, "Firmware"),
(TOPIC_SYSADMIN, "System Administration / Operations"),
(TOPIC_SECURITY, "Security"),
(TOPIC_DOCUMENTATION, "Documentation"),
(TOPIC_COMMUNITY, "Community"),
(TOPIC_SCIENCE, "Science & Data"),
(TOPIC_GLAM, "Galleries, Libraries, Archives & Museums (GLAM)"),
(TOPIC_MULTIMEDIA, "Multimedia"),
(TOPIC_AEROSPACE, "Aerospace / UAV"),
(TOPIC_AGRICULTURE, "Agriculture"),
(TOPIC_OTHER, "Other"),
]
LEVEL_BEGINNER = 1
LEVEL_INTERMEDIATE = 2
LEVEL_ADVANCED = 3
EXPERIENCE_LEVEL = [
(LEVEL_BEGINNER, "Beginner"),
(LEVEL_INTERMEDIATE, "Intermediate"),
(LEVEL_ADVANCED, "Advanced"),
]
2021-08-09 11:12:43 +00:00
target_audience = models.IntegerField(
choices=TARGET_AUDIENCES,
help_text="Who is the target audience for your session?",
)
recording_release = models.BooleanField(
default=True,
help_text="I allow Software Freedom Conservancy to release any recordings of "
2021-08-09 11:12:43 +00:00
"presentations covered by this proposal, on YouTube under the "
"standard YouTube licence, and on other platforms under the "
2022-01-05 08:05:18 +00:00
"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International "
"(<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> "
"CC BY-NC-SA 4.0</a>) licence."
)
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>"
)
2021-08-09 11:12:43 +00:00
primary_topic = models.IntegerField(
choices=PROPOSAL_TOPIC,
help_text="What is the primary topic area for your session?"
)
experience_level = models.IntegerField(
choices=EXPERIENCE_LEVEL,
help_text="What level of experience will your session be pitched at?"
)
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?"
)
2022-12-07 14:08:54 +00:00
content_warning = models.TextField(
"Content Warning",
help_text=_("This will be shown on the schedule to give attendees "
"advanced warning of topics covered in the session. "),
blank=True,
)
content_warning_html = models.TextField(blank=True)
2021-08-09 11:12:43 +00:00
class Meta:
abstract = True
2022-12-07 14:08:54 +00:00
def save(self, *args, **kwargs):
self.content_warning_html = parse(self.content_warning)
return super(Proposal, self).save(*args, **kwargs)
2021-08-09 11:12:43 +00:00
2022-12-07 14:08:54 +00:00
class TalkProposal(Proposal):
2021-08-09 11:12:43 +00:00
class Meta:
2022-12-07 14:08:54 +00:00
verbose_name = "talk proposal"
2021-08-09 11:12:43 +00:00
2022-12-07 14:08:54 +00:00
class TutorialProposal(Proposal):
class Meta:
2022-12-07 14:08:54 +00:00
verbose_name = "tutorial proposal"
class MiniconfSessionProposal(Proposal):
FORMAT_SHORT_PRESENTATION = 1
FORMAT_MEDIUM_PRESENTATION = 2
FORMAT_LONG_PRESENTATION = 3
FORMAT_DEMONSTRATION = 4
FORMAT_OTHER = 5
TALK_FORMATS = [
(FORMAT_SHORT_PRESENTATION, "Lightning Talk (5-10 min)"),
(FORMAT_MEDIUM_PRESENTATION, "Short Presentation (20-25 min)"),
(FORMAT_LONG_PRESENTATION, "Presentation (40-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 will be required to purchase a conference ticket "
"and arrange my own travel and accommodation, as linux.conf.au miniconfs are unfunded community run events."
)
class Meta:
abstract = True
class CopyleftComplianceProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Copyleft and Compliance talk proposal"
class MemberProjectProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "SFC Member Project talk proposal"