diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d8aba45e0ee642b2d4ae9fd1426cdcec1d2f3806..a40df37df26e61509bc9e5b43ad1f653f27f97b1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: DOCKER_TLS_CERTDIR: "/certs" - CONTAINER_PREFIX: 2022 + CONTAINER_PREFIX: 2023 CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/$CONTAINER_PREFIX:$CI_COMMIT_SHA build-image: @@ -18,7 +18,7 @@ build-image: - docker build --pull -f docker/Dockerfile -t $CONTAINER_IMAGE . - docker push $CONTAINER_IMAGE only: - - "2022" + - conf/2023 k8s-deploy-staging: image: google/cloud-sdk @@ -26,15 +26,15 @@ k8s-deploy-staging: script: - echo "${CA_CERT}" > cert.crt - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt - - kubectl config set-context cluster --cluster=cluster --namespace=lca2022-staging --user=gitlab-ci + - kubectl config set-context cluster --cluster=cluster --namespace=eo2023-staging --user=gitlab-ci - kubectl config use-context cluster - kubectl --token "${KUBE_TOKEN}" set image deployment/symposion-app symposion-app=$CONTAINER_IMAGE when: manual only: - - dev/2022 + - dev/2023 environment: - name: 2022/staging - url: https://staging-lca2022.gc2020.org/ + name: 2023/staging + url: https://staging-eo2023.osaconftools.net/ k8s-deploy-prod: image: google/cloud-sdk @@ -42,15 +42,15 @@ k8s-deploy-prod: script: - echo "${CA_CERT}" > cert.crt - kubectl config set-cluster cluster --server="${KUBE_SERVER}" --embed-certs=true --certificate-authority=cert.crt - - kubectl config set-context cluster --cluster=cluster --namespace=lca2022-prod --user=gitlab-ci + - kubectl config set-context cluster --cluster=cluster --namespace=eo2023-prod --user=gitlab-ci - kubectl config use-context cluster - kubectl --token "${KUBE_TOKEN}" set image deployment/symposion-app symposion-app=$CONTAINER_IMAGE when: manual only: - - "2022" + - conf/2023 environment: - name: 2022/prod - url: https://lca2022.linux.org.au + name: 2023/prod + url: https://2023.everythingopen.au/ .docs_template: &sphinx image: alpine @@ -70,7 +70,7 @@ pages: stage: build only: - master - - "2022" + - conf/2023 environment: name: docs url: https://laconfdev.gitlab.io/symposion_app/ @@ -80,4 +80,4 @@ build-sphinx: stage: build except: - master - - "2022" + - conf/2023 diff --git a/fixtures/2022/auth.permission.json b/fixtures/2022/auth.permission.json deleted file mode 100644 index 547f489f6b355cbd810fe1231ac66d2aee22169f..0000000000000000000000000000000000000000 --- a/fixtures/2022/auth.permission.json +++ /dev/null @@ -1,46 +0,0 @@ -[ -{ - "model": "auth.permission", - "fields": { - "name": "Can review Main Conference", - "content_type": [ - "reviews", - "" - ], - "codename": "can_review_main" - } -}, -{ - "model": "auth.permission", - "fields": { - "name": "Can manage Main Conference", - "content_type": [ - "reviews", - "" - ], - "codename": "can_manage_main" - } -}, -{ - "model": "auth.permission", - "fields": { - "name": "Can review MiniConf", - "content_type": [ - "reviews", - "" - ], - "codename": "can_review_miniconf" - } -}, -{ - "model": "auth.permission", - "fields": { - "name": "Can manage MiniConf", - "content_type": [ - "reviews", - "" - ], - "codename": "can_manage_miniconf" - } -} -] diff --git a/fixtures/2022/conference.section.json b/fixtures/2022/conference.section.json deleted file mode 100644 index b0ff341fd83f73c40c7bdded66a84a03c84c5e32..0000000000000000000000000000000000000000 --- a/fixtures/2022/conference.section.json +++ /dev/null @@ -1,24 +0,0 @@ -[ -{ - "model": "symposion_conference.section", - "pk": 1, - "fields": { - "conference": 1, - "name": "Main Conference", - "slug": "main", - "start_date": "2022-01-14", - "end_date": "2022-01-16" - } -}, -{ - "model": "symposion_conference.section", - "pk": 2, - "fields": { - "conference": 1, - "name": "MiniConf", - "slug": "miniconf", - "start_date": null, - "end_date": null - } -} -] diff --git a/fixtures/2022/proposals.proposalsection.json b/fixtures/2022/proposals.proposalsection.json deleted file mode 100644 index aa89d12fdee5593cff35c6cca79e7d4a8cc321cb..0000000000000000000000000000000000000000 --- a/fixtures/2022/proposals.proposalsection.json +++ /dev/null @@ -1,24 +0,0 @@ -[ -{ - "model": "symposion_proposals.proposalsection", - "pk": 1, - "fields": { - "section": 1, - "start": "2021-08-01T12:00:00Z", - "end": "2021-09-01T12:00:00Z", - "closed": false, - "published": true - } -}, -{ - "model": "symposion_proposals.proposalsection", - "pk": 2, - "fields": { - "section": 2, - "start": "2021-07-05T12:00:00Z", - "end": "2021-08-01T12:00:00Z", - "closed": false, - "published": true - } -} -] diff --git a/fixtures/conference.json b/fixtures/conference.json index 76a7b34844deb84cf919331de0a90acdf0d4cf0d..be80a1476683e0498b8d6ab20617388f51bc812b 100644 --- a/fixtures/conference.json +++ b/fixtures/conference.json @@ -3,10 +3,10 @@ "model": "symposion_conference.conference", "pk": 1, "fields": { - "title": "linux.conf.au 2022", - "start_date": "2022-01-14", - "end_date": "2022-01-16", - "timezone": "Australia/Canberra" + "title": "Everything Open 2023", + "start_date": "2023-03-14", + "end_date": "2023-03-16", + "timezone": "Australia/Melbourne" } } ] diff --git a/fixtures/flatpages.json b/fixtures/flatpages.json index 53503d264d1c25d2e4f15bf699d8306caf6dfd43..ea8b912c242d59738ff90089fbdcb6f40bff552d 100644 --- a/fixtures/flatpages.json +++ b/fixtures/flatpages.json @@ -5,7 +5,7 @@ "fields": { "url": "/", "title": "Home Page", - "content": "Here is the home page for LCA.\r\n\r\nOther pages to come.", + "content": "Here is the home page.\r\n\r\nOther pages to come.", "enable_comments": false, "template_name": "", "registration_required": false, diff --git a/fixtures/2022/auth.group.json b/fixtures/sessions/auth.group.json similarity index 100% rename from fixtures/2022/auth.group.json rename to fixtures/sessions/auth.group.json diff --git a/fixtures/sessions/auth.permission.json b/fixtures/sessions/auth.permission.json new file mode 100644 index 0000000000000000000000000000000000000000..c605f4fed65358884d22e4bae004aa79bb18a0dd --- /dev/null +++ b/fixtures/sessions/auth.permission.json @@ -0,0 +1,24 @@ +[ +{ + "model": "auth.permission", + "fields": { + "name": "Can review Main Conference", + "content_type": [ + "reviews", + "" + ], + "codename": "can_review_main" + } +}, +{ + "model": "auth.permission", + "fields": { + "name": "Can manage Main Conference", + "content_type": [ + "reviews", + "" + ], + "codename": "can_manage_main" + } +} +] diff --git a/fixtures/sessions/conference.section.json b/fixtures/sessions/conference.section.json new file mode 100644 index 0000000000000000000000000000000000000000..6ebe821179d9d10621c7980c5e2c37a17f5ae2a5 --- /dev/null +++ b/fixtures/sessions/conference.section.json @@ -0,0 +1,13 @@ +[ +{ + "model": "symposion_conference.section", + "pk": 1, + "fields": { + "conference": 1, + "name": "Main Conference", + "slug": "main", + "start_date": "2023-03-14", + "end_date": "2023-03-16" + } +} +] diff --git a/fixtures/2022/proposals.proposalkind.json b/fixtures/sessions/proposals.proposalkind.json similarity index 68% rename from fixtures/2022/proposals.proposalkind.json rename to fixtures/sessions/proposals.proposalkind.json index d8f0c9081ad4e72920b98ed66240a1d5d1c92255..672f138ca545fdf4c6e4c531d61e3384e3e36964 100644 --- a/fixtures/2022/proposals.proposalkind.json +++ b/fixtures/sessions/proposals.proposalkind.json @@ -10,11 +10,11 @@ }, { "model": "symposion_proposals.proposalkind", - "pk": 3, + "pk": 2, "fields": { - "section": 2, - "name": "Miniconf", - "slug": "miniconf" + "section": 1, + "name": "Tutorial", + "slug": "tutorial" } } ] diff --git a/fixtures/sessions/proposals.proposalsection.json b/fixtures/sessions/proposals.proposalsection.json new file mode 100644 index 0000000000000000000000000000000000000000..70c78dc52a1432471d08ec74074c99b56ec42774 --- /dev/null +++ b/fixtures/sessions/proposals.proposalsection.json @@ -0,0 +1,13 @@ +[ +{ + "model": "symposion_proposals.proposalsection", + "pk": 1, + "fields": { + "section": 1, + "start": "2022-12-07T12:00:00Z", + "end": "2023-01-09T12:00:00Z", + "closed": false, + "published": true + } +} +] diff --git a/fixtures/2022/teams.team.json b/fixtures/sessions/teams.team.json similarity index 62% rename from fixtures/2022/teams.team.json rename to fixtures/sessions/teams.team.json index 20f2598da5eba7820449bb636465dd3e68f78d1d..dd13895bbc45cff114e3928947816d77185bd58f 100644 --- a/fixtures/2022/teams.team.json +++ b/fixtures/sessions/teams.team.json @@ -4,8 +4,8 @@ "pk": 1, "fields": { "slug": "main-proposals", - "name": "linux.conf.au Sessions Team", - "description": "Team looking after the linux.conf.au Call for Sessions", + "name": "Sessions Team", + "description": "Team looking after the Call for Sessions", "access": "invitation", "created": "2019-06-23T08:16:34.032Z", "permissions": [ @@ -13,11 +13,6 @@ "can_review_main", "reviews", "" - ], - [ - "can_review_miniconf", - "reviews", - "" ] ], "manager_permissions": [ @@ -39,8 +34,8 @@ "pk": 2, "fields": { "slug": "organising-team", - "name": "linux.conf.au Organising Team", - "description": "The organising team for linux.conf.au", + "name": "Organising Team", + "description": "The conference organising team", "access": "invitation", "created": "2019-08-26T22:59:09.265Z", "permissions": [ @@ -48,11 +43,6 @@ "can_review_main", "reviews", "" - ], - [ - "can_review_miniconf", - "reviews", - "" ] ], "manager_permissions": [] diff --git a/fixtures/sites.json b/fixtures/sites.json index 57e21b0196cf2f9edc17e43bfda85a387cc3288b..3b6f3e08252cd3b6eabb4834fd0468ede0526bcd 100644 --- a/fixtures/sites.json +++ b/fixtures/sites.json @@ -3,8 +3,8 @@ "model": "sites.site", "pk": 1, "fields": { - "domain": "lca2022.linux.org.au", - "name": "linux.conf.au 2022" + "domain": "2023.everythingopen.au", + "name": "Everything Open 2023" } } ] diff --git a/fixtures/sitetree.json b/fixtures/sitetree.json index 292b3f4243f0fa096caf91e875723b710ebd99db..48a9cf5416fa92ccd1ab51e167a32b9e51fdc9f4 100644 --- a/fixtures/sitetree.json +++ b/fixtures/sitetree.json @@ -131,7 +131,7 @@ "model": "sitetree.treeitem", "pk": 6, "fields": { - "title": "About LCA2022", + "title": "About Everything Open", "hint": "", "url": "/about/", "urlaspattern": false, diff --git a/k8s/deployment_template.jsonnet b/k8s/deployment_template.jsonnet index 1b0904d3aecb77a9dfa5b56263ccebf5a5636ad2..76dea795239065ac4c2875cee665e6029a6df483 100644 --- a/k8s/deployment_template.jsonnet +++ b/k8s/deployment_template.jsonnet @@ -121,7 +121,7 @@ function (slug, sha) { "value": "UA-000000000-1" } ], - "image": "asia.gcr.io/linuxconfsydney/symposion_app_2022_dev:" + sha, + "image": "registry.gitlab.com/laconfdev/symposion_app/2023:" + sha, "imagePullPolicy": "Always", "livenessProbe": { "failureThreshold": 3, diff --git a/make_dev_container.sh b/make_dev_container.sh index c7162b9adce3d3aaf7291a92c849941af1c160d2..829c5269189c9feef46f81f40584774f95f58f96 100755 --- a/make_dev_container.sh +++ b/make_dev_container.sh @@ -26,7 +26,7 @@ docker exec symposion ./manage.py collectstatic --noinput -v 0 docker exec symposion ./manage.py migrate docker exec symposion ./manage.py loaddata ./fixtures/{conference,sites,sitetree,flatpages}.json docker exec symposion ./manage.py create_review_permissions -docker exec symposion ./manage.py loaddata ./fixtures/????/*.json +docker exec symposion ./manage.py loaddata ./fixtures/sessions/*.json docker exec symposion ./manage.py populate_inventory if [ -e ./symposion-tools ]; then diff --git a/pinaxcon/proposals/admin.py b/pinaxcon/proposals/admin.py index 17c91effab4bda5fe457859519dbfea3000c9c4f..248429e6477d40964ab4262516c6242e1ea18549 100644 --- a/pinaxcon/proposals/admin.py +++ b/pinaxcon/proposals/admin.py @@ -23,12 +23,6 @@ class CategoryAdmin(admin.ModelAdmin): models_to_register = [ models.TalkProposal, models.TutorialProposal, - models.MiniconfProposal, - ### LCA2022 Miniconfs - models.GlamCommunityProposal, - models.KernelProposal, - models.OpenHardwareProposal, - models.SysAdminProposal, ] for model in models_to_register: diff --git a/pinaxcon/proposals/forms.py b/pinaxcon/proposals/forms.py index cea4b71ced586487d5cdf3f6d3939c6bd91d2699..d1184b4aee26a86cb4fa10e013e2fe56941955d7 100644 --- a/pinaxcon/proposals/forms.py +++ b/pinaxcon/proposals/forms.py @@ -13,6 +13,7 @@ DEFAULT_FIELDS = [ "experience_level", "abstract", "private_abstract", + "content_warning", "technical_requirements", "project", "project_url", @@ -22,8 +23,6 @@ DEFAULT_FIELDS = [ "materials_release", ] -MINICONF_SESSION_FORMAT_FIELDS = copy.copy(DEFAULT_FIELDS) - class ProposalForm(forms.ModelForm): required_css_class = 'label-required' @@ -49,57 +48,3 @@ class TutorialProposalForm(ProposalForm): class Meta: model = models.TutorialProposal fields = copy.copy(DEFAULT_FIELDS) - - -class MiniconfProposalForm(ProposalForm): - - class Meta: - model = models.MiniconfProposal - fields = [ - "title", - "abstract", - "private_abstract", - "technical_requirements", - "recording_release", - "materials_release", - ] - -### LCA2022 Miniconfs - -class MiniconfSessionProposalForm(ProposalForm): - pass - - -class GlamCommunityProposalForm(MiniconfSessionProposalForm): - - class Meta: - model = models.GlamCommunityProposal - fields = MINICONF_SESSION_FORMAT_FIELDS - - -class KernelProposalForm(MiniconfSessionProposalForm): - - class Meta: - model = models.KernelProposal - fields = MINICONF_SESSION_FORMAT_FIELDS - - -HARDWARE_FIELDS = copy.copy(MINICONF_SESSION_FORMAT_FIELDS) -HARDWARE_FIELDS.insert(4, "talk_format") - -class OpenHardwareProposalForm(MiniconfSessionProposalForm): - - def __init__(self, *a, **k): - super(OpenHardwareProposalForm, self).__init__(*a, **k) - self.fields['talk_format'].required = True - - class Meta: - model = models.OpenHardwareProposal - fields = HARDWARE_FIELDS - - -class SysAdminProposalForm(MiniconfSessionProposalForm): - - class Meta: - model = models.SysAdminProposal - fields = MINICONF_SESSION_FORMAT_FIELDS diff --git a/pinaxcon/proposals/migrations/0004_auto_20210809_2026.py b/pinaxcon/proposals/migrations/0004_auto_20210809_2026.py deleted file mode 100644 index b7eab2823788d83f8f5116496cbde826e1fb74b0..0000000000000000000000000000000000000000 --- a/pinaxcon/proposals/migrations/0004_auto_20210809_2026.py +++ /dev/null @@ -1,125 +0,0 @@ -# Generated by Django 2.2.24 on 2021-08-09 10:26 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposals', '0003_auto_20170702_2227'), - ] - - operations = [ - migrations.CreateModel( - name='SessionProposal', - 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-Share Alike Australia 3.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, 'Software'), (2, 'Hardware'), (3, 'Firmware'), (4, 'Linux Kernel'), (5, 'Documentation'), (6, 'Community'), (7, 'Security'), (8, 'Deployment & Operations'), (9, '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?')), - ], - options={ - 'abstract': False, - }, - bases=('symposion_proposals.proposalbase',), - ), - migrations.RemoveField( - model_name='talkproposal', - name='materials_release', - ), - migrations.RemoveField( - model_name='talkproposal', - name='proposalbase_ptr', - ), - migrations.RemoveField( - model_name='talkproposal', - name='recording_release', - ), - migrations.RemoveField( - model_name='talkproposal', - name='target_audience', - ), - migrations.RemoveField( - model_name='tutorialproposal', - name='materials_release', - ), - migrations.RemoveField( - model_name='tutorialproposal', - name='proposalbase_ptr', - ), - migrations.RemoveField( - model_name='tutorialproposal', - name='recording_release', - ), - migrations.RemoveField( - model_name='tutorialproposal', - name='target_audience', - ), - migrations.AlterField( - model_name='miniconfproposal', - name='recording_release', - field=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-Share Alike Australia 3.0 Licence"), - ), - migrations.AlterField( - model_name='miniconfproposal', - name='target_audience', - field=models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], default=4), - ), - migrations.CreateModel( - name='GlamCommunityProposal', - fields=[ - ('sessionproposal_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='proposals.SessionProposal')), - ], - options={ - 'verbose_name': 'GO GLAM Miniconf Proposal', - }, - bases=('proposals.sessionproposal',), - ), - migrations.CreateModel( - name='KernelProposal', - fields=[ - ('sessionproposal_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='proposals.SessionProposal')), - ], - options={ - 'verbose_name': 'Kernel Miniconf Proposal', - }, - bases=('proposals.sessionproposal',), - ), - migrations.CreateModel( - name='OpenHardwareProposal', - fields=[ - ('sessionproposal_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='proposals.SessionProposal')), - ('talk_format', models.IntegerField(choices=[(1, 'Presentation'), (2, 'Tutorial'), (3, 'Hands-on')], default=1, help_text='Will your session be a presentation, tutorial or hands-on (e.g how to use KiCAD or some other tooling)?')), - ], - options={ - 'verbose_name': 'Open Hardware Miniconf Proposal', - }, - bases=('proposals.sessionproposal',), - ), - migrations.CreateModel( - name='SysAdminProposal', - fields=[ - ('sessionproposal_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='proposals.SessionProposal')), - ], - options={ - 'verbose_name': 'System Administration Miniconf Proposal', - }, - bases=('proposals.sessionproposal',), - ), - migrations.AddField( - model_name='talkproposal', - name='sessionproposal_ptr', - field=models.OneToOneField(auto_created=True, default=0, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='proposals.SessionProposal'), - preserve_default=False, - ), - migrations.AddField( - model_name='tutorialproposal', - name='sessionproposal_ptr', - field=models.OneToOneField(auto_created=True, default=0, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='proposals.SessionProposal'), - preserve_default=False, - ), - ] diff --git a/pinaxcon/proposals/migrations/0004_auto_20221208_0102.py b/pinaxcon/proposals/migrations/0004_auto_20221208_0102.py new file mode 100644 index 0000000000000000000000000000000000000000..50bdcd56fb03c11b906703a32a230e1a10bde4c1 --- /dev/null +++ b/pinaxcon/proposals/migrations/0004_auto_20221208_0102.py @@ -0,0 +1,89 @@ +# Generated by Django 2.2.28 on 2022-12-07 14:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('symposion_schedule', '0008_auto_20190122_0815'), + ('symposion_reviews', '0001_initial'), + ('symposion_proposals', '0003_auto_20170702_2250'), + ('proposals', '0003_auto_20170702_2227'), + ] + + operations = [ + migrations.AddField( + model_name='talkproposal', + name='content_warning', + field=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'), + ), + migrations.AddField( + model_name='talkproposal', + name='content_warning_html', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='talkproposal', + name='experience_level', + field=models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?'), + ), + migrations.AddField( + model_name='talkproposal', + name='primary_topic', + field=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?'), + ), + migrations.AddField( + model_name='talkproposal', + name='require_approval', + field=models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?'), + ), + migrations.AddField( + model_name='tutorialproposal', + name='content_warning', + field=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'), + ), + migrations.AddField( + model_name='tutorialproposal', + name='content_warning_html', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='tutorialproposal', + name='experience_level', + field=models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?'), + ), + migrations.AddField( + model_name='tutorialproposal', + name='primary_topic', + field=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?'), + ), + migrations.AddField( + model_name='tutorialproposal', + name='require_approval', + field=models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?'), + ), + migrations.AlterField( + model_name='talkproposal', + name='recording_release', + field=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."), + ), + migrations.AlterField( + model_name='talkproposal', + name='target_audience', + field=models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?'), + ), + migrations.AlterField( + model_name='tutorialproposal', + name='recording_release', + field=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."), + ), + migrations.AlterField( + model_name='tutorialproposal', + name='target_audience', + field=models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?'), + ), + migrations.DeleteModel( + name='MiniconfProposal', + ), + ] diff --git a/pinaxcon/proposals/models.py b/pinaxcon/proposals/models.py index 2495e15b0b0b1d470cfe4f6fe559079494e5bd78..523782be122e314ab64fa36511058b7212b73d75 100644 --- a/pinaxcon/proposals/models.py +++ b/pinaxcon/proposals/models.py @@ -1,6 +1,8 @@ from django.db import models +from django.utils.translation import ugettext_lazy as _ from symposion.proposals.models import ProposalBase +from symposion.text_parser import parse class Proposal(ProposalBase): @@ -17,6 +19,48 @@ class Proposal(ProposalBase): (TARGET_BUSINESS, "Business"), ] + TOPIC_LINUX = 1 + TOPIC_SOFTWARE = 2 + TOPIC_HARDWARE = 3 + TOPIC_FIRMWARE = 4 + TOPIC_SYSADMIN = 5 + TOPIC_SECURITY = 6 + TOPIC_DOCUMENTATION = 7 + TOPIC_COMMUNITY = 8 + TOPIC_SCIENCE = 9 + TOPIC_GLAM = 10 + TOPIC_MULTIMEDIA = 11 + TOPIC_AEROSPACE = 12 + TOPIC_AGRICULTURE = 13 + TOPIC_OTHER = 14 + + PROPOSAL_TOPIC = [ + (TOPIC_LINUX, "Linux"), + (TOPIC_SOFTWARE, "Software"), + (TOPIC_HARDWARE, "Hardware"), + (TOPIC_FIRMWARE, "Firmware"), + (TOPIC_SYSADMIN, "System Administration / Operations"), + (TOPIC_SECURITY, "Security"), + (TOPIC_DOCUMENTATION, "Documentation"), + (TOPIC_COMMUNITY, "Community"), + (TOPIC_SCIENCE, "Science & Data"), + (TOPIC_GLAM, "Galleries, Libraries, Archives & Museums (GLAM)"), + (TOPIC_MULTIMEDIA, "Multimedia"), + (TOPIC_AEROSPACE, "Aerospace / UAV"), + (TOPIC_AGRICULTURE, "Agriculture"), + (TOPIC_OTHER, "Other"), + ] + + LEVEL_BEGINNER = 1 + LEVEL_INTERMEDIATE = 2 + LEVEL_ADVANCED = 3 + + EXPERIENCE_LEVEL = [ + (LEVEL_BEGINNER, "Beginner"), + (LEVEL_INTERMEDIATE, "Intermediate"), + (LEVEL_ADVANCED, "Advanced"), + ] + target_audience = models.IntegerField( choices=TARGET_AUDIENCES, help_text="Who is the target audience for your session?", @@ -41,50 +85,6 @@ class Proposal(ProposalBase): "Creative Commons Attribution-Share Alike Australia 3.0 Licence" ) - class Meta: - abstract = True - - -class SessionProposal(Proposal): - """ - Base Session Proposal - - This is not a meta class as we want a single table to store the common - data across all session proposal types. - """ - - TOPIC_SOFTWARE = 1 - TOPIC_HARDWARE = 2 - TOPIC_FIRMWARE = 3 - TOPIC_KERNEL = 4 - TOPIC_DOCUMENTATION = 5 - TOPIC_COMMUNITY = 6 - TOPIC_SECURITY = 7 - TOPIC_OPERATIONS = 8 - TOPIC_OTHER = 9 - - PROPOSAL_TOPIC = [ - (TOPIC_SOFTWARE, "Software"), - (TOPIC_HARDWARE, "Hardware"), - (TOPIC_FIRMWARE, "Firmware"), - (TOPIC_KERNEL, "Linux Kernel"), - (TOPIC_DOCUMENTATION, "Documentation"), - (TOPIC_COMMUNITY, "Community"), - (TOPIC_SECURITY, "Security"), - (TOPIC_OPERATIONS, "Deployment & Operations"), - (TOPIC_OTHER, "Other"), - ] - - LEVEL_BEGINNER = 1 - LEVEL_INTERMEDIATE = 2 - LEVEL_ADVANCED = 3 - - EXPERIENCE_LEVEL = [ - (LEVEL_BEGINNER, "Beginner"), - (LEVEL_INTERMEDIATE, "Intermediate"), - (LEVEL_ADVANCED, "Advanced"), - ] - primary_topic = models.IntegerField( choices=PROPOSAL_TOPIC, help_text="What is the primary topic area for your session?" @@ -101,79 +101,29 @@ class SessionProposal(Proposal): "institution before you can confirm your availability to present?" ) - -class TalkProposal(SessionProposal): - - class Meta: - verbose_name = "talk proposal" - - -class TutorialProposal(SessionProposal): - - class Meta: - verbose_name = "tutorial proposal" - - -class MiniconfProposal(Proposal): - """ - Miniconf Proposal - - Note that this is just a Proposal, not a SessionProposal, as it does not - require a number of fields that the others use. - """ - - target_audience = models.IntegerField(choices=Proposal.TARGET_AUDIENCES, - default=Proposal.TARGET_DEVELOPER) - - class Meta: - verbose_name = "miniconf proposal" - - -class MiniconfSessionProposal(SessionProposal): - """ - Base Miniconf Session Proposal - """ + content_warning = models.TextField( + "Content Warning", + help_text=_("This will be shown on the schedule to give attendees " + "advanced warning of topics covered in the session. "), + blank=True, + ) + content_warning_html = models.TextField(blank=True) class Meta: abstract = True + def save(self, *args, **kwargs): + self.content_warning_html = parse(self.content_warning) + return super(Proposal, self).save(*args, **kwargs) -class GlamCommunityProposal(MiniconfSessionProposal): - - class Meta: - verbose_name = "GO GLAM Miniconf Proposal" - - -class KernelProposal(MiniconfSessionProposal): - class Meta: - verbose_name = "Kernel Miniconf Proposal" - - -class OpenHardwareProposal(MiniconfSessionProposal): - - FORMAT_PRESENTATION = 1 - FORMAT_TUTORIAL = 2 - FORMAT_HANDS_ON = 3 - - TALK_FORMATS = [ - (FORMAT_PRESENTATION, "Presentation"), - (FORMAT_TUTORIAL, "Tutorial"), - (FORMAT_HANDS_ON, "Hands-on"), - ] - - talk_format = models.IntegerField( - choices=TALK_FORMATS, - default=FORMAT_PRESENTATION, - help_text="Will your session be a presentation, tutorial or hands-on " - "(e.g how to use KiCAD or some other tooling)?" - ) +class TalkProposal(Proposal): class Meta: - verbose_name = "Open Hardware Miniconf Proposal" + verbose_name = "talk proposal" -class SysAdminProposal(MiniconfSessionProposal): +class TutorialProposal(Proposal): class Meta: - verbose_name = "System Administration Miniconf Proposal" + verbose_name = "tutorial proposal" diff --git a/pinaxcon/registrasion/forms.py b/pinaxcon/registrasion/forms.py index fdbbb1e9aab877cadef8e6e259788ff507a56611..d3120a9674e02db3f33839bca2abeaf3a5b8b865 100644 --- a/pinaxcon/registrasion/forms.py +++ b/pinaxcon/registrasion/forms.py @@ -25,6 +25,7 @@ class ProfileForm(forms.ModelForm): exclude = [ 'attendee', 'children', + 'lca_announce', 'lca_chat', 'future_conference', ] diff --git a/pinaxcon/registrasion/management/commands/populate_inventory.py b/pinaxcon/registrasion/management/commands/populate_inventory.py index f0f148d10e1c59f5927e207693bd3989ce8ce0e7..6a581e0be29d2826d7dbc02d7c3299db973290a1 100644 --- a/pinaxcon/registrasion/management/commands/populate_inventory.py +++ b/pinaxcon/registrasion/management/commands/populate_inventory.py @@ -127,7 +127,7 @@ class Command(BaseCommand): # ("name",), # name="Shirt", # description="Commemorative conference shirts, featuring the " - # f"linux.conf.au {settings.LCA_START.year} artwork. " + # f"linux.conf.au {settings.CONF_START.year} artwork. " # "View the " # "sizing guide.", # required=False, diff --git a/pinaxcon/registrasion/migrations/0001_initial.py b/pinaxcon/registrasion/migrations/0001_initial.py index 0007a6f52913b9aeb428fc7ad52c63ef3974b7c8..4406895ceb9d55a4873d68ab2ae0022d550a1f2c 100644 --- a/pinaxcon/registrasion/migrations/0001_initial.py +++ b/pinaxcon/registrasion/migrations/0001_initial.py @@ -8,28 +8,29 @@ import django_countries.fields _PAST_EVENTS = ( - (1999, "1999 Melbourne (CALU)"), - (2001, "2001 Sydney"), - (2002, "2002 Brisbane"), - (2003, "2003 Perth"), - (2004, "2004 Adelaide"), - (2005, "2005 Canberra"), - (2006, "2006 Dunedin"), - (2007, "2007 Sydney"), - (2008, "2008 Melbourne"), - (2009, "2009 Hobart"), - (2010, "2010 Wellington"), - (2011, "2011 Brisbane"), - (2012, "2012 Ballarat"), - (2013, "2013 Canberra"), - (2014, "2014 Perth"), - (2015, "2015 Auckland"), - (2016, "2016 Geelong"), - (2017, "2017 Hobart"), - (2018, "2018 Sydney"), - (2019, "2019 Christchurch"), - (2020, "2020 Gold Coast"), - (2021, "2021 Online"), + (1999, "CALU 1999 Melbourne"), + (2001, "LCA2001 Sydney"), + (2002, "LCA2002 Brisbane"), + (2003, "LCA2003 Perth"), + (2004, "LCA2004 Adelaide"), + (2005, "LCA2005 Canberra"), + (2006, "LCA2006 Dunedin"), + (2007, "LCA2007 Sydney"), + (2008, "LCA2008 Melbourne"), + (2009, "LCA2009 Hobart"), + (2010, "LCA2010 Wellington"), + (2011, "LCA2011 Brisbane"), + (2012, "LCA2012 Ballarat"), + (2013, "LCA2013 Canberra"), + (2014, "LCA2014 Perth"), + (2015, "LCA2015 Auckland"), + (2016, "LCA2016 Geelong"), + (2017, "LCA2017 Hobart"), + (2018, "LCA2018 Sydney"), + (2019, "LCA2019 Christchurch"), + (2020, "LCA2020 Gold Coast"), + (2021, "LCA2021 Online"), + (2022, "LCA2022 Online"), ) diff --git a/pinaxcon/registrasion/migrations/0015_auto_20221208_0102.py b/pinaxcon/registrasion/migrations/0015_auto_20221208_0102.py new file mode 100644 index 0000000000000000000000000000000000000000..1c80238cf31315ef86c608aa7bbcba45d9d3b78e --- /dev/null +++ b/pinaxcon/registrasion/migrations/0015_auto_20221208_0102.py @@ -0,0 +1,38 @@ +# Generated by Django 2.2.28 on 2022-12-07 14:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pinaxcon_registrasion', '0014_auto_20201123_2319'), + ] + + operations = [ + migrations.AlterField( + model_name='attendeeprofile', + name='address_line_1', + field=models.CharField(blank=True, help_text='This address, if provided, will appear on your invoices. It is also where we will ship your Open Hardware Kit if you are allocated one.', max_length=1024, verbose_name='Address line 1'), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='children', + field=models.CharField(blank=True, help_text="Everything Open is a family friendly conference and provides free child-care for pre-school children from 6 months up to 5 years. We hope to also provide a programme for older children and will let you know closer to the conference. If you're wanting to bring your children, please let us know their age(s) so we can ensure we have enough spaces available.", max_length=256, verbose_name='Child Ages and Information'), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='lca_chat', + field=models.BooleanField(blank=True, default=False, help_text='lca-chat is a high-traffic mailing list used by attendees during the week of the conference for general discussion.', verbose_name='Subscribe to the chat mailing list'), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='of_legal_age', + field=models.BooleanField(blank=True, help_text='Being under 18 will not stop you from attending the conference. We need to know whether you are over 18 to allow us to cater for you at venues that serve alcohol.', verbose_name='Are you over 18?'), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='past_lca', + field=models.ManyToManyField(blank=True, to='pinaxcon_registrasion.PastEvent', verbose_name='Which past events have you attended?'), + ), + ] diff --git a/pinaxcon/registrasion/models.py b/pinaxcon/registrasion/models.py index 84d34c544018f0c28612084e2b53bd255d05c82a..53552d3cde0489c0c0ed8d50e68c7a08c10b6b6f 100644 --- a/pinaxcon/registrasion/models.py +++ b/pinaxcon/registrasion/models.py @@ -173,11 +173,11 @@ class AttendeeProfile(rego.AttendeeProfileBase): children = models.CharField( verbose_name="Child Ages and Information", max_length=256, - help_text="Linux.conf.au is a family friendly conference and provides " + help_text="Everything Open is a family friendly conference and provides " "free child-care for pre-school children from 6 months up to 5 years. We " "hope to also provide a programme for older children and will let you " - "know closer to the conference. If you're wanting to bring your children " - "to LCA, please let us know their age(s) so we can ensure we have " + "know closer to the conference. If you're wanting to bring your children, " + "please let us know their age(s) so we can ensure we have " "enough spaces available.", blank=True ) @@ -198,7 +198,7 @@ class AttendeeProfile(rego.AttendeeProfileBase): ) lca_chat = models.BooleanField( - verbose_name="Subscribe to the LCA chat list", + verbose_name="Subscribe to the chat mailing list", help_text="lca-chat is a high-traffic mailing list used by " "attendees during the week of the conference for general " "discussion.", @@ -217,7 +217,7 @@ class AttendeeProfile(rego.AttendeeProfileBase): past_lca = models.ManyToManyField( PastEvent, - verbose_name="Which past linux.conf.au events have you attended?", + verbose_name="Which past events have you attended?", blank=True, ) diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py index 8625343635c4559e89ff291b874f16a3d3a6ed4a..f6a94471b3b63e6c39f9fac1987b7bfb79c2481b 100644 --- a/pinaxcon/settings.py +++ b/pinaxcon/settings.py @@ -363,14 +363,8 @@ CONFERENCE_ID = 1 PROPOSAL_FORMS = { "talk": "pinaxcon.proposals.forms.TalkProposalForm", "tutorial": "pinaxcon.proposals.forms.TutorialProposalForm", - "miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm", - ### LCA2022 Miniconfs - "glam-community-miniconf": "pinaxcon.proposals.forms.GlamCommunityProposalForm", - "kernel-miniconf": "pinaxcon.proposals.forms.KernelProposalForm", - "open-hardware-miniconf": "pinaxcon.proposals.forms.OpenHardwareProposalForm", - "sysadmin-miniconf": "pinaxcon.proposals.forms.SysAdminProposalForm", } -MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk", "Miniconf") +MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",) # Registrasion bits: ATTENDEE_PROFILE_MODEL = "pinaxcon.registrasion.models.AttendeeProfile" @@ -455,7 +449,7 @@ SETTINGS_EXPORT = [ 'DEBUG', 'ANALYTICS_KEY', 'TIME_ZONE', - 'LCA_START', + 'CONF_START', 'CONFERENCE_EMAIL', ] @@ -518,17 +512,17 @@ class PenguinDinnerCat(Category): return t -CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'linux.conf.au') -CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'LCA') +CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'Everything Open') +CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'EO') CONFERENCE_EMAIL = os.environ.get('CONFERENCE_EMAIL', DEFAULT_FROM_EMAIL) -LCA_TZINFO = pytz.timezone(TIME_ZONE) -LCA_START = LCA_TZINFO.localize(datetime(2022, 1, 14)) -LCA_END = LCA_TZINFO.localize(datetime(2022, 1, 16)) -LCA_MINICONF_END = LCA_TZINFO.localize(datetime(2022, 1, 14, 23, 59)) -EARLY_BIRD_DEADLINE = LCA_TZINFO.localize(datetime(2022, 12, 1)) -PENGUIN_DINNER_TICKET_DATE = date(2022, 1, 14) -SPEAKER_DINNER_TICKET_DATE = date(2022, 1, 15) -PDNS_TICKET_DATE = date(2022, 1, 16) +CONF_TZINFO = pytz.timezone(TIME_ZONE) +CONF_START = CONF_TZINFO.localize(datetime(2023, 3, 14)) +CONF_END = CONF_TZINFO.localize(datetime(2023, 3, 16)) +CONF_MINICONF_END = CONF_TZINFO.localize(datetime(2023, 3, 14, 23, 59)) +EARLY_BIRD_DEADLINE = CONF_TZINFO.localize(datetime(2023, 1, 28)) +PENGUIN_DINNER_TICKET_DATE = date(2023, 3, 15) +SPEAKER_DINNER_TICKET_DATE = date(2023, 3, 14) +PDNS_TICKET_DATE = date(2023, 3, 16) TSHIRT_PRICE = Decimal("25.00") diff --git a/pinaxcon/templates/nav.html b/pinaxcon/templates/nav.html index ee9891cadeda30d2417091ea23d1f061c145c9b1..3d1c9647cdf415a6c051c8190ccb7472969f4df8 100644 --- a/pinaxcon/templates/nav.html +++ b/pinaxcon/templates/nav.html @@ -1,10 +1,10 @@ {% load sitetree %} {% load static %} -