Changeset - 57ed5e546b34
[Not reviewed]
0 4 2
Scott Bragg - 8 years ago 2016-09-23 11:23:46
jsbragg@scriptforge.org
CFPs that are ready (#68)

* CFPs that are ready

* Updated choices for sysadmin
6 files changed with 281 insertions and 1 deletions:
0 comments (0 inline, 0 general)
pinaxcon/proposals/admin.py
Show inline comments
 
from django.contrib import admin
 

	
 
import models
 
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):
 
        model = symposion_models.AdditionalSpeaker
 

	
 
    inlines = [
 
        AdditionalSpeakerInline,
 
    ]
pinaxcon/proposals/forms.py
Show inline comments
 
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):
 

	
 
    def clean_description(self):
 
        value = self.cleaned_data["description"]
 
        if len(value) > 400:
 
            raise forms.ValidationError(
 
                u"The description must be less than 400 characters"
 
            )
 
        return value
 

	
 

	
 
class TalkProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = TalkProposal
 
        fields = [
 
            "title",
 
            "target_audience",
 
            "abstract",
 
            "private_abstract",
 
            "technical_requirements",
 
            "project",
 
            "project_url",
...
 
@@ -59,24 +60,138 @@ class TutorialProposalForm(ProposalForm):
 

	
 
        widgets = {
 
            "abstract" : widgets.AceMarkdownEditor(),
 
            "private_abstract" : widgets.AceMarkdownEditor(),
 
            "technical_requirements" : widgets.AceMarkdownEditor(),
 
        }
 

	
 

	
 
class MiniconfProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = MiniconfProposal
 
        fields = [
 
            "title",
 
            "abstract",
 
            "private_abstract",
 
            "technical_requirements",
 
        ]
 

	
 
        widgets = {
 
            "abstract" : widgets.AceMarkdownEditor(),
 
            "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(),
 
        }
pinaxcon/proposals/migrations/0002_sysadminproposal_writethedocsproposal.py
Show inline comments
 
new file 100644
 
# -*- 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 <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=b"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, 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 <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=b"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, b'Long Presentation (40 min)'), (2, b'Short Presentation (20 min)')])),
 
            ],
 
            options={
 
                'verbose_name': 'WriteThe Docs Miniconf Proposal',
 
            },
 
            bases=('symposion_proposals.proposalbase',),
 
        ),
 
    ]
pinaxcon/proposals/migrations/0003_kernelproposal_openradioproposal_securityproposal_wootconfproposal.py
Show inline comments
 
new file 100644
 
# -*- 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',),
 
        ),
 
    ]
pinaxcon/proposals/models.py
Show inline comments
...
 
@@ -33,24 +33,74 @@ class Proposal(ProposalBase):
 
        "(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>"
 
    )
 

	
 
    class Meta:
 
        abstract = True
 

	
 

	
 
class TalkProposal(Proposal):
 

	
 
    class Meta:
 
        verbose_name = "talk proposal"
 

	
 
class TutorialProposal(Proposal):
 

	
 
    class Meta:
 
        verbose_name = "tutorial proposal"
 

	
 
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"
pinaxcon/settings.py
Show inline comments
...
 
@@ -232,49 +232,56 @@ FIXTURE_DIRS = [
 

	
 
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
 

	
 
ACCOUNT_OPEN_SIGNUP = True
 
ACCOUNT_EMAIL_UNIQUE = True
 
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False
 
ACCOUNT_LOGIN_REDIRECT_URL = "dashboard"
 
ACCOUNT_LOGOUT_REDIRECT_URL = "/"
 
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
 
ACCOUNT_USE_AUTH_AUTHENTICATE = True
 

	
 
THEME_CONTACT_EMAIL = "team@hobart.lca2017.org"
 

	
 
AUTHENTICATION_BACKENDS = [
 
    "symposion.teams.backends.TeamPermissionsBackend",
 
    "account.auth_backends.UsernameAuthenticationBackend",
 
    "account.auth_backends.EmailAuthenticationBackend",
 
]
 

	
 
CONFERENCE_ID = 1
 
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"
 

	
 
# Wagtail config
 
WAGTAIL_SITE_NAME = 'linux.conf.au 2017'
 
WAGTAIL_APPEND_SLASH = True
 
WAGTAILIMAGES_IMAGE_MODEL = 'cms_pages.CustomImage'
 

	
 
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
 

	
 
# CSRF custom error screen
 
CSRF_FAILURE_VIEW = "pinaxcon.csrf_view.csrf_failure"
 

	
 
# Use nose to run all tests
 
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
 

	
 
# Tell nose to measure coverage on the 'foo' and 'bar' apps
 
NOSE_ARGS = [
 
    '--with-coverage',
 
    '--cover-package=registrasion.controllers,registrasion.models',
 
]
 

	
 
# Production settings have their own file to override stuff here
 
try:
0 comments (0 inline, 0 general)