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"