diff --git a/pinaxcon/proposals/forms.py b/pinaxcon/proposals/forms.py
index d1184b4a..3578fd17 100644
--- a/pinaxcon/proposals/forms.py
+++ b/pinaxcon/proposals/forms.py
@@ -23,6 +23,10 @@ DEFAULT_FIELDS = [
"materials_release",
]
+TALK_FORMAT_FIELDS = copy.copy(DEFAULT_FIELDS)
+TALK_FORMAT_FIELDS.insert(2, "talk_format")
+TALK_FORMAT_FIELDS.append("ticket_acknowledgement")
+
class ProposalForm(forms.ModelForm):
required_css_class = 'label-required'
@@ -48,3 +52,24 @@ class TutorialProposalForm(ProposalForm):
class Meta:
model = models.TutorialProposal
fields = copy.copy(DEFAULT_FIELDS)
+
+
+class MiniconfProposalForm(ProposalForm):
+
+ def __init__(self, *a, **k):
+ super(MiniconfProposalForm, self).__init__(*a, **k)
+ self.fields['ticket_acknowledgement'].required = True
+
+
+class CopyleftComplianceProposalForm(MiniconfProposalForm):
+
+ class Meta:
+ model = models.CopyleftComplianceProposal
+ fields = TALK_FORMAT_FIELDS
+
+
+class MemberProjectProposalForm(MiniconfProposalForm):
+
+ class Meta:
+ model = models.MemberProjectProposal
+ fields = TALK_FORMAT_FIELDS
diff --git a/pinaxcon/proposals/migrations/0005_copyleftcomplianceproposal_memberprojectproposal.py b/pinaxcon/proposals/migrations/0005_copyleftcomplianceproposal_memberprojectproposal.py
new file mode 100644
index 00000000..c2c99ea1
--- /dev/null
+++ b/pinaxcon/proposals/migrations/0005_copyleftcomplianceproposal_memberprojectproposal.py
@@ -0,0 +1,55 @@
+# Generated by Django 2.2.28 on 2023-04-15 04:51
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('symposion_proposals', '0003_auto_20170702_2250'),
+ ('proposals', '0004_auto_20221208_0102'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='CopyleftComplianceProposal',
+ 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=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], 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")),
+ ('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?')),
+ ('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], 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(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
+ ('content_warning_html', models.TextField(blank=True)),
+ ('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Presentation (40-45 min)')], default=3, 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, as linux.conf.au miniconfs are unfunded community run events.')),
+ ],
+ options={
+ 'verbose_name': 'Copyleft and Compliance talk proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ migrations.CreateModel(
+ name='MemberProjectProposal',
+ 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=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], 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")),
+ ('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?')),
+ ('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], 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(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
+ ('content_warning_html', models.TextField(blank=True)),
+ ('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Presentation (40-45 min)')], default=3, 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, as linux.conf.au miniconfs are unfunded community run events.')),
+ ],
+ options={
+ 'verbose_name': 'SFC Member Project talk proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ ]
diff --git a/pinaxcon/proposals/models.py b/pinaxcon/proposals/models.py
index 523782be..8e5d97a5 100644
--- a/pinaxcon/proposals/models.py
+++ b/pinaxcon/proposals/models.py
@@ -127,3 +127,43 @@ 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, "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, as linux.conf.au miniconfs are unfunded community run events."
+ )
+
+ 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"
diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py
index 452ea942..2e806ccc 100644
--- a/pinaxcon/settings.py
+++ b/pinaxcon/settings.py
@@ -363,6 +363,8 @@ CONFERENCE_ID = 1
PROPOSAL_FORMS = {
"talk": "pinaxcon.proposals.forms.TalkProposalForm",
"tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
+ "copyleft-compliance": "pinaxcon.proposals.forms.CopyleftComplianceProposalForm",
+ "sfc-member-project": "pinaxcon.proposals.forms.MemberProjectProposalForm",
}
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)