from django.db import models
from django.utils.translation import ugettext_lazy as _
from symposion.proposals.models import ProposalBase
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"),
(TARGET_COMMUNITY, "Community"),
(TARGET_USER, "End User"),
(TARGET_BUSINESS, "Business"),
]
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"),
]
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 "
"presentations covered by this proposal, on YouTube under the "
"standard YouTube licence, and on other platforms under the "
"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International "
"( "
"CC BY-NC-SA 4.0) licence."
)
materials_release = models.BooleanField(
default=True,
help_text="I allow Software Freedom Conservancy to release any other material "
"(such as slides) from presentations covered by this proposal, under "
"the "
"Creative Commons Attribution-Share Alike Australia 3.0 Licence"
)
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?"
)
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)
class Meta:
abstract = True
def save(self, *args, **kwargs):
self.content_warning_html = parse(self.content_warning)
return super(Proposal, self).save(*args, **kwargs)
class TalkProposal(Proposal):
class Meta:
verbose_name = "talk proposal"
class TutorialProposal(Proposal):
class Meta:
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_MEDIUM_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 will be required to purchase a conference ticket "
"and arrange my own travel and accommodation."
)
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"
class ContainerDaysProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Container Days proposal"
class SustainableOpenSourceBusinessProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Sustainable Open Source Business/ Software Worker Coops proposal"
class DiversityEquityInclusionProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Diversity Equity and Inclusion and FOSS proposal"
class FOSSAtPlayProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "FOSS at Play: Games, creative development, and open technology proposal"
class OpenSourcAIDataProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Open Source AI + Data proposal"
class OpenWorkProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Issues in Open Work; Common Challenges and Best Practices in the Open Source Industry, Open Scholarship, and Government proposal"
class CommunityProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Community: Open Source in Practice proposal"
class BSDUnixProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "BSD Unix proposal"
class XMPPProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "XMPP proposal"
class ScienceOfCommunityProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Science of Community proposal"
class AArch64ARM64Proposal(MiniconfSessionProposal):
class Meta:
verbose_name = "AArch64/ARM64 Servers and Open Source- The Who, What, Why, and How proposal"
class FOSSForEducationProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "FOSS For Education proposal"
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "FOSS in Daily Life proposal"