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_DEVELOPER, "Developer"), (TARGET_COMMUNITY, "Community"), (TARGET_USER, "End User"), (TARGET_BUSINESS, "Business"), ] 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 Linux Australia 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 Linux Australia 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" ) class Meta: abstract = True class SessionProposal(Proposal): """ Base Session Proposal This is not a meta class as we want a single table to store the common data across all session proposal types. """ TOPIC_SOFTWARE = 1 TOPIC_HARDWARE = 2 TOPIC_FIRMWARE = 3 TOPIC_KERNEL = 4 TOPIC_DOCUMENTATION = 5 TOPIC_COMMUNITY = 6 TOPIC_SECURITY = 7 TOPIC_OPERATIONS = 8 TOPIC_OTHER = 9 PROPOSAL_TOPIC = [ (TOPIC_SOFTWARE, "Software"), (TOPIC_HARDWARE, "Hardware"), (TOPIC_FIRMWARE, "Firmware"), (TOPIC_KERNEL, "Linux Kernel"), (TOPIC_DOCUMENTATION, "Documentation"), (TOPIC_COMMUNITY, "Community"), (TOPIC_SECURITY, "Security"), (TOPIC_OPERATIONS, "Deployment & Operations"), (TOPIC_OTHER, "Other"), ] LEVEL_BEGINNER = 1 LEVEL_INTERMEDIATE = 2 LEVEL_ADVANCED = 3 EXPERIENCE_LEVEL = [ (LEVEL_BEGINNER, "Beginner"), (LEVEL_INTERMEDIATE, "Intermediate"), (LEVEL_ADVANCED, "Advanced"), ] 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?" ) class TalkProposal(SessionProposal): class Meta: verbose_name = "talk proposal" class TutorialProposal(SessionProposal): class Meta: verbose_name = "tutorial proposal" class MiniconfProposal(Proposal): """ Miniconf Proposal Note that this is just a Proposal, not a SessionProposal, as it does not require a number of fields that the others use. """ target_audience = models.IntegerField(choices=Proposal.TARGET_AUDIENCES, default=Proposal.TARGET_DEVELOPER) class Meta: verbose_name = "miniconf proposal" class MiniconfSessionProposal(SessionProposal): """ Base Miniconf Session Proposal """ class Meta: abstract = True class GlamCommunityProposal(MiniconfSessionProposal): class Meta: verbose_name = "GO GLAM Miniconf Proposal" class KernelProposal(MiniconfSessionProposal): class Meta: verbose_name = "Kernel Miniconf Proposal" class OpenHardwareProposal(MiniconfSessionProposal): FORMAT_PRESENTATION = 1 FORMAT_TUTORIAL = 2 FORMAT_HANDS_ON = 3 TALK_FORMATS = [ (FORMAT_PRESENTATION, "Presentation"), (FORMAT_TUTORIAL, "Tutorial"), (FORMAT_HANDS_ON, "Hands-on"), ] 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): class Meta: verbose_name = "System Administration Miniconf Proposal"