LCA2022 Setup

Update dates and descriptions for LCA2022.
Remove old miniconf proposal types.
Add local timezone to speaker profile.
This commit is contained in:
Joel Addison 2021-07-05 20:20:24 +10:00
parent 734a0b713d
commit f72490b1eb
48 changed files with 148 additions and 1160 deletions

View file

@ -1,225 +1,56 @@
stages:
- build
- deploy
variables:
CONTAINER_IMAGE_2019: "asia.gcr.io/linuxconfsydney/symposion_app_2019"
CONTAINER_IMAGE_2020: "asia.gcr.io/linuxconfsydney/symposion_app_2020"
CONTAINER_IMAGE_2021: "asia.gcr.io/linuxconfsydney/symposion_app_2021"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
CONTAINER_PREFIX: 2022
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/$CONTAINER_PREFIX:$CI_COMMIT_SHA
build_image:
build-image:
image: docker:git
stage: build
services:
- docker:dind
script:
- docker build -f docker/Dockerfile -t asia.gcr.io/linuxconfsydney/symposion_app:$CI_COMMIT_SHA .
- docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA -f docker/Dockerfile.dev -t asia.gcr.io/linuxconfsydney/symposion_app_dev:$CI_COMMIT_SHA .
- docker login -u _json_key -p "$GOOGLE_KEY" https://asia.gcr.io
- docker push asia.gcr.io/linuxconfsydney/symposion_app:$CI_COMMIT_SHA
- docker push asia.gcr.io/linuxconfsydney/symposion_app_dev:$CI_COMMIT_SHA
- docker tag asia.gcr.io/linuxconfsydney/symposion_app:$CI_COMMIT_SHA asia.gcr.io/linuxconfsydney/symposion_app:latest
- docker tag asia.gcr.io/linuxconfsydney/symposion_app_dev:$CI_COMMIT_SHA asia.gcr.io/linuxconfsydney/symposion_app_dev:latest
- docker push asia.gcr.io/linuxconfsydney/symposion_app:latest
- docker push asia.gcr.io/linuxconfsydney/symposion_app_dev:latest
- apk update && apk add git
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build --pull -f docker/Dockerfile -t $CONTAINER_IMAGE .
- docker push $CONTAINER_IMAGE
only:
- master
- "2022"
k8s-prod-deploy:
k8s-deploy-staging:
image: google/cloud-sdk
stage: deploy
script:
- echo "$GOOGLE_KEY" > key.json
- gcloud auth activate-service-account --key-file key.json
- gcloud config set compute/zone australia-southeast1-b
- gcloud config set project linuxconfsydney
- gcloud config set container/use_client_certificate True
- gcloud container clusters get-credentials lca02
- kubectl --namespace=rego-prod set image deployment/symposion-app symposion-app=asia.gcr.io/linuxconfsydney/symposion_app:$CI_COMMIT_SHA
- 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 use-context cluster
- kubectl --token "${KUBE_TOKEN}" set image deployment/symposion-app symposion-app=$CONTAINER_IMAGE
when: manual
only:
- master
- dev/2022
environment:
name: 2019/prod
url: https://rego.linux.conf.au
name: 2022/staging
url: https://staging-lca2022.gc2020.org/
build_review_deployment:
image: docker:git
services:
- docker:dind
stage: build
script:
- docker run -v "${PWD}"/k8s:/src sparkprime/jsonnet /src/deployment_template.jsonnet --tla-str slug="${CI_COMMIT_REF_SLUG}" --tla-str sha="${CI_COMMIT_SHA}" -m /src
only:
- /^dev\/.*$/
artifacts:
paths:
- k8s/deployment.json
- k8s/ingress.json
- k8s/certificate.json
build_2021_image:
image: docker:git
stage: build
services:
- docker:dind
script:
- docker login -u _json_key -p "$GOOGLE_KEY" https://asia.gcr.io
- docker pull "${CONTAINER_IMAGE_2021}":latest || true
- docker build --cache-from "${CONTAINER_IMAGE_2021}":latest -f docker/Dockerfile -t "${CONTAINER_IMAGE_2021}":$CI_COMMIT_SHA .
- docker push "${CONTAINER_IMAGE_2021}":$CI_COMMIT_SHA
- docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA -f docker/Dockerfile.dev -t "${CONTAINER_IMAGE_2021}"_dev:$CI_COMMIT_SHA .
- docker push "${CONTAINER_IMAGE_2021}"_dev:$CI_COMMIT_SHA
- docker tag "${CONTAINER_IMAGE_2021}"_dev:$CI_COMMIT_SHA "${CONTAINER_IMAGE_2021}"_dev:$CI_COMMIT_REF_SLUG
- docker push "${CONTAINER_IMAGE_2021}"_dev:$CI_COMMIT_REF_SLUG
only:
- "2021"
build_2020_image:
image: docker:git
stage: build
services:
- docker:dind
script:
- docker login -u _json_key -p "$GOOGLE_KEY" https://asia.gcr.io
- docker pull "${CONTAINER_IMAGE_2020}":latest || true
- docker build --cache-from "${CONTAINER_IMAGE_2020}":latest -f docker/Dockerfile -t "${CONTAINER_IMAGE_2020}":$CI_COMMIT_SHA .
- docker push "${CONTAINER_IMAGE_2020}":$CI_COMMIT_SHA
- docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA -f docker/Dockerfile.dev -t "${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_SHA .
- docker push "${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_SHA
- docker tag "${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_SHA "${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_REF_SLUG
- docker push "${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_REF_SLUG
only:
- "2020"
2020-prod-deploy:
k8s-deploy-prod:
image: google/cloud-sdk
stage: deploy
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=lca2020-prod --user=gitlab-ci
- kubectl config set-context cluster --cluster=cluster --namespace=lca2022-prod --user=gitlab-ci
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${CONTAINER_IMAGE_2020}":$CI_COMMIT_SHA
only:
- "2020"
when: manual
environment:
name: 2020/prod
url: https://lca2020.linux.org.au
2019-prod-deploy:
image: google/cloud-sdk
stage: deploy
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=lca2019-prod --user=gitlab-ci
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${CONTAINER_IMAGE_2019}":$CI_COMMIT_SHA
only:
- "2019"
when: manual
environment:
name: 2019/prod
url: https://2019.linux.conf.au
2020_dev-deploy:
image: google/cloud-sdk
stage: deploy
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=rego-dev --user=gitlab-sa
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_SHA
only:
- dev/2020
environment:
name: 2020/dev
url: https://2020-dev.lca2019.org
2019_dev-deploy:
image: google/cloud-sdk
stage: deploy
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=rego-dev --user=gitlab-sa
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${CONTAINER_IMAGE_2019}"_dev:$CI_COMMIT_SHA
only:
- dev/2019
environment:
name: 2019/dev
url: https://dev.lca2019.org
2019_review-deploy:
image: google/cloud-sdk
stage: deploy
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=rego-review --user=rego-dev/gitlab-sa
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" apply -f k8s/deployment.json
- kubectl --token "${GL_KUBE_TOKEN}" apply -f k8s/ingress.json
- kubectl --token "${GL_KUBE_TOKEN}" apply -f k8s/certificate.json
only:
- /^dev\/.*$/
environment:
name: 2019/dev/${CI_COMMIT_REF_SLUG}
url: https://${CI_COMMIT_REF_SLUG}.dev.lca2019.org
on_stop: 2019_review-stop-deploy
2019_review-stop-deploy:
image: google/cloud-sdk
stage: deploy
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=rego-review --user=rego-dev/gitlab-sa
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" delete -f k8s/deployment.json
- kubectl --token "${GL_KUBE_TOKEN}" delete -f k8s/ingress.json
- kubectl --token "${GL_KUBE_TOKEN}" delete -f k8s/certificate.json
only:
- /^dev\/.*$/
when: manual
environment:
name: 2019/dev/${CI_COMMIT_REF_SLUG}
url: https://${CI_COMMIT_REF_SLUG}.dev.lca2019.org
action: stop
2020_staging-deploy:
image: google/cloud-sdk
stage: deploy
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=lca2020-staging --user=gitlab-ci
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${CONTAINER_IMAGE_2020}"_dev:$CI_COMMIT_SHA
- kubectl --token "${KUBE_TOKEN}" set image deployment/symposion-app symposion-app=$CONTAINER_IMAGE
when: manual
only:
- dev/2020
- "2022"
environment:
name: 2020/staging
url: https://staging2020.lca2019.org
2019_staging-deploy:
image: google/cloud-sdk
stage: deploy
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=lca2019-staging --user=gitlab-ci
- kubectl config use-context cluster
- kubectl --token "${GL_KUBE_TOKEN}" set image deployment/symposion-app symposion-app="${CONTAINER_IMAGE_2019}"_dev:$CI_COMMIT_SHA
when: manual
only:
- dev/2019
environment:
name: 2019/staging
url: https://staging.lca2019.org
name: 2022/prod
url: https://lca2022.linux.org.au
.docs_template: &sphinx
image: alpine
@ -238,7 +69,7 @@ pages:
<<: *sphinx
only:
- master
- "2021"
- "2022"
environment:
name: docs
url: https://laconfdev.gitlab.io/symposion_app/

View file

@ -1,4 +1,4 @@
ARG CI_COMMIT_SHA
FROM asia.gcr.io/linuxconfsydney/symposion_app_2021:$CI_COMMIT_SHA
ARG $CONTAINER_IMAGE
FROM $CONTAINER_IMAGE
CMD ["/app/symposion_app/docker/deploy_with_sqlite.sh"]

View file

@ -6,8 +6,8 @@
"conference": 1,
"name": "Main Conference",
"slug": "main",
"start_date": "2021-01-23",
"end_date": "2021-01-25"
"start_date": "2022-01-14",
"end_date": "2022-01-16"
}
},
{

View file

@ -4,8 +4,8 @@
"pk": 1,
"fields": {
"section": 1,
"start": "2020-10-06T12:00:00Z",
"end": "2020-11-01T12:00:00Z",
"start": "2021-08-01T12:00:00Z",
"end": "2021-09-01T12:00:00Z",
"closed": false,
"published": true
}
@ -15,8 +15,8 @@
"pk": 2,
"fields": {
"section": 2,
"start": "2020-10-06T12:00:00Z",
"end": "2020-11-01T12:00:00Z",
"start": "2021-07-05T12:00:00Z",
"end": "2021-08-01T12:00:00Z",
"closed": false,
"published": true
}

View file

@ -4,8 +4,8 @@
"pk": 1,
"fields": {
"slug": "main-proposals",
"name": "linux.conf.au 2021 Sessions Team",
"description": "Team looking after the linux.conf.au 2021 Call for Sessions",
"name": "linux.conf.au Sessions Team",
"description": "Team looking after the linux.conf.au Call for Sessions",
"access": "invitation",
"created": "2019-06-23T08:16:34.032Z",
"permissions": [
@ -38,9 +38,9 @@
"model": "teams.team",
"pk": 2,
"fields": {
"slug": "lca2021-organising-team",
"name": "linux.conf.au 2021 Organising Team",
"description": "The organising team for linux.conf.au 2021",
"slug": "organising-team",
"name": "linux.conf.au Organising Team",
"description": "The organising team for linux.conf.au",
"access": "invitation",
"created": "2019-08-26T22:59:09.265Z",
"permissions": [

View file

@ -3,10 +3,10 @@
"model": "symposion_conference.conference",
"pk": 1,
"fields": {
"title": "linux.conf.au 2021",
"start_date": "2021-01-23",
"end_date": "2021-01-25",
"timezone": "Australia/Brisbane"
"title": "linux.conf.au 2022",
"start_date": "2022-01-14",
"end_date": "2022-01-16",
"timezone": "Australia/Canberra"
}
}
]

View file

@ -3,8 +3,8 @@
"model": "sites.site",
"pk": 1,
"fields": {
"domain": "lca2021.linux.org.au",
"name": "linux.conf.au 2021"
"domain": "lca2022.linux.org.au",
"name": "linux.conf.au 2022"
}
}
]

View file

@ -131,7 +131,7 @@
"model": "sitetree.treeitem",
"pk": 6,
"fields": {
"title": "About LCA2021",
"title": "About LCA2022",
"hint": "",
"url": "/about/",
"urlaspattern": false,

View file

@ -121,7 +121,7 @@ function (slug, sha) {
"value": "UA-000000000-1"
}
],
"image": "asia.gcr.io/linuxconfsydney/symposion_app_2021_dev:" + sha,
"image": "asia.gcr.io/linuxconfsydney/symposion_app_2022_dev:" + sha,
"imagePullPolicy": "Always",
"livenessProbe": {
"failureThreshold": 3,

View file

@ -8,6 +8,12 @@ if [ -e ./symposion-tools ]; then
popd
fi
# Check for docker running
if ! docker info >/dev/null 2>&1; then
echo "Docker does not seem to be running. Please start it and retry."
exit 1
fi
docker image build -f docker/Dockerfile -t ${IMAGE_NAME} --target symposion_dev .
docker container stop symposion
docker container rm symposion
@ -39,4 +45,3 @@ echo "Username: admin1 Password: the one you just typed twice"
echo "If you need to test as a non-admin user, create one at"
echo "http://localhost:28000/admin/auth/user/add/ - then log out"
echo "and log back in at http://localhost:28000"

View file

@ -24,11 +24,7 @@ models_to_register = [
models.TalkProposal,
models.TutorialProposal,
models.MiniconfProposal,
### LCA2021 Miniconfs
models.GlamProposal,
models.KernelProposal,
models.OpenHardwareProposal,
models.SysAdminProposal,
### LCA2022 Miniconfs
]
for model in models_to_register:

View file

@ -14,13 +14,14 @@ DEFAULT_FIELDS = [
"technical_requirements",
"project",
"project_url",
"video_url",
"recording_release",
"materials_release",
]
TALK_FORMAT_FIELDS = copy.copy(DEFAULT_FIELDS)
TALK_FORMAT_FIELDS.insert(2, "talk_format")
TALK_FORMAT_FIELDS.append("ticket_acknowledgement")
MINICONF_SESSION_FORMAT_FIELDS = copy.copy(DEFAULT_FIELDS)
MINICONF_SESSION_FORMAT_FIELDS.insert(2, "talk_format")
MINICONF_SESSION_FORMAT_FIELDS.append("ticket_acknowledgement")
class ProposalForm(forms.ModelForm):
@ -39,36 +40,14 @@ class TalkProposalForm(ProposalForm):
class Meta:
model = models.TalkProposal
fields = [
"title",
"target_audience",
"abstract",
"private_abstract",
"technical_requirements",
"project",
"project_url",
"video_url",
"recording_release",
"materials_release",
]
fields = copy.copy(DEFAULT_FIELDS)
class TutorialProposalForm(ProposalForm):
class Meta:
model = models.TutorialProposal
fields = [
"title",
"target_audience",
"abstract",
"private_abstract",
"technical_requirements",
"project",
"project_url",
"video_url",
"recording_release",
"materials_release",
]
fields = copy.copy(DEFAULT_FIELDS)
class MiniconfProposalForm(ProposalForm):
@ -84,55 +63,10 @@ class MiniconfProposalForm(ProposalForm):
"materials_release",
]
### LCA2020 Miniconfs
### LCA2022 Miniconfs
class MiniconfSessionProposalForm(ProposalForm):
def __init__(self, *a, **k):
super(MiniconfSessionProposalForm, self).__init__(*a, **k)
self.fields['ticket_acknowledgement'].required = True
GLAM_FIELDS = copy.copy(TALK_FORMAT_FIELDS)
GLAM_FIELDS.insert(3, "require_approval")
class GlamProposalForm(MiniconfSessionProposalForm):
class Meta:
model = models.GlamProposal
fields = GLAM_FIELDS
class KernelProposalForm(MiniconfSessionProposalForm):
class Meta:
model = models.KernelProposal
fields = TALK_FORMAT_FIELDS
HARDWARE_FIELDS = copy.copy(TALK_FORMAT_FIELDS)
HARDWARE_FIELDS.insert(3, "experience_level")
class OpenHardwareProposalForm(MiniconfSessionProposalForm):
def __init__(self, *a, **k):
super(OpenHardwareProposalForm, self).__init__(*a, **k)
self.fields['experience_level'].required = True
class Meta:
model = models.OpenHardwareProposal
fields = HARDWARE_FIELDS
SYSADMIN_FIELDS = copy.copy(TALK_FORMAT_FIELDS)
SYSADMIN_FIELDS.insert(3, "local_timezone")
SYSADMIN_FIELDS.insert(4, "tech_check")
class SysAdminProposalForm(MiniconfSessionProposalForm):
class Meta:
model = models.SysAdminProposal
fields = SYSADMIN_FIELDS

View file

@ -1,72 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-09-20 12:58
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('symposion_proposals', '0003_auto_20170702_2250'),
('proposals', '0003_auto_20170702_2227'),
]
operations = [
migrations.CreateModel(
name='GamesProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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, 'Presentation'), (2, 'Demonstration'), (3, 'Other')])),
],
options={
'verbose_name': 'Games and FOSS Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
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')),
('target_audience', models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Kernel Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='OpenHardwareProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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, 'Presentation (20 min)'), (2, 'Lightning Talk (5 min)')])),
],
options={
'verbose_name': 'Open Hardware Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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, 'Short Presentation (15-25 min)'), (2, 'Lightning Talk (5-10 min)')], help_text='Please indicate your preferred talk length in the private abstract field below.')),
],
options={
'verbose_name': 'System Administration Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
]

View file

@ -1,121 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-09-22 05:43
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('symposion_proposals', '0003_auto_20170702_2250'),
('proposals', '0004_gamesproposal_kernelproposal_openhardwareproposal_sysadminproposal'),
]
operations = [
migrations.CreateModel(
name='ArtTechProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Art+Tech Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='BioInformaticsProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Open Source and BioInformatics Miniconf',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='ClsXLCAProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'CLSxLCA Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='DevDevProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Developers Developers Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='FPGAProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'FPGA Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='FuncProgProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Real World Functional Programming Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='OpenEdProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Open Education Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='OpenGLAMProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'OpenGLAM Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
]

View file

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-10-15 11:27
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
replaces = [('proposals', '0006_auto_20171015_1908'), ('proposals', '0007_auto_20171015_1918')]
dependencies = [
('proposals', '0005_arttechproposal_bioinformaticsproposal_clsxlcaproposal_devdevproposal_fpgaproposal_funcprogproposal_'),
]
operations = [
migrations.AddField(
model_name='arttechproposal',
name='can_exhibit',
field=models.IntegerField(choices=[(1, 'I am willing and able to exhibit my project on Monday, January 22nd'), (2, "I'm unable to exhibit my project")], default=1),
),
migrations.AddField(
model_name='arttechproposal',
name='exhibition_requirements',
field=models.TextField(blank=True, default=''),
),
migrations.AddField(
model_name='arttechproposal',
name='talk_format',
field=models.IntegerField(choices=[(1, 'Tech talk (45 min)'), (2, 'Demonstration (20min)'), (3, 'Lightning Talk (10min)')], default=1),
),
]

View file

@ -1,27 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-10-23 10:18
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
replaces = [('proposals', '0007_auto_20171023_2113'), ('proposals', '0008_auto_20171023_2114')]
dependencies = [
('proposals', '0006_auto_20171015_1908_squashed_0007_auto_20171015_1918'),
]
operations = [
migrations.AlterField(
model_name='arttechproposal',
name='target_audience',
field=models.IntegerField(choices=[(1, 'N/A')]),
),
migrations.AlterField(
model_name='arttechproposal',
name='target_audience',
field=models.IntegerField(choices=[(1, 'N/A')], default=1),
),
]

View file

@ -1,53 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-09-29 05:55
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('symposion_proposals', '0003_auto_20170702_2250'),
('symposion_reviews', '0001_initial'),
('symposion_schedule', '0007_auto_20161224_1709'),
('proposals', '0007_auto_20171023_2113_squashed_0008_auto_20171023_2114'),
]
operations = [
migrations.RemoveField(
model_name='bioinformaticsproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='clsxlcaproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='fpgaproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='funcprogproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='openglamproposal',
name='proposalbase_ptr',
),
migrations.DeleteModel(
name='BioInformaticsProposal',
),
migrations.DeleteModel(
name='ClsXLCAProposal',
),
migrations.DeleteModel(
name='FPGAProposal',
),
migrations.DeleteModel(
name='FuncProgProposal',
),
migrations.DeleteModel(
name='OpenGLAMProposal',
),
]

View file

@ -1,31 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-03 08:19
from __future__ import unicode_literals
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_20180929_1555'),
]
operations = [
migrations.CreateModel(
name='DocsProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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, 'Presentation (40-45 min)'), (2, 'Short Presentation (20-30 min)'), (3, 'Lightning Talk (5-10 min)')], help_text='Please indicate your preferred talk length in the private abstract field below.')),
],
options={
'verbose_name': 'Docs Down Under Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
]

View file

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-05 19:42
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0009_docsproposal'),
]
operations = [
migrations.AlterField(
model_name='gamesproposal',
name='talk_format',
field=models.IntegerField(choices=[(1, 'Presentation (long)'), (1, 'Presentation (short)'), (3, 'Demonstration'), (4, 'Other')]),
),
]

View file

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-18 07:18
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0010_auto_20181006_0542'),
]
operations = [
migrations.AddField(
model_name='kernelproposal',
name='talk_format',
field=models.IntegerField(choices=[(1, 'Presentation (40-45 min)'), (2, 'Short Presentation (20-30 min)')], default=1, help_text='Please indicate your preferred talk length in the private abstract field below.'),
),
migrations.AlterField(
model_name='docsproposal',
name='target_audience',
field=models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer'), (4, 'Writer')], default=1),
),
]

View file

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-18 07:30
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0011_auto_20181018_1818'),
]
operations = [
migrations.AlterField(
model_name='arttechproposal',
name='can_exhibit',
field=models.IntegerField(choices=[(1, 'I am willing and able to exhibit my project on Thursday, January 24th'), (2, "I'm unable to exhibit my project")], default=1),
),
]

View file

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-23 08:14
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0012_auto_20181018_1830'),
]
operations = [
migrations.AddField(
model_name='openedproposal',
name='talk_format',
field=models.IntegerField(choices=[(1, 'Presentation (40-45 min)'), (2, 'Short Presentation (20-30 min)'), (3, 'Lightning Talk (5-10 min)')], default=1, help_text='Please indicate your preferred talk length in the private abstract field below.'),
preserve_default=False,
),
migrations.AlterField(
model_name='openedproposal',
name='target_audience',
field=models.IntegerField(blank=True, null=True),
),
]

View file

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-24 07:02
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('symposion_proposals', '0003_auto_20170702_2250'),
('proposals', '0013_auto_20181023_1914'),
]
operations = [
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')),
('target_audience', models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
],
options={
'verbose_name': 'Security, Identity and Privacy Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
]

View file

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.15 on 2018-10-24 07:13
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0014_securityproposal'),
]
operations = [
migrations.AddField(
model_name='securityproposal',
name='talk_format',
field=models.IntegerField(choices=[(1, 'Presentation (40-45 min)'), (2, 'Short Presentation (20-30 min)'), (3, 'Lightning Talk (5-10 min)')], default=1, help_text='Please indicate your preferred talk length in the private abstract field below.'),
preserve_default=False,
),
]

View file

@ -1,81 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-06-24 11:28
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('symposion_schedule', '0008_auto_20190122_0815'),
('symposion_proposals', '0003_auto_20170702_2250'),
('symposion_reviews', '0001_initial'),
('proposals', '0015_securityproposal_talk_format'),
]
operations = [
migrations.RemoveField(
model_name='arttechproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='devdevproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='docsproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='gamesproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='kernelproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='openedproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='openhardwareproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='securityproposal',
name='proposalbase_ptr',
),
migrations.RemoveField(
model_name='sysadminproposal',
name='proposalbase_ptr',
),
migrations.DeleteModel(
name='ArtTechProposal',
),
migrations.DeleteModel(
name='DevDevProposal',
),
migrations.DeleteModel(
name='DocsProposal',
),
migrations.DeleteModel(
name='GamesProposal',
),
migrations.DeleteModel(
name='KernelProposal',
),
migrations.DeleteModel(
name='OpenEdProposal',
),
migrations.DeleteModel(
name='OpenHardwareProposal',
),
migrations.DeleteModel(
name='SecurityProposal',
),
migrations.DeleteModel(
name='SysAdminProposal',
),
]

View file

@ -1,77 +0,0 @@
# Generated by Django 2.2.17 on 2020-11-23 10:16
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('symposion_proposals', '0003_auto_20170702_2250'),
('proposals', '0016_auto_20190624_2328'),
]
operations = [
migrations.CreateModel(
name='GlamProposal',
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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, 'Short Presentation (15 or 20 min)'), (2, 'Long Presentation (45 min)')], default=2, 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 as linux.conf.au miniconfs are unfunded community run events.')),
('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={
'verbose_name': 'GO GLAM Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
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')),
('target_audience', models.IntegerField(choices=[(1, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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, 'Short Presentation (15 or 20 min)'), (2, 'Long Presentation (45 min)')], default=2, 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 as linux.conf.au miniconfs are unfunded community run events.')),
],
options={
'verbose_name': 'Kernel Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
migrations.CreateModel(
name='OpenHardwareProposal',
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')),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.')),
('target_audience', models.IntegerField(choices=[(1, 'Hardware'), (2, 'Firmware'), (3, 'Community'), (4, 'Other')], help_text='What is the main focus for your session? If Other, please provide detail in the private abstract.')),
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at? Note: We are aiming for a range of session skill levels.')),
('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=('symposion_proposals.proposalbase',),
),
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, 'User'), (2, 'Business'), (3, 'Community'), (4, 'Developer')])),
('recording_release', models.BooleanField(default=True, help_text="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="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>")),
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.')),
('talk_format', models.IntegerField(choices=[(1, 'Short Presentation (15 or 20 min)')], default=1, help_text='Talks at the System Administration Miniconf will be short presentations.')),
],
options={
'verbose_name': 'System Administration Miniconf Proposal',
},
bases=('symposion_proposals.proposalbase',),
),
]

View file

@ -1,43 +0,0 @@
# Generated by Django 2.2.17 on 2020-11-23 13:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0017_lca2021_miniconfs'),
]
operations = [
migrations.AddField(
model_name='sysadminproposal',
name='local_timezone',
field=models.CharField(default='', help_text='What is your local timezone that you will be presenting from?', max_length=100),
),
migrations.AddField(
model_name='sysadminproposal',
name='tech_check',
field=models.BooleanField(default=False, help_text="Will you be available for an 'AV Tech Check' on 5 January 2021?", verbose_name='AV Tech Check'),
),
migrations.AlterField(
model_name='glamproposal',
name='ticket_acknowledgement',
field=models.BooleanField(default=False, help_text='I understand that I may be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.'),
),
migrations.AlterField(
model_name='kernelproposal',
name='ticket_acknowledgement',
field=models.BooleanField(default=False, help_text='I understand that I may be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.'),
),
migrations.AlterField(
model_name='openhardwareproposal',
name='ticket_acknowledgement',
field=models.BooleanField(default=False, help_text='I understand that I may be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.'),
),
migrations.AlterField(
model_name='sysadminproposal',
name='ticket_acknowledgement',
field=models.BooleanField(default=False, help_text='I understand that I may be required to purchase a conference ticket as linux.conf.au miniconfs are unfunded community run events.'),
),
]

View file

@ -85,114 +85,3 @@ class MiniconfSessionProposal(Proposal):
class Meta:
abstract = True
class GlamProposal(MiniconfSessionProposal):
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?"
)
@property
def is_glam_miniconf(self):
return True
class Meta:
verbose_name = "GO GLAM Miniconf Proposal"
class KernelProposal(MiniconfSessionProposal):
class Meta:
verbose_name = "Kernel Miniconf Proposal"
class OpenHardwareProposal(MiniconfSessionProposal):
TARGET_HARDWARE = 1
TARGET_FIRMWARE = 2
TARGET_COMMUNITY = 3
TARGET_OTHER = 4
TARGET_AUDIENCES = [
(TARGET_HARDWARE, "Hardware"),
(TARGET_FIRMWARE, "Firmware"),
(TARGET_COMMUNITY, "Community"),
(TARGET_OTHER, "Other"),
]
LEVEL_BEGINNER = 1
LEVEL_INTERMEDIATE = 2
LEVEL_ADVANCED = 3
EXPERIENCE_LEVEL = [
(LEVEL_BEGINNER, "Beginner"),
(LEVEL_INTERMEDIATE, "Intermediate"),
(LEVEL_ADVANCED, "Advanced"),
]
FORMAT_PRESENTATION = 1
FORMAT_TUTORIAL = 2
FORMAT_HANDS_ON = 3
TALK_FORMATS = [
(FORMAT_PRESENTATION, "Presentation"),
(FORMAT_TUTORIAL, "Tutorial"),
(FORMAT_HANDS_ON, "Hands-on"),
]
target_audience = models.IntegerField(
choices=TARGET_AUDIENCES,
help_text="What is the main focus for your session? If Other, please provide detail in the private abstract.",
)
experience_level = models.IntegerField(
choices=EXPERIENCE_LEVEL,
help_text="What level of experience will your session be pitched at? Note: We are aiming for a range of session skill levels."
)
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 Meta:
verbose_name = "Open Hardware Miniconf Proposal"
class SysAdminProposal(MiniconfSessionProposal):
FORMAT_SHORT_PRESENTATION = 1
TALK_FORMATS = [
(FORMAT_SHORT_PRESENTATION, "Short Presentation (15 or 20 min)"),
]
talk_format = models.IntegerField(
choices=TALK_FORMATS,
default=FORMAT_SHORT_PRESENTATION,
help_text="Talks at the System Administration Miniconf will be short presentations."
)
local_timezone = models.CharField(
max_length=100,
blank=False,
default="",
help_text="What is your local timezone that you will be presenting from?"
)
tech_check = models.BooleanField(
"AV Tech Check",
default=False,
help_text="Will you be available for an 'AV Tech Check' on 5 January 2021?"
)
@property
def is_sysadmin_miniconf(self):
return True
class Meta:
verbose_name = "System Administration Miniconf Proposal"

View file

@ -159,7 +159,7 @@ class Command(BaseCommand):
name="Swag Badge",
description="We have a limited number of "
"<a href=\"/attend/shirts/\">Swag Badges</a> available "
"for attendees of linux.conf.au 2021. "
f"for attendees of {settings.CONFERENCE_NAME}. "
"They will be allocated on a first come, first serve basis. "
"Please note that they are only available to Australian "
"attendees due to shipping limitations.",

View file

@ -29,6 +29,7 @@ _PAST_EVENTS = (
(2018, "2018 Sydney"),
(2019, "2019 Christchurch"),
(2020, "2020 Gold Coast"),
(2021, "2021 Online"),
)

View file

@ -151,7 +151,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
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.",
blank=True, # LCA2021 - not needed.
blank=True, # LCA2022 - not needed.
default=False,
)
dietary_restrictions = models.CharField(

View file

@ -125,7 +125,7 @@ else:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '*']
TIME_ZONE = "Australia/Melbourne"
TIME_ZONE = "Australia/Canberra"
DATE_FORMAT = "j F Y"
LANGUAGE_CODE = "en-au"
@ -229,6 +229,7 @@ INSTALLED_APPS = [
"sitetree",
"django_jsonfield_backport",
"pinax.eventlog",
"timezone_field",
# symposion
"symposion",
@ -363,11 +364,7 @@ PROPOSAL_FORMS = {
"talk": "pinaxcon.proposals.forms.TalkProposalForm",
"tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
"miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm",
### LCA2021 Miniconfs
"glam-miniconf": "pinaxcon.proposals.forms.GlamProposalForm",
"kernel-miniconf": "pinaxcon.proposals.forms.KernelProposalForm",
"open-hardware-miniconf": "pinaxcon.proposals.forms.OpenHardwareProposalForm",
"sysadmin-miniconf": "pinaxcon.proposals.forms.SysAdminProposalForm",
### LCA2022 Miniconfs
}
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk", "Miniconf")
@ -455,6 +452,7 @@ SETTINGS_EXPORT = [
'ANALYTICS_KEY',
'TIME_ZONE',
'LCA_START',
'CONFERENCE_EMAIL',
]
if DEV_MODE and DEV_MODE == "LAPTOP":
@ -516,14 +514,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_EMAIL = os.environ.get('CONFERENCE_EMAIL', DEFAULT_FROM_EMAIL)
LCA_TZINFO = pytz.timezone(TIME_ZONE)
LCA_START = LCA_TZINFO.localize(datetime(2021, 1, 23))
LCA_END = LCA_TZINFO.localize(datetime(2021, 1, 25))
LCA_MINICONF_END = LCA_TZINFO.localize(datetime(2021, 1, 23, 23, 59))
EARLY_BIRD_DEADLINE = LCA_TZINFO.localize(datetime(2020, 12, 1))
PENGUIN_DINNER_TICKET_DATE = date(2021, 1, 23)
SPEAKER_DINNER_TICKET_DATE = date(2021, 1, 25)
PDNS_TICKET_DATE = date(2021, 1, 24)
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)
TSHIRT_PRICE = Decimal("25.00")

View file

@ -1,10 +1,10 @@
{% load sitetree %}
{% load static %}
<nav class="navbar navbar-expand-lg navbar-light bg-dawn-sea">
<nav class="navbar navbar-expand-lg navbar-light bg-blaze">
<div class="container">
<a class="navbar-brand" href="/">
<img src="{% static 'lca/lca2021.svg' %}" alt="linux.conf.au 2021 logo" height="56px">
<img src="{% static 'lca/lca2022.svg' %}" alt="linux.conf.au 2022 logo" height="56px">
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">

View file

@ -6,7 +6,7 @@
<h4>ABN 56 987 117 479</h4>
<p>
Enquiries: please e-mail <a href="mailto:contact@lca2021.linux.org.au">contact@lca2021.linux.org.au</a>
Enquiries: please e-mail <a href="mailto:{{ settings.CONFERENCE_EMAIL }}">{{ settings.CONFERENCE_EMAIL }}</a>
</p>
<ul class="list-unstyled">

View file

@ -21,7 +21,7 @@
<!-- Cards -->
<meta property="og:title" content="{{ head_title }}">
<meta property="og:description" content="linux.conf.au 2021 - Jan 23-25 2021, Online, Worldwide" />
<meta property="og:description" content="linux.conf.au 2022 - Jan 14-16 2022, Online, Worldwide" />
<meta property="og:url" content="{{ request.scheme }}://{{ request.get_host }}{{ request.path }}">
<meta name="twitter:site" content="@linuxconfau">
<meta name="twitter:image:alt" content="{{ head_title }}" />
@ -101,7 +101,6 @@
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ settings.ANALYTICS_KEY }}');
</script>
{% else %}
@ -122,10 +121,10 @@
<div class="container py-4">
<div class="row">
<div class="col-md-4 pb-4">
<strong>linux.conf.au 2021</strong> <br>
Jan 23-25 2021 <br>
<strong>linux.conf.au 2022</strong> <br>
Jan 14-16 2022 <br>
Online, Worldwide <br>
<a href="mailto:contact@lca2021.linux.org.au" alt="Email"><i class="far fa-envelope"></i></a>&nbsp;&nbsp;
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="far fa-envelope"></i></a>&nbsp;&nbsp;
<a href="https://twitter.com/linuxconfau" alt="Twitter"><i class="fab fa-twitter"></i></a>&nbsp;&nbsp;
<a href="https://www.facebook.com/linuxconferenceaustralia/" alt="Facebook"><i class="fab fa-facebook"></i></a>
</div>
@ -136,7 +135,7 @@
<div class="col-md-4 pb-4 text-right">
<small>
<a href="#">Back to top</a><br>
&copy; 2020 linux.conf.au and <a href="http://linux.org.au/">Linux Australia</a><br>
&copy; 2021 linux.conf.au and <a href="http://linux.org.au/">Linux Australia</a><br>
Linux is a registered trademark of Linus Torvalds <br>
<a href="/colophon/">Colophon</a>
</small>

View file

@ -57,35 +57,6 @@
</div>
{% endif %}
{% if proposal.is_glam_miniconf %}
<div class="row">
<label class="list-label col-md-2">Requires Approval</label>
<div class="col-md-10">
<p>{{ proposal.require_approval }}&nbsp;</p>
</div>
</div>
{% endif %}
{% if proposal.is_sysadmin_miniconf %}
<div class="row">
<label class="list-label col-md-2">AV Tech Check on 5 Jan 2021</label>
<div class="col-md-10">
<p>{{ proposal.tech_check }}&nbsp;</p>
</div>
</div>
<div class="row">
<label class="list-label col-md-2">Local Timezone</label>
<div class="col-md-10">
{% if proposal.local_timezone %}
<p>{{ proposal.local_timezone|safe }}&nbsp;</p>
{% else %}
<p><b>None Provided</b></p>
{% endif %}
</div>
</div>
{% endif %}
{% if proposal.additional_speakers.all %}
<div class="row">
<label class="list-label col-md-2">Additional Speakers</label>
@ -200,11 +171,19 @@
{% for speaker in proposal.speakers %}
{% if speaker.name %}
<div class="card card-default my-3">
<div class="card-header">
<h3 class="card-title">{{ speaker.name }}</h3>
</div>
<div class="card my-3">
<h4 class="card-header">{{ speaker.name }}</h4>
<div class="card-body">
<div class="row">
<label class="list-label col-md-2">Local Timezone</label>
<div class="col-md-10">
{% if speaker.local_timezone %}
{{ speaker.local_timezone|safe }}
{% else %}
<em>None Provided</em>
{% endif %}
</div>
</div>
<div class="row">
<label class="list-label col-md-2">Biography</label>
<div class="col-md-10 monospace-text">{{ speaker.biography_html|safe }}&nbsp;</div>

View file

@ -27,7 +27,7 @@ django-model-utils==4.0.0
django-reversion==3.0.8
django-sitetree==1.16.0
django-taggit==1.3.0
django-timezone-field==4.0
django-timezone-field==4.1.2
easy-thumbnails==2.7.0
bleach==3.2.1
pytz>=2020.1

View file

@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="220" height="56" viewBox="0 0 220 56"><path d="M44.15,47a7.72,7.72,0,0,1-2.94-2.87,8.31,8.31,0,0,1,0-8.16,7.58,7.58,0,0,1,2.94-2.87,9,9,0,0,1,8.38,0A7.65,7.65,0,0,1,55.47,36a8.39,8.39,0,0,1,0,8.2A7.56,7.56,0,0,1,52.53,47a8.92,8.92,0,0,1-8.38,0Zm7.77-.91a6.65,6.65,0,0,0,2.53-2.49,7.31,7.31,0,0,0,0-7.1A6.65,6.65,0,0,0,51.92,34a7.59,7.59,0,0,0-7.17,0,6.6,6.6,0,0,0-2.54,2.49,7.31,7.31,0,0,0,0,7.1,6.6,6.6,0,0,0,2.54,2.49,7.59,7.59,0,0,0,7.17,0Z" fill="#fff"/><path d="M73.38,32.17V48h-.95L61.68,34.24V48H60.53V32.17h1l10.73,13.7V32.17Z" fill="#fff"/><path d="M78.88,32.17H80V46.91h9.08v1H78.88Z" fill="#fff"/><path d="M92.06,32.17h1.15V48H92.06Z" fill="#fff"/><path d="M111.56,32.17V48h-1L99.86,34.24V48H98.71V32.17h1l10.73,13.7V32.17Z" fill="#fff"/><path d="M127.94,46.91v1H117.06V32.17h10.55v1h-9.4v6.22h8.4v1h-8.4v6.47Z" fill="#fff"/><path d="M144.82,46.91v1H134v-.82l6.67-6.62a9.41,9.41,0,0,0,1.77-2.24,4.45,4.45,0,0,0,.46-1.93,2.9,2.9,0,0,0-1-2.37,4.5,4.5,0,0,0-3-.85,6.9,6.9,0,0,0-2.6.45,5.06,5.06,0,0,0-1.93,1.37l-.81-.72a6,6,0,0,1,2.29-1.6,8.37,8.37,0,0,1,3.14-.56,5.67,5.67,0,0,1,3.7,1.12,3.77,3.77,0,0,1,1.37,3,5.23,5.23,0,0,1-.54,2.32,10.41,10.41,0,0,1-2,2.57l-5.81,5.79Z" fill="#010101"/><path d="M149.85,47.08a6.36,6.36,0,0,1-2.18-2.79,10.57,10.57,0,0,1-.78-4.23,10.63,10.63,0,0,1,.78-4.24A6.33,6.33,0,0,1,149.85,33a5.76,5.76,0,0,1,6.43,0,6.26,6.26,0,0,1,2.18,2.78,10.63,10.63,0,0,1,.78,4.24,10.57,10.57,0,0,1-.78,4.23,6.29,6.29,0,0,1-2.18,2.79,5.76,5.76,0,0,1-6.43,0Zm5.84-.9a5.31,5.31,0,0,0,1.77-2.39,10,10,0,0,0,.63-3.73,10,10,0,0,0-.63-3.73,5.26,5.26,0,0,0-1.77-2.39,4.61,4.61,0,0,0-5.25,0,5.26,5.26,0,0,0-1.77,2.39,10,10,0,0,0-.63,3.73,10,10,0,0,0,.63,3.73,5.31,5.31,0,0,0,1.77,2.39,4.61,4.61,0,0,0,5.25,0Z" fill="#010101"/><path d="M172.22,46.91v1H161.38v-.82l6.67-6.62a9.41,9.41,0,0,0,1.77-2.24,4.31,4.31,0,0,0,.46-1.93,2.92,2.92,0,0,0-1-2.37,4.53,4.53,0,0,0-3-.85,6.94,6.94,0,0,0-2.6.45,5,5,0,0,0-1.92,1.37l-.82-.72a6,6,0,0,1,2.29-1.6,8.37,8.37,0,0,1,3.14-.56,5.67,5.67,0,0,1,3.7,1.12,3.75,3.75,0,0,1,1.38,3,5.11,5.11,0,0,1-.55,2.32,10.33,10.33,0,0,1-2,2.57l-5.82,5.79Z" fill="#010101"/><path d="M178.35,32.17V48H177.2V33.21h-3.85v-1Z" fill="#010101"/><path d="M5.94,5.56H7.4V24.27H18.93v1.32h-13Z" fill="#fff"/><path d="M22.68,5.56h1.46v20H22.68Z" fill="#fff"/><path d="M47.43,5.56v20h-1.2L32.58,8.19v17.4H31.12v-20h1.23L46,23V5.56Z" fill="#fff"/><path d="M56.34,23.53q-2.1-2.21-2.1-6.44V5.56H55.7V17c0,2.46.56,4.31,1.68,5.53a6.34,6.34,0,0,0,4.9,1.83,6.3,6.3,0,0,0,4.86-1.83c1.13-1.22,1.69-3.07,1.69-5.53V5.56h1.46V17.09q0,4.23-2.12,6.44a7.82,7.82,0,0,1-5.92,2.2A7.77,7.77,0,0,1,56.34,23.53Z" fill="#fff"/><path d="M89.37,25.59l-6.89-9.27-6.87,9.27H73.89l7.7-10.33-7.15-9.7h1.71l6.38,8.61,6.38-8.61h1.63l-7.15,9.67,7.7,10.36Z" fill="#fff"/><path d="M97.62,24.42a9.68,9.68,0,0,1-3.71-3.64,10.05,10.05,0,0,1-1.36-5.21,10,10,0,0,1,1.36-5.2,9.68,9.68,0,0,1,3.71-3.64,10.83,10.83,0,0,1,5.31-1.31,11.08,11.08,0,0,1,4,.7,8.37,8.37,0,0,1,3.12,2.07l-.92,1A8.35,8.35,0,0,0,103,6.76a9.19,9.19,0,0,0-4.58,1.15,8.31,8.31,0,0,0-3.23,3.16A8.81,8.81,0,0,0,94,15.57a8.82,8.82,0,0,0,1.18,4.51,8.31,8.31,0,0,0,3.23,3.16A9.19,9.19,0,0,0,103,24.39,8.36,8.36,0,0,0,109.14,22l.92.95A8.53,8.53,0,0,1,106.92,25a11.09,11.09,0,0,1-4,.71A10.83,10.83,0,0,1,97.62,24.42Z" fill="#231f20"/><path d="M154.8,5.56v20h-1.2L140,8.19v17.4h-1.46v-20h1.23L153.34,23V5.56Z" fill="#231f20"/><path d="M163.24,6.88v8.55h10.67v1.32H163.24v8.84h-1.46v-20h13.39V6.88Z" fill="#231f20"/><path d="M191.25,20H179.63l-2.54,5.64h-1.58l9.22-20h1.45l9.22,20h-1.58Zm-.55-1.23L185.44,7.16l-5.23,11.56Z" fill="#fff"/><path d="M200.53,23.53q-2.1-2.21-2.1-6.44V5.56h1.46V17c0,2.46.56,4.31,1.69,5.53a7.41,7.41,0,0,0,9.75,0C212.46,21.34,213,19.49,213,17V5.56h1.46V17.09q0,4.23-2.12,6.44a9.05,9.05,0,0,1-11.83,0Z" fill="#fff"/><path d="M126.11,5.56a9.71,9.71,0,0,0-5.21.08A10.46,10.46,0,0,0,118,7l1,1a8.23,8.23,0,0,1,2.17-1,8.39,8.39,0,0,1,4.5,0,9.23,9.23,0,0,1,6.37,6.37,8.38,8.38,0,0,1,0,4.5,9.66,9.66,0,0,1-6.44,6.45,8.42,8.42,0,0,1-4.51,0,8.87,8.87,0,0,1-4-2.36,8.73,8.73,0,0,1-2.35-4,8.36,8.36,0,0,1,0-4.52,8.59,8.59,0,0,1,1-2.18l-1-1a10.17,10.17,0,0,0-1.33,2.88,9.84,9.84,0,0,0-.06,5.22A10,10,0,0,0,116,23a10,10,0,0,0,4.62,2.7,9.64,9.64,0,0,0,5.22-.06,10.67,10.67,0,0,0,4.71-2.82,10.88,10.88,0,0,0,2.83-4.69,9.71,9.71,0,0,0,.07-5.21,10.1,10.1,0,0,0-2.72-4.64A10.12,10.12,0,0,0,126.11,5.56Z" fill="#231f20"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="220" height="56" viewBox="0 0 220 56"><path d="M41.76,48.41a7.82,7.82,0,0,1-2.94-2.88,8.29,8.29,0,0,1,0-8.15,7.82,7.82,0,0,1,2.94-2.88,8.45,8.45,0,0,1,4.2-1,8.54,8.54,0,0,1,4.19,1,7.62,7.62,0,0,1,2.94,2.86,8.41,8.41,0,0,1,0,8.21,7.62,7.62,0,0,1-2.94,2.86,8.54,8.54,0,0,1-4.19,1A8.45,8.45,0,0,1,41.76,48.41Zm7.78-.91A6.65,6.65,0,0,0,52.06,45a7.22,7.22,0,0,0,0-7.09,6.65,6.65,0,0,0-2.52-2.5,7.18,7.18,0,0,0-3.58-.9,7.26,7.26,0,0,0-3.6.9,6.67,6.67,0,0,0-2.53,2.5,7.22,7.22,0,0,0,0,7.09,6.67,6.67,0,0,0,2.53,2.5,7.26,7.26,0,0,0,3.6.9A7.18,7.18,0,0,0,49.54,47.5Z" fill="#fff"/><path d="M71,33.57V49.34h-1L59.3,35.64v13.7H58.15V33.57h1l10.73,13.7V33.57Z" fill="#fff"/><path d="M76.49,33.57h1.15V48.31h9.09v1H76.49Z" fill="#fff"/><path d="M89.68,33.57h1.15V49.34H89.68Z" fill="#fff"/><path d="M109.17,33.57V49.34h-.94L97.48,35.64v13.7H96.33V33.57h1L108,47.27V33.57Z" fill="#fff"/><path d="M125.56,48.31v1H114.67V33.57h10.55v1h-9.4v6.22h8.41v1h-8.41v6.47Z" fill="#fff"/><path d="M142.82,47.75v1.4H132V48l6.4-6.27a8,8,0,0,0,1.64-2,3.89,3.89,0,0,0,.43-1.75,2.61,2.61,0,0,0-.93-2.13,4.21,4.21,0,0,0-2.68-.76,5.3,5.3,0,0,0-4.2,1.72l-1.12-1a6,6,0,0,1,2.3-1.63,8.28,8.28,0,0,1,3.16-.57,5.75,5.75,0,0,1,3.72,1.11,3.71,3.71,0,0,1,1.38,3.05,5.26,5.26,0,0,1-.53,2.29,9.59,9.59,0,0,1-2,2.53l-5.24,5.15Z" fill="#231f20"/><path d="M147.67,48.34a6.2,6.2,0,0,1-2.17-2.72,10.28,10.28,0,0,1-.78-4.17,10.26,10.26,0,0,1,.78-4.16,6.14,6.14,0,0,1,2.17-2.72,5.8,5.8,0,0,1,6.36,0,6.25,6.25,0,0,1,2.19,2.72,10.09,10.09,0,0,1,.79,4.16,10.11,10.11,0,0,1-.79,4.17A6.31,6.31,0,0,1,154,48.34a5.8,5.8,0,0,1-6.36,0Zm5.55-1.25a4.86,4.86,0,0,0,1.59-2.18,9.34,9.34,0,0,0,.58-3.46,9.32,9.32,0,0,0-.58-3.45,4.86,4.86,0,0,0-1.59-2.18,4.1,4.1,0,0,0-4.73,0,4.88,4.88,0,0,0-1.6,2.18,9.33,9.33,0,0,0-.57,3.45,9.35,9.35,0,0,0,.57,3.46,4.88,4.88,0,0,0,1.6,2.18,4.15,4.15,0,0,0,4.73,0Z" fill="#231f20"/><path d="M169.75,47.75v1.4H159V48l6.4-6.27a8.25,8.25,0,0,0,1.64-2,3.89,3.89,0,0,0,.43-1.75,2.58,2.58,0,0,0-.94-2.13,4.16,4.16,0,0,0-2.67-.76,5.3,5.3,0,0,0-4.2,1.72l-1.12-1a6,6,0,0,1,2.3-1.63,8.26,8.26,0,0,1,3.15-.57,5.76,5.76,0,0,1,3.73,1.11,3.71,3.71,0,0,1,1.38,3.05,5.26,5.26,0,0,1-.53,2.29,9.59,9.59,0,0,1-2,2.53l-5.24,5.15Z" fill="#231f20"/><path d="M182.25,47.75v1.4h-10.8V48l6.4-6.27a8.49,8.49,0,0,0,1.64-2,4,4,0,0,0,.43-1.75,2.61,2.61,0,0,0-.94-2.13,4.16,4.16,0,0,0-2.67-.76,5.31,5.31,0,0,0-4.21,1.72l-1.12-1a6,6,0,0,1,2.3-1.63,8.32,8.32,0,0,1,3.16-.57,5.78,5.78,0,0,1,3.73,1.11,3.73,3.73,0,0,1,1.37,3.05,5.25,5.25,0,0,1-.52,2.29,9.67,9.67,0,0,1-2,2.53l-5.23,5.15Z" fill="#231f20"/><path d="M5.73,6.86H7.19V25.57H18.72v1.32h-13Z" fill="#fff"/><path d="M22.47,6.86h1.46v20H22.47Z" fill="#fff"/><path d="M47.22,6.86v20H46L32.37,9.5V26.89H30.91v-20h1.23l13.62,17.4V6.86Z" fill="#fff"/><path d="M56.13,24.83c-1.4-1.47-2.1-3.61-2.1-6.44V6.86h1.45V18.34a7.93,7.93,0,0,0,1.69,5.52,6.34,6.34,0,0,0,4.89,1.83,6.3,6.3,0,0,0,4.87-1.83,7.93,7.93,0,0,0,1.69-5.52V6.86h1.46V18.39c0,2.83-.71,5-2.12,6.44A7.82,7.82,0,0,1,62,27,7.77,7.77,0,0,1,56.13,24.83Z" fill="#fff"/><path d="M89.16,26.89l-6.9-9.27L75.4,26.89H73.68l7.7-10.33-7.16-9.7h1.72l6.38,8.62L88.7,6.86h1.63l-7.15,9.67,7.69,10.36Z" fill="#fff"/><path d="M97.41,25.72a9.78,9.78,0,0,1-3.72-3.64,10.14,10.14,0,0,1-1.36-5.2,10.17,10.17,0,0,1,1.36-5.21A9.75,9.75,0,0,1,97.41,8a10.7,10.7,0,0,1,5.31-1.32,11,11,0,0,1,4,.7,8.19,8.19,0,0,1,3.12,2.08l-.91.94a8.4,8.4,0,0,0-6.15-2.37A9.29,9.29,0,0,0,98.2,9.21,8.38,8.38,0,0,0,95,12.37a8.75,8.75,0,0,0-1.18,4.51A8.69,8.69,0,0,0,95,21.38a8.31,8.31,0,0,0,3.23,3.16,9.19,9.19,0,0,0,4.58,1.15,8.39,8.39,0,0,0,6.15-2.4l.91.94a8.37,8.37,0,0,1-3.13,2.09,10.88,10.88,0,0,1-4,.71A10.69,10.69,0,0,1,97.41,25.72Z" fill="#231f20"/><path d="M154.59,6.86v20h-1.2L139.74,9.5V26.89h-1.46v-20h1.23l13.62,17.4V6.86Z" fill="#231f20"/><path d="M163,8.18v8.55H173.7v1.32H163v8.84h-1.46v-20H175V8.18Z" fill="#231f20"/><path d="M191,21.25H179.42l-2.55,5.64H175.3l9.21-20H186l9.22,20h-1.58ZM190.49,20,185.23,8.47,180,20Z" fill="#fff"/><path d="M200.32,24.83c-1.4-1.47-2.1-3.61-2.1-6.44V6.86h1.46V18.34q0,3.69,1.68,5.52a7.42,7.42,0,0,0,9.76,0q1.69-1.83,1.69-5.52V6.86h1.46V18.39c0,2.83-.71,5-2.12,6.44a9.05,9.05,0,0,1-11.83,0Z" fill="#fff"/><path d="M125.89,6.87a9.71,9.71,0,0,0-5.21.07,10.53,10.53,0,0,0-2.87,1.33l1,1a8.54,8.54,0,0,1,6.67-1,8.84,8.84,0,0,1,4,2.36,8.73,8.73,0,0,1,2.36,4,8.39,8.39,0,0,1,0,4.5,9.08,9.08,0,0,1-2.41,4,9.08,9.08,0,0,1-4,2.42,8.33,8.33,0,0,1-4.51,0,8.73,8.73,0,0,1-4-2.36,8.84,8.84,0,0,1-2.36-4,8.52,8.52,0,0,1,0-4.51,8.67,8.67,0,0,1,1-2.18l-1-1a10.17,10.17,0,0,0-1.33,2.88,9.84,9.84,0,0,0-.06,5.22,10,10,0,0,0,2.7,4.63,10.21,10.21,0,0,0,4.62,2.7,9.84,9.84,0,0,0,5.22-.06,10.76,10.76,0,0,0,4.7-2.83,10.8,10.8,0,0,0,2.84-4.69,9.71,9.71,0,0,0,.07-5.21,10.18,10.18,0,0,0-2.72-4.64A10.13,10.13,0,0,0,125.89,6.87Z" fill="#231f20"/></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -9,23 +9,25 @@ from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
def create_lca2018_template(apps, schema_editor):
def create_default_template(apps, schema_editor):
BoardingPassTemplate = apps.get_model("regidesk", "BoardingPassTemplate")
body = ("This is the plain text version of your boarding pass for "
"linux.conf.au 2021.\r\n\r\nWhen you check in at LCA, you'll "
f"{settings.CONFERENCE_NAME}.\r\n\r\n"
f"When you check in at {settings.CONFERENCE_NAME_SHORT}, you'll "
"need to show the QR code you can download from "
"{{ qrcode_url }}, or quote registration code: {{ code }} ")
html = ("<html>\r\n <body>\r\n <p>This is your boarding "
"pass</p>\r\n <p>A copy of the QR Code is required "
f"pass for {settings.CONFERENCE_NAME}</p>\r\n "
"<p>A copy of the QR Code is required "
"for check in, please bring this email on either your "
"phone or on a print out.</p>\r\n "
"<p><img src=\"data:image/png;base64,{{ qrcode }}\" /></p>\r\n"
" <p>Backup Code: {{ code }}</p>\r\n </body>\r\n</html>")
template = BoardingPassTemplate(label="LCA2021",
from_address="contact@lca2021.linux.org.au",
subject="Your boarding pass for LCA2021, "
template = BoardingPassTemplate(label=f"{settings.CONFERENCE_NAME_SHORT}",
from_address=settings.CONFERENCE_EMAIL,
subject=f"Your boarding pass for {settings.CONFERENCE_NAME}, "
"{{ user.attendee.attendeeprofilebase.attendeeprofile.name }}",
body=body,
html_body=html)
@ -94,6 +96,6 @@ class Migration(migrations.Migration):
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='regidesk.BoardingPassTemplate', verbose_name='Template'),
),
migrations.RunPython(
code=create_lca2018_template,
code=create_default_template,
),
]

View file

@ -36,7 +36,7 @@
<dt class="col-sm-3">Free Text 2</dt>
<dd class="col-sm-9">{{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_2 }}</dd>
{% comment "Not needed for LCA2021 online" %}
{% comment "Not needed for LCA2022 online" %}
<dt class="col-sm-3">Penguin Dinner Tickets</dt>
<dd class="col-sm-9">{{ penguin_dinner_count }}</dd>
@ -54,7 +54,7 @@
<dd class="col-sm-9">{{ user.username }}</dd>
</dl>
{% comment "Not needed for LCA2021 online" %}
{% comment "Not needed for LCA2022 online" %}
<h4>Shirts ordered</h4>
<table class="table card-text">
{% for shirt in shirts%}
@ -128,7 +128,7 @@
</div>
</div>
{% comment "Not needed for LCA2021 online" %}
{% comment "Not needed for LCA2022 online" %}
<div class="card {% if check_in.schwag_given %}border-success{% else %}border-danger{% endif %} my-3">
<div class="card-header {% if check_in.schwag_given %}text-white bg-success{% endif %}">Schwag</div>
<div class="card-body">
@ -155,7 +155,7 @@
</div>
</div>
{% comment "Not needed for LCA2021 online" %}
{% comment "Not needed for LCA2022 online" %}
<div class="card my-3 {% if check_in.checked_in_bool and check_in.schwag_given %}border-success{% elif check_in.checked_in_bool or check_in.schwag_given %}card-warning{% else %}card-danger{% endif %}">
<div class="card-header {% if check_in.checked_in_bool and check_in.schwag_given %}text-white bg-success{% elif check_in.checked_in_bool or check_in.schwag_given %}bg-warning{% endif %}">Bulk actions</div>
<div class="card-body">

View file

@ -348,7 +348,7 @@ def _guided_registration_profile_and_voucher(request):
title="Profile and Personal Information",
form=profile_form,
description=("<div class=\"text-info\"><em>You can come back and edit these details any time before "
"January 6 2021.</em></div>"),
"January 1 2022.</em></div>"),
)
return [voucher_section, profile_section]
@ -387,7 +387,7 @@ def edit_profile(request):
if request.user.checkin.checked_in_bool:
messages.add_message(
request, messages.ERROR,
'Profile cannot be edited. Please email contact@lca2021.linux.org.au '
f'Profile cannot be edited. Please email {settings.CONFERENCE_EMAIL} '
'if you need any changes to your profile.')
return redirect(reverse('dashboard'))

View file

@ -15,6 +15,7 @@ class SpeakerForm(forms.ModelForm):
"experience",
"photo",
#"telephone",
"local_timezone",
"homepage",
"twitter_username",
"accessibility",
@ -28,6 +29,7 @@ class SpeakerForm(forms.ModelForm):
super(SpeakerForm, self).__init__(*a, **k)
self.fields['agreement'].required = True
self.fields['biography'].required = True
self.fields['local_timezone'].required = True
def clean_twitter_username(self):
value = self.cleaned_data["twitter_username"]

View file

@ -0,0 +1,19 @@
# Generated by Django 2.2.17 on 2021-07-05 09:18
from django.db import migrations
import timezone_field.fields
class Migration(migrations.Migration):
dependencies = [
('symposion_speakers', '0009_auto_20201123_2256'),
]
operations = [
migrations.AddField(
model_name='speaker',
name='local_timezone',
field=timezone_field.fields.TimeZoneField(blank=True, help_text='Your local timezone, preferably the one you will use to present from. The conference organisers will use this to assist with scheduling talks.', verbose_name='Local Timezone'),
),
]

View file

@ -6,6 +6,8 @@ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import get_user_model
from timezone_field import TimeZoneField
from symposion import constants
from symposion.text_parser import parse
@ -50,6 +52,13 @@ class Speaker(models.Model):
"during the conference week. If you don't have one, or do "
"not wish to provide it, then enter NONE in this field.")
)
local_timezone = TimeZoneField(
blank=True,
verbose_name=_("Local Timezone"),
help_text=_("Your local timezone, preferably the one you will use to "
"present from. The conference organisers will "
"use this to assist with scheduling talks.")
)
homepage = models.URLField(
blank=True,
help_text=_(u"Your home page, if you have one")