diff --git a/pinaxcon/proposals/admin.py b/pinaxcon/proposals/admin.py
index 40725bec..6fa34d09 100644
--- a/pinaxcon/proposals/admin.py
+++ b/pinaxcon/proposals/admin.py
@@ -25,6 +25,7 @@ models_to_register = [
models.MemberProjectProposal,
models.ContainerDaysProposal,
models.SustainableOpenSourceBusinessProposal,
+ models.SoftwareWorkerCoopsProposal,
models.DiversityEquityInclusionProposal,
models.FOSSAtPlayProposal,
models.OpenSourcAIDataProposal,
diff --git a/pinaxcon/proposals/forms.py b/pinaxcon/proposals/forms.py
index 4da26a63..2969e7fe 100644
--- a/pinaxcon/proposals/forms.py
+++ b/pinaxcon/proposals/forms.py
@@ -87,6 +87,12 @@ class SustainableOpenSourceBusinessProposalForm(MiniconfProposalForm):
fields = TALK_FORMAT_FIELDS
+class SoftwareWorkerCoopsProposalForm(MiniconfProposalForm):
+ class Meta:
+ model = models.SoftwareWorkerCoopsProposal
+ fields = TALK_FORMAT_FIELDS
+
+
class DiversityEquityInclusionProposalForm(MiniconfProposalForm):
class Meta:
model = models.DiversityEquityInclusionProposal
diff --git a/pinaxcon/proposals/migrations/0009_auto_20230421_0139.py b/pinaxcon/proposals/migrations/0009_auto_20230421_0139.py
new file mode 100644
index 00000000..97533992
--- /dev/null
+++ b/pinaxcon/proposals/migrations/0009_auto_20230421_0139.py
@@ -0,0 +1,114 @@
+# Generated by Django 2.2.28 on 2023-04-21 08:39
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('symposion_proposals', '0003_auto_20170702_2250'),
+ ('proposals', '0008_auto_20230420_0241'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='SoftwareWorkerCoopsProposal',
+ 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 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 ( CC BY-NC-SA 4.0) 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 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?', null=True)),
+ ('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, 'Long 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.')),
+ ],
+ options={
+ 'verbose_name': 'Software Worker Co-ops',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ migrations.AlterModelOptions(
+ name='sustainableopensourcebusinessproposal',
+ options={'verbose_name': 'Sustainable Open Source Business'},
+ ),
+ migrations.AlterField(
+ model_name='aarch64arm64proposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='bsdunixproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='communityproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='containerdaysproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='copyleftcomplianceproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='diversityequityinclusionproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='fossatplayproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='fossforeducationproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='fossindailylifeproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='memberprojectproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='opensourcaidataproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='openworkproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='scienceofcommunityproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='sustainableopensourcebusinessproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ migrations.AlterField(
+ model_name='xmppproposal',
+ name='talk_format',
+ field=models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
+ ),
+ ]
diff --git a/pinaxcon/proposals/models.py b/pinaxcon/proposals/models.py
index 8adeb625..c445136b 100644
--- a/pinaxcon/proposals/models.py
+++ b/pinaxcon/proposals/models.py
@@ -139,8 +139,9 @@ class MiniconfSessionProposal(Proposal):
FORMAT_OTHER = 5
TALK_FORMATS = [
- (FORMAT_MEDIUM_PRESENTATION, "Short Presentation (15 or 20 min)"),
- (FORMAT_LONG_PRESENTATION, "Long Presentation (45 min)"),
+ (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(
@@ -176,7 +177,12 @@ class ContainerDaysProposal(MiniconfSessionProposal):
class SustainableOpenSourceBusinessProposal(MiniconfSessionProposal):
class Meta:
- verbose_name = "Sustainable Open Source Business/ Software Worker Coops proposal"
+ verbose_name = "Sustainable Open Source Business"
+
+
+class SoftwareWorkerCoopsProposal(MiniconfSessionProposal):
+ class Meta:
+ verbose_name = "Software Worker Co-ops"
class DiversityEquityInclusionProposal(MiniconfSessionProposal):
diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py
index 0f0d3275..94b75c72 100644
--- a/pinaxcon/settings.py
+++ b/pinaxcon/settings.py
@@ -372,6 +372,7 @@ PROPOSAL_FORMS = {
"sfc-member-project": "pinaxcon.proposals.forms.MemberProjectProposalForm",
"container-days": "pinaxcon.proposals.forms.ContainerDaysProposalForm",
"sustainable-open-source-business": "pinaxcon.proposals.forms.SustainableOpenSourceBusinessProposalForm",
+ "software-worker-coops": "pinaxcon.proposals.forms.SoftwareWorkerCoopsProposalForm",
"diversity-equity-inclusion": "pinaxcon.proposals.forms.DiversityEquityInclusionProposalForm",
"foss-at-play": "pinaxcon.proposals.forms.FOSSAtPlayProposalForm",
"open-source-ai-data": "pinaxcon.proposals.forms.OpenSourcAIDataProposalForm",