Add LCA2021 Miniconfs

Setup proposal types for miniconfs at LCA2021.
This commit is contained in:
Joel Addison 2020-11-23 21:24:17 +10:00
parent 252697b842
commit 38aebda92e
6 changed files with 246 additions and 25 deletions

View file

@ -24,6 +24,11 @@ models_to_register = [
models.TalkProposal, models.TalkProposal,
models.TutorialProposal, models.TutorialProposal,
models.MiniconfProposal, models.MiniconfProposal,
### LCA2021 Miniconfs
models.GlamProposal,
models.KernelProposal,
models.OpenHardwareProposal,
models.SysAdminProposal,
] ]
for model in models_to_register: for model in models_to_register:

View file

@ -84,3 +84,51 @@ class MiniconfProposalForm(ProposalForm):
"materials_release", "materials_release",
] ]
### LCA2020 Miniconfs
class MiniconfSessionProposalForm(ProposalForm):
def __init__(self, *a, **k):
super(MiniconfSessionProposalForm, self).__init__(*a, **k)
self.fields['ticket_acknowledgement'].required = True
GLAM_FIELDS = copy.copy(TALK_FORMAT_FIELDS)
GLAM_FIELDS.insert(3, "require_approval")
class GlamProposalForm(MiniconfSessionProposalForm):
class Meta:
model = models.GlamProposal
fields = GLAM_FIELDS
class KernelProposalForm(MiniconfSessionProposalForm):
class Meta:
model = models.KernelProposal
fields = TALK_FORMAT_FIELDS
HARDWARE_FIELDS = copy.copy(TALK_FORMAT_FIELDS)
HARDWARE_FIELDS.insert(3, "experience_level")
class OpenHardwareProposalForm(MiniconfSessionProposalForm):
def __init__(self, *a, **k):
super(OpenHardwareProposalForm, self).__init__(*a, **k)
self.fields['experience_level'].required = True
class Meta:
model = models.OpenHardwareProposal
fields = HARDWARE_FIELDS
class SysAdminProposalForm(MiniconfSessionProposalForm):
class Meta:
model = models.SysAdminProposal
fields = TALK_FORMAT_FIELDS

View file

@ -0,0 +1,77 @@
# Generated by Django 2.2.17 on 2020-11-23 10:16
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('symposion_proposals', '0003_auto_20170702_2250'),
('proposals', '0016_auto_20190624_2328'),
]
operations = [
migrations.CreateModel(
name='GlamProposal',
fields=[
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
('target_audience', models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="I allow Linux Australia to release any recordings of 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>")),
('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>")),
('talk_format', models.IntegerField(choices=[(1, 'Short Presentation (15 or 20 min)'), (2, 'Long Presentation (45 min)')], default=2, 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 as linux.conf.au miniconfs are unfunded community run events.')),
('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?')),
],
options={
'verbose_name': 'GO GLAM Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='KernelProposal',
fields=[
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
('target_audience', models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="I allow Linux Australia to release any recordings of 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>")),
('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>")),
('talk_format', models.IntegerField(choices=[(1, 'Short Presentation (15 or 20 min)'), (2, 'Long Presentation (45 min)')], default=2, 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 as linux.conf.au miniconfs are unfunded community run events.')),
],
options={
'verbose_name': 'Kernel Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='OpenHardwareProposal',
fields=[
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
('recording_release', models.BooleanField(default=True, help_text="I allow Linux Australia to release any recordings of 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>")),
('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>")),
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.')),
('target_audience', models.IntegerField(choices=[(1, 'Hardware'), (2, 'Firmware'), (3, 'Community'), (4, 'Other')], help_text='What is the main focus for your session? If Other, please provide detail in the private abstract.')),
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at? Note: We are aiming for a range of session skill levels.')),
('talk_format', models.IntegerField(choices=[(1, 'Presentation'), (2, 'Tutorial'), (3, 'Hands-on')], default=1, help_text='Will your session be a presentation, tutorial or hands-on (e.g how to use KiCAD or some other tooling)?')),
],
options={
'verbose_name': 'Open Hardware Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='SysAdminProposal',
fields=[
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
('target_audience', models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="I allow Linux Australia to release any recordings of 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>")),
('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>")),
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.')),
('talk_format', models.IntegerField(choices=[(1, 'Short Presentation (15 or 20 min)')], default=1, help_text='Talks at the System Administration Miniconf will be short presentations.')),
],
options={
'verbose_name': 'System Administration Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
]

View file

@ -10,14 +10,14 @@ class Proposal(ProposalBase):
TARGET_COMMUNITY = 3 TARGET_COMMUNITY = 3
TARGET_DEVELOPER = 4 TARGET_DEVELOPER = 4
TARGET_AUIDENCES = [ TARGET_AUDIENCES = [
(TARGET_USER, "User"), (TARGET_USER, "User"),
(TARGET_BUSINESS, "Business"), (TARGET_BUSINESS, "Business"),
(TARGET_COMMUNITY, "Community"), (TARGET_COMMUNITY, "Community"),
(TARGET_DEVELOPER, "Developer"), (TARGET_DEVELOPER, "Developer"),
] ]
target_audience = models.IntegerField(choices=TARGET_AUIDENCES) target_audience = models.IntegerField(choices=TARGET_AUDIENCES)
recording_release = models.BooleanField( recording_release = models.BooleanField(
default=True, default=True,
@ -54,7 +54,7 @@ class TutorialProposal(Proposal):
class MiniconfProposal(Proposal): class MiniconfProposal(Proposal):
target_audience = models.IntegerField(choices=Proposal.TARGET_AUIDENCES, target_audience = models.IntegerField(choices=Proposal.TARGET_AUDIENCES,
default=Proposal.TARGET_DEVELOPER) default=Proposal.TARGET_DEVELOPER)
class Meta: class Meta:
@ -64,15 +64,11 @@ class MiniconfProposal(Proposal):
class MiniconfSessionProposal(Proposal): class MiniconfSessionProposal(Proposal):
FORMAT_SHORT_PRESENTATION = 1 FORMAT_SHORT_PRESENTATION = 1
FORMAT_MEDIUM_PRESENTATION = 2 FORMAT_LONG_PRESENTATION = 2
FORMAT_LONG_PRESENTATION = 3
FORMAT_DEMONSTRATION = 4
FORMAT_OTHER = 5
TALK_FORMATS = [ TALK_FORMATS = [
(FORMAT_SHORT_PRESENTATION, "Lightning Talk (5-10 min)"), (FORMAT_SHORT_PRESENTATION, "Short Presentation (15 or 20 min)"),
(FORMAT_MEDIUM_PRESENTATION, "Short Presentation (20-25 min)"), (FORMAT_LONG_PRESENTATION, "Long Presentation (45 min)"),
(FORMAT_LONG_PRESENTATION, "Presentation (40-45 min)"),
] ]
talk_format = models.IntegerField( talk_format = models.IntegerField(
@ -84,9 +80,102 @@ class MiniconfSessionProposal(Proposal):
ticket_acknowledgement = models.BooleanField( ticket_acknowledgement = models.BooleanField(
default=False, default=False,
help_text="I understand that I will be required to purchase a conference ticket " help_text="I understand that I will be required to purchase a conference ticket "
"and arrange my own travel and accommodation, as linux.conf.au miniconfs are unfunded community run events." "as linux.conf.au miniconfs are unfunded community run events."
) )
class Meta: class Meta:
abstract = True abstract = True
class GlamProposal(MiniconfSessionProposal):
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?"
)
@property
def is_glam_miniconf(self):
return True
class Meta:
verbose_name = "GO GLAM Miniconf Proposal"
class KernelProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Kernel Miniconf Proposal"
class OpenHardwareProposal(MiniconfSessionProposal):
TARGET_HARDWARE = 1
TARGET_FIRMWARE = 2
TARGET_COMMUNITY = 3
TARGET_OTHER = 4
TARGET_AUDIENCES = [
(TARGET_HARDWARE, "Hardware"),
(TARGET_FIRMWARE, "Firmware"),
(TARGET_COMMUNITY, "Community"),
(TARGET_OTHER, "Other"),
]
LEVEL_BEGINNER = 1
LEVEL_INTERMEDIATE = 2
LEVEL_ADVANCED = 3
EXPERIENCE_LEVEL = [
(LEVEL_BEGINNER, "Beginner"),
(LEVEL_INTERMEDIATE, "Intermediate"),
(LEVEL_ADVANCED, "Advanced"),
]
FORMAT_PRESENTATION = 1
FORMAT_TUTORIAL = 2
FORMAT_HANDS_ON = 3
TALK_FORMATS = [
(FORMAT_PRESENTATION, "Presentation"),
(FORMAT_TUTORIAL, "Tutorial"),
(FORMAT_HANDS_ON, "Hands-on"),
]
target_audience = models.IntegerField(
choices=TARGET_AUDIENCES,
help_text="What is the main focus for your session? If Other, please provide detail in the private abstract.",
)
experience_level = models.IntegerField(
choices=EXPERIENCE_LEVEL,
help_text="What level of experience will your session be pitched at? Note: We are aiming for a range of session skill levels."
)
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):
FORMAT_SHORT_PRESENTATION = 1
TALK_FORMATS = [
(FORMAT_SHORT_PRESENTATION, "Short Presentation (15 or 20 min)"),
]
talk_format = models.IntegerField(
choices=TALK_FORMATS,
default=FORMAT_SHORT_PRESENTATION,
help_text="Talks at the System Administration Miniconf will be short presentations."
)
class Meta:
verbose_name = "System Administration Miniconf Proposal"

View file

@ -362,6 +362,11 @@ PROPOSAL_FORMS = {
"talk": "pinaxcon.proposals.forms.TalkProposalForm", "talk": "pinaxcon.proposals.forms.TalkProposalForm",
"tutorial": "pinaxcon.proposals.forms.TutorialProposalForm", "tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
"miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm", "miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm",
### LCA2021 Miniconfs
"glam-miniconf": "pinaxcon.proposals.forms.GlamProposalForm",
"kernel-miniconf": "pinaxcon.proposals.forms.KernelProposalForm",
"open-hardware-miniconf": "pinaxcon.proposals.forms.OpenHardwareProposalForm",
"sysadmin-miniconf": "pinaxcon.proposals.forms.SysAdminProposalForm",
} }
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk", "Miniconf") MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk", "Miniconf")

View file

@ -48,23 +48,20 @@
</div> </div>
{% endif %} {% endif %}
{% if proposal.can_exhibit %} {% if proposal.experience_level %}
<div class="row"> <div class="row">
<label class="list-label col-md-2">Can exhibit?</label> <label class="list-label col-md-2">Experience Level</label>
<div class="col-md-10"> <div class="col-md-10">
<p>{{ proposal.get_can_exhibit_display }}</p> <p>{{ proposal.get_experience_level_display }}</p>
</div>
</div> </div>
<div>
<label class="list-label col-md-2">Exhibition Requirements</label>
<div class="col-md-10">
{% if proposal.exhibition_requirements %}
<div class="special_requirements monospace-text">{{ proposal.exhibition_requirements|safe }}</div>
{% else %}
<div class="special_requirements monospace-text"><b>No Special Talk Requirements Requested</b></div>
{% endif %} {% endif %}
</div> {% if proposal.is_glam_miniconf %}
&nbsp; <div class="row">
<label class="list-label col-md-2">Requires Approval</label>
<div class="col-md-10">
<p>{{ proposal.require_approval }}&nbsp;</p>
</div> </div>
</div> </div>
{% endif %} {% endif %}
@ -223,7 +220,7 @@
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Travel</th> <th>Travel</th>
<th>Accomodation</th> <th>Accommodation</th>
<th>Details</th> <th>Details</th>
</tr> </tr>
</thead> </thead>