diff --git a/pinaxcon/proposals/admin.py b/pinaxcon/proposals/admin.py
index b5418e6496534b6c5d8381f48b1919ebce879179..63471fa8d6c47c9bd6d3c7b04e319a46f07d6c6e 100644
--- a/pinaxcon/proposals/admin.py
+++ b/pinaxcon/proposals/admin.py
@@ -7,6 +7,12 @@ from symposion.proposals import models as symposion_models
@admin.register(models.TalkProposal)
@admin.register(models.TutorialProposal)
@admin.register(models.MiniconfProposal)
+@admin.register(models.SysAdminProposal)
+@admin.register(models.WriteTheDocsProposal)
+@admin.register(models.OpenRadioProposal)
+@admin.register(models.SecurityProposal)
+@admin.register(models.WootconfProposal)
+@admin.register(models.KernelProposal)
class CategoryAdmin(admin.ModelAdmin):
class AdditionalSpeakerInline(admin.TabularInline):
diff --git a/pinaxcon/proposals/forms.py b/pinaxcon/proposals/forms.py
index 8f0630ae3e74fa4445e6178024897766951ba455..fa63b58f84f7af7de457118898166a5a491b0b27 100644
--- a/pinaxcon/proposals/forms.py
+++ b/pinaxcon/proposals/forms.py
@@ -3,7 +3,8 @@ from django import forms
from pinaxcon import widgets
from .models import TalkProposal, TutorialProposal, MiniconfProposal
-
+from .models import SysAdminProposal, WriteTheDocsProposal, WootconfProposal
+from .models import KernelProposal, OpenRadioProposal, SecurityProposal
class ProposalForm(forms.ModelForm):
@@ -80,3 +81,117 @@ class MiniconfProposalForm(ProposalForm):
"private_abstract" : widgets.AceMarkdownEditor(),
"technical_requirements" : widgets.AceMarkdownEditor(),
}
+
+class SysAdminProposalForm(ProposalForm):
+
+ class Meta:
+ model = SysAdminProposal
+ fields = [
+ "title",
+ "talk_format",
+ "target_audience",
+ "abstract",
+ "private_abstract",
+ "technical_requirements",
+ "project",
+ "project_url",
+ "recording_release",
+ "materials_release",
+ ]
+
+ widgets = {
+ "abstract" : widgets.AceMarkdownEditor(),
+ "private_abstract" : widgets.AceMarkdownEditor(),
+ "technical_requirements" : widgets.AceMarkdownEditor(),
+ }
+
+class WriteTheDocsProposalForm(ProposalForm):
+
+ class Meta:
+ model = WriteTheDocsProposal
+ fields = [
+ "title",
+ "talk_format",
+ "target_audience",
+ "abstract",
+ "private_abstract",
+ "technical_requirements",
+ "project",
+ "project_url",
+ "recording_release",
+ "materials_release",
+ ]
+
+ widgets = {
+ "abstract" : widgets.AceMarkdownEditor(),
+ "private_abstract" : widgets.AceMarkdownEditor(),
+ "technical_requirements" : widgets.AceMarkdownEditor(),
+ }
+
+class RadioProposalForm(ProposalForm):
+
+ class Meta:
+ model = OpenRadioProposal
+ fields = [
+ "title",
+ "abstract",
+ "private_abstract",
+ "technical_requirements",
+ ]
+
+ widgets = {
+ "abstract" : widgets.AceMarkdownEditor(),
+ "private_abstract" : widgets.AceMarkdownEditor(),
+ "technical_requirements" : widgets.AceMarkdownEditor(),
+ }
+
+class KernelProposalForm(ProposalForm):
+
+ class Meta:
+ model = KernelProposal
+ fields = [
+ "title",
+ "abstract",
+ "private_abstract",
+ "technical_requirements",
+ ]
+
+ widgets = {
+ "abstract" : widgets.AceMarkdownEditor(),
+ "private_abstract" : widgets.AceMarkdownEditor(),
+ "technical_requirements" : widgets.AceMarkdownEditor(),
+ }
+
+class WootconfProposalForm(ProposalForm):
+
+ class Meta:
+ model = WootconfProposal
+ fields = [
+ "title",
+ "abstract",
+ "private_abstract",
+ "technical_requirements",
+ ]
+
+ widgets = {
+ "abstract" : widgets.AceMarkdownEditor(),
+ "private_abstract" : widgets.AceMarkdownEditor(),
+ "technical_requirements" : widgets.AceMarkdownEditor(),
+ }
+
+class SecurityProposalForm(ProposalForm):
+
+ class Meta:
+ model = SecurityProposal
+ fields = [
+ "title",
+ "abstract",
+ "private_abstract",
+ "technical_requirements",
+ ]
+
+ widgets = {
+ "abstract" : widgets.AceMarkdownEditor(),
+ "private_abstract" : widgets.AceMarkdownEditor(),
+ "technical_requirements" : widgets.AceMarkdownEditor(),
+ }
diff --git a/pinaxcon/proposals/migrations/0002_sysadminproposal_writethedocsproposal.py b/pinaxcon/proposals/migrations/0002_sysadminproposal_writethedocsproposal.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f2fa22ef515d72e3d98c50210f7254f13eb9f44
--- /dev/null
+++ b/pinaxcon/proposals/migrations/0002_sysadminproposal_writethedocsproposal.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-21 10:36
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('symposion_proposals', '0001_initial'),
+ ('proposals', '0001_initial'),
+ ]
+
+ operations = [
+ 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, b'User'), (2, b'Business'), (3, b'Community'), (4, b'Developer')])),
+ ('recording_release', models.BooleanField(default=True, help_text=b"I allow Linux Australia to release any recordings of presentations covered by this proposal, under the Creative Commons Attribution-Share Alike Australia 3.0 Licence")),
+ ('materials_release', models.BooleanField(default=True, help_text=b"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")),
+ ('talk_format', models.IntegerField(choices=[(1, b'Long Presentation (45 min)'), (2, b'Short Presentation (20 min)'), (3, b'Lightning Talk (5 min)')])),
+ ],
+ options={
+ 'verbose_name': 'System Administration Miniconf Proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ migrations.CreateModel(
+ name='WriteTheDocsProposal',
+ 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, b'User'), (2, b'Business'), (3, b'Community'), (4, b'Developer')])),
+ ('recording_release', models.BooleanField(default=True, help_text=b"I allow Linux Australia to release any recordings of presentations covered by this proposal, under the Creative Commons Attribution-Share Alike Australia 3.0 Licence")),
+ ('materials_release', models.BooleanField(default=True, help_text=b"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")),
+ ('talk_format', models.IntegerField(choices=[(1, b'Long Presentation (40 min)'), (2, b'Short Presentation (20 min)')])),
+ ],
+ options={
+ 'verbose_name': 'WriteThe Docs Miniconf Proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ ]
diff --git a/pinaxcon/proposals/migrations/0003_kernelproposal_openradioproposal_securityproposal_wootconfproposal.py b/pinaxcon/proposals/migrations/0003_kernelproposal_openradioproposal_securityproposal_wootconfproposal.py
new file mode 100644
index 0000000000000000000000000000000000000000..88c092263c54590828adced2a67a3724bac2728a
--- /dev/null
+++ b/pinaxcon/proposals/migrations/0003_kernelproposal_openradioproposal_securityproposal_wootconfproposal.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-21 10:44
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('symposion_proposals', '0001_initial'),
+ ('proposals', '0002_sysadminproposal_writethedocsproposal'),
+ ]
+
+ operations = [
+ 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')),
+ ],
+ options={
+ 'verbose_name': 'Kernel Miniconf Proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ migrations.CreateModel(
+ name='OpenRadioProposal',
+ 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')),
+ ],
+ options={
+ 'verbose_name': 'OpenRadio Miniconf Proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ migrations.CreateModel(
+ name='SecurityProposal',
+ 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')),
+ ],
+ options={
+ 'verbose_name': 'Security/Privacy Miniconf Proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ migrations.CreateModel(
+ name='WootconfProposal',
+ 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')),
+ ],
+ options={
+ 'verbose_name': 'WOOTCONF Miniconf Proposal',
+ },
+ bases=('symposion_proposals.proposalbase',),
+ ),
+ ]
diff --git a/pinaxcon/proposals/models.py b/pinaxcon/proposals/models.py
index f7d25ceeb3602dd9a3b216bcd7e9293d6345893d..8a4bff5c677b6875422194b0cf1b3cbfa2eb851a 100644
--- a/pinaxcon/proposals/models.py
+++ b/pinaxcon/proposals/models.py
@@ -54,3 +54,53 @@ class MiniconfProposal(ProposalBase):
class Meta:
verbose_name = "miniconf proposal"
+
+class SysAdminProposal(Proposal):
+
+ TYPE_SHORT_PRESENTATION = 1
+ TYPE_LIGHTNING_TALK = 2
+
+ TALK_FORMATS = [
+ (TYPE_SHORT_PRESENTATION, "Short Presentation (20 min)"),
+ (TYPE_LIGHTNING_TALK, "Lightning Talk (5 min)"),
+ ]
+
+ talk_format = models.IntegerField(choices=TALK_FORMATS)
+
+ class Meta:
+ verbose_name = "System Administration Miniconf Proposal"
+
+class WriteTheDocsProposal(Proposal):
+
+ TYPE_LONG_PRESENTATION = 1
+ TYPE_SHORT_PRESENTATION = 2
+
+ TALK_FORMATS = [
+ (TYPE_LONG_PRESENTATION, "Long Presentation (40 min)"),
+ (TYPE_SHORT_PRESENTATION, "Short Presentation (20 min)"),
+ ]
+
+ talk_format = models.IntegerField(choices=TALK_FORMATS)
+
+ class Meta:
+ verbose_name = "WriteThe Docs Miniconf Proposal"
+
+class OpenRadioProposal(ProposalBase):
+
+ class Meta:
+ verbose_name = "OpenRadio Miniconf Proposal"
+
+class WootconfProposal(ProposalBase):
+
+ class Meta:
+ verbose_name = "WOOTCONF Miniconf Proposal"
+
+class KernelProposal(ProposalBase):
+
+ class Meta:
+ verbose_name = "Kernel Miniconf Proposal"
+
+class SecurityProposal(ProposalBase):
+
+ class Meta:
+ verbose_name = "Security/Privacy Miniconf Proposal"
diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py
index 144468be17b150153cd49b62d1d165c4d6b95caf..eb7aa3425489bfeabcc337a71148bbb73175ece5 100644
--- a/pinaxcon/settings.py
+++ b/pinaxcon/settings.py
@@ -253,7 +253,14 @@ PROPOSAL_FORMS = {
"talk": "pinaxcon.proposals.forms.TalkProposalForm",
"tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
"miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm",
+ "sysadmin-miniconf": "pinaxcon.proposals.forms.SysAdminProposalForm",
+ "radio-miniconf": "pinaxcon.proposals.forms.RadioProposalForm",
+ "wootconf-miniconf": "pinaxcon.proposals.forms.WootconfProposalForm",
+ "writethedocs-miniconf": "pinaxcon.proposals.forms.WriteTheDocsProposalForm",
+ "security-miniconf": "pinaxcon.proposals.forms.SecurityProposalForm",
+ "kernel-miniconf": "pinaxcon.proposals.forms.KernelProposalForm",
}
+
#PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
#PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"