Files @ f1b58bc74cdd
Branch filter:

Location: symposion_app/pinaxcon/proposals/models.py

Joel Addison
Update talk recording licence
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 "
        "(<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>"
    )

    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"