diff --git a/pinaxcon/proposals/forms.py b/pinaxcon/proposals/forms.py
index e78697b0..25625032 100644
--- a/pinaxcon/proposals/forms.py
+++ b/pinaxcon/proposals/forms.py
@@ -169,3 +169,9 @@ class WildCardProposalForm(MiniconfProposalForm):
class Meta:
model = models.WildCardProposal
fields = TALK_FORMAT_FIELDS
+
+
+class RightToRepairProposalForm(MiniconfProposalForm):
+ class Meta:
+ model = models.RightToRepairProposal
+ fields = TALK_FORMAT_FIELDS
diff --git a/pinaxcon/proposals/migrations/0012_righttorepairproposal.py b/pinaxcon/proposals/migrations/0012_righttorepairproposal.py
new file mode 100644
index 00000000..84ee6676
--- /dev/null
+++ b/pinaxcon/proposals/migrations/0012_righttorepairproposal.py
@@ -0,0 +1,35 @@
+# Generated by Django 2.2.28 on 2023-05-05 13:05
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('symposion_proposals', '0003_auto_20170702_2250'),
+ ('proposals', '0011_auto_20230424_1449'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='RightToRepairProposal',
+ 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-ShareAlike 4.0 International")),
+ ('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': 'Right to Repair',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ ]
diff --git a/pinaxcon/proposals/models.py b/pinaxcon/proposals/models.py
index 2d7b6a06..8a69c012 100644
--- a/pinaxcon/proposals/models.py
+++ b/pinaxcon/proposals/models.py
@@ -248,3 +248,8 @@ class SecurityProposal(MiniconfSessionProposal):
class WildCardProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Wild card"
+
+
+class RightToRepairProposal(MiniconfSessionProposal):
+ class Meta:
+ verbose_name = "Right to Repair"
diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py
index 1e8258be..9d3d3b94 100644
--- a/pinaxcon/settings.py
+++ b/pinaxcon/settings.py
@@ -370,24 +370,25 @@ SESSION_EXPIRE_AT_BROWSER_CLOSE = True
CONFERENCE_ID = 2
PROPOSAL_FORMS = {
- "copyleft-compliance": "pinaxcon.proposals.forms.CopyleftComplianceProposalForm",
- "sfc-member-project": "pinaxcon.proposals.forms.MemberProjectProposalForm",
+ "aarch64-arm64": "pinaxcon.proposals.forms.AArch64ARM64ProposalForm",
+ "bsd-unix": "pinaxcon.proposals.forms.BSDUnixProposalForm",
+ "community": "pinaxcon.proposals.forms.CommunityProposalForm",
"container-days": "pinaxcon.proposals.forms.ContainerDaysProposalForm",
- "sustainable-open-source-business": "pinaxcon.proposals.forms.SustainableOpenSourceBusinessProposalForm",
- "software-worker-coops": "pinaxcon.proposals.forms.SoftwareWorkerCoopsProposalForm",
+ "copyleft-compliance": "pinaxcon.proposals.forms.CopyleftComplianceProposalForm",
"diversity-equity-inclusion": "pinaxcon.proposals.forms.DiversityEquityInclusionProposalForm",
"foss-at-play": "pinaxcon.proposals.forms.FOSSAtPlayProposalForm",
- "open-source-ai-data": "pinaxcon.proposals.forms.OpenSourcAIDataProposalForm",
- "open-work": "pinaxcon.proposals.forms.OpenWorkProposalForm",
- "community": "pinaxcon.proposals.forms.CommunityProposalForm",
- "bsd-unix": "pinaxcon.proposals.forms.BSDUnixProposalForm",
- "xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
- "science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
- "aarch64-arm64": "pinaxcon.proposals.forms.AArch64ARM64ProposalForm",
"foss-for-education": "pinaxcon.proposals.forms.FOSSForEducationProposalForm",
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
+ "open-source-ai-data": "pinaxcon.proposals.forms.OpenSourcAIDataProposalForm",
+ "open-work": "pinaxcon.proposals.forms.OpenWorkProposalForm",
+ "right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
+ "science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
"security": "pinaxcon.proposals.forms.SecurityForm",
+ "sfc-member-project": "pinaxcon.proposals.forms.MemberProjectProposalForm",
+ "software-worker-coops": "pinaxcon.proposals.forms.SoftwareWorkerCoopsProposalForm",
+ "sustainable-open-source-business": "pinaxcon.proposals.forms.SustainableOpenSourceBusinessProposalForm",
"wildcard": "pinaxcon.proposals.forms.WildCardProposalForm",
+ "xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
}
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)