Files @ fbefff60a6a4
Branch filter:

Location: symposion_app/pinaxcon/proposals/models.py

bsturmfels
Update talk materials license
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 "
        "(<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 Software Freedom Conservancy to release any other material "
        "(such as slides) from presentations covered by this proposal, under "
        "the <a "
        "href='https://creativecommons.org/licenses/by-sa/4.0/'> "
        "Creative Commons Attribution-ShareAlike 4.0 International</a>"
    )

    primary_topic = models.IntegerField(
        choices=PROPOSAL_TOPIC,
        help_text="What is the primary topic area for your session?",
        null=True,
    )

    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_SHORT_PRESENTATION, "Lightning Talk (5-10 min)"),
        (FORMAT_MEDIUM_PRESENTATION, "Short Presentation (20-25 min)"),
        (FORMAT_LONG_PRESENTATION, "Long 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."
    )

    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 proposal"


class SoftwareWorkerCoopsProposal(MiniconfSessionProposal):
    class Meta:
        verbose_name = "Software Worker Co-ops 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"


class WildCardProposal(MiniconfSessionProposal):
    class Meta:
        verbose_name = "Wild card"