Compare commits
23 commits
Author | SHA1 | Date | |
---|---|---|---|
200496031c | |||
445564b98e | |||
034c8f0549 | |||
9fc1501022 | |||
089adf8b6b | |||
0c18a614cb | |||
5bf63fe046 | |||
646735252f | |||
711fde5a2f | |||
28c73b4295 | |||
64a94cc807 | |||
4a98404226 | |||
1372f4d27b | |||
9815e1131d | |||
ba1def7e23 | |||
a35192b26a | |||
6557e60bfc | |||
e58a1891d5 | |||
53633bb1d0 | |||
239e9e94ed | |||
865d57c779 | |||
5f1fc54d6e | |||
eb91004c3f |
27 changed files with 701 additions and 247 deletions
79
ROLLING OVER.md
Normal file
79
ROLLING OVER.md
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
Export any reports you want to keep.
|
||||||
|
|
||||||
|
Take a database dump.
|
||||||
|
|
||||||
|
Remove all accounts, tickets, invoices, talks, etc. I used the commands below, but this may be simpler to achieve by selecting the relevant users in the Django Admin, selecting "Delete" and letting the cascading deletes deal with it.
|
||||||
|
|
||||||
|
```
|
||||||
|
Replace USERNAMES_TO_KEEP with an array of staff usernames.
|
||||||
|
|
||||||
|
$ sudo -u postgres psql symposion
|
||||||
|
delete from registrasion_lineitem;
|
||||||
|
delete from registrasion_manualpayment;
|
||||||
|
delete from registripe_stripepayment;
|
||||||
|
delete from registrasion_creditnote;
|
||||||
|
delete from registrasion_paymentbase;
|
||||||
|
delete from registrasion_invoice;
|
||||||
|
delete from registrasion_cart_vouchers;
|
||||||
|
delete from registrasion_productitem;
|
||||||
|
delete from registrasion_discountitem;
|
||||||
|
delete from registrasion_cart;
|
||||||
|
delete from pinaxcon_registrasion_attendeeprofile;
|
||||||
|
delete from registrasion_attendeeprofilebase;
|
||||||
|
delete from registrasion_attendee;
|
||||||
|
|
||||||
|
delete from proposals_aiandmachinelearningproposal;
|
||||||
|
delete from proposals_diversityequityandinclusionproposal;
|
||||||
|
delete from proposals_fossandarm64proposal;
|
||||||
|
delete from proposals_fossfundingandeconomicsproposal;
|
||||||
|
delete from proposals_fossindailylifeproposal;
|
||||||
|
delete from proposals_fossineducationproposal;
|
||||||
|
delete from proposals_keynotepanelproposal;
|
||||||
|
delete from proposals_licensingandlegalissuesproposal;
|
||||||
|
delete from proposals_memberprojectsproposal;
|
||||||
|
delete from proposals_mobiledeviceuserfreedomproposal;
|
||||||
|
delete from proposals_reproducibilityproposal;
|
||||||
|
delete from proposals_righttorepairproposal;
|
||||||
|
delete from proposals_scienceofcommunityproposal;
|
||||||
|
delete from proposals_seleniumproposal;
|
||||||
|
delete from proposals_supportingusergroupsproposal;
|
||||||
|
delete from proposals_talkproposal;
|
||||||
|
delete from proposals_tutorialproposal;
|
||||||
|
delete from proposals_wildcardproposal;
|
||||||
|
delete from proposals_xmppproposal;
|
||||||
|
|
||||||
|
delete from symposion_reviews_proposalresult;
|
||||||
|
delete from symposion_reviews_resultnotification;
|
||||||
|
delete from symposion_schedule_presentation_additional_speakers;
|
||||||
|
delete from symposion_schedule_presentation;
|
||||||
|
delete from symposion_reviews_latestvote;
|
||||||
|
delete from symposion_reviews_proposalmessage;
|
||||||
|
delete from symposion_proposals_additionalspeaker;
|
||||||
|
delete from symposion_proposals_supportingdocument;
|
||||||
|
delete from symposion_proposals_proposalbase;
|
||||||
|
|
||||||
|
delete from account_account where user_id in (select id from auth_user where username not in USERNAMES_TO_KEEP);
|
||||||
|
delete from account_emailconfirmation;
|
||||||
|
delete from account_emailaddress where user_id in (select id from auth_user where username not in USERNAMES_TO_KEEP);
|
||||||
|
|
||||||
|
delete from symposion_speakers_speaker;
|
||||||
|
delete from reversion_version;
|
||||||
|
delete from reversion_revision;
|
||||||
|
delete from teams_membership;
|
||||||
|
delete from pinax_stripe_card;
|
||||||
|
delete from pinax_stripe_charge;
|
||||||
|
delete from pinax_stripe_customer;
|
||||||
|
delete from django_admin_log;
|
||||||
|
|
||||||
|
delete from auth_user where username not in USERNAMES_TO_KEEP;
|
||||||
|
```
|
||||||
|
|
||||||
|
Set any remaining account `completed_registration` to false.
|
||||||
|
|
||||||
|
Add a new Conference entry in Django Admin and update the `CONFERENCE_ID` in pinaxcon/settings.py. Also update the conference dates.
|
||||||
|
|
||||||
|
Find and update all uses of 2025 and the conference dates in this codebase.
|
||||||
|
|
||||||
|
Update flatpages such as the "/" home page.
|
||||||
|
|
||||||
|
Update the Django "site" in the Admin.
|
16
fabfile.py
vendored
16
fabfile.py
vendored
|
@ -18,12 +18,12 @@ hosts = os.environ['FABRIC_HOSTS'].split(',')
|
||||||
|
|
||||||
def install_essentials(c):
|
def install_essentials(c):
|
||||||
# ImageMagick (convert) and Inkscape required for generating badges.
|
# ImageMagick (convert) and Inkscape required for generating badges.
|
||||||
c.run('sudo apt-get install -yy git python3-dev python3-venv python3-wheel build-essential python3-cairocffi python3-psycopg2 postgresql uwsgi-emperor uwsgi-plugin-python3 memcached netcat nginx certbot libpq-dev libmemcached-dev libxml2-dev libxslt-dev xmlsec1 imagemagick inkscape cronic')
|
c.run('sudo apt-get install -yy git python3-dev python3-venv python3-wheel build-essential python3-cairocffi python3-psycopg2 postgresql uwsgi-emperor uwsgi-plugin-python3 memcached netcat-openbsd nginx certbot python3-certbot-nginx libpq-dev libmemcached-dev libxml2-dev libxslt-dev xmlsec1 imagemagick inkscape cronic')
|
||||||
|
|
||||||
|
|
||||||
@task(hosts=hosts)
|
@task(hosts=hosts)
|
||||||
def deploy(c):
|
def deploy(c):
|
||||||
install_essentials(c)
|
# install_essentials(c)
|
||||||
df2.transfer_files_git(c)
|
df2.transfer_files_git(c)
|
||||||
df2.init(c)
|
df2.init(c)
|
||||||
if not c.run(f'test -e {c.env.virtualenv}', warn=True):
|
if not c.run(f'test -e {c.env.virtualenv}', warn=True):
|
||||||
|
@ -36,6 +36,12 @@ def deploy(c):
|
||||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252
|
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252
|
||||||
# https://github.com/pypa/setuptools/issues/3278
|
# https://github.com/pypa/setuptools/issues/3278
|
||||||
c.run('SETUPTOOLS_USE_DISTUTILS=stdlib {env.virtualenv}/bin/python -m pip install -c constraints.txt -r vendored_requirements.txt'.format(env=c.env))
|
c.run('SETUPTOOLS_USE_DISTUTILS=stdlib {env.virtualenv}/bin/python -m pip install -c constraints.txt -r vendored_requirements.txt'.format(env=c.env))
|
||||||
|
# Compile SASS
|
||||||
|
with c.cd(c.env.project_dir):
|
||||||
|
with c.prefix(f'set -a && source {c.env.project_dir}/env'):
|
||||||
|
c.run('{env.virtualenv}/bin/python manage.py compilescss --settings={env.settings} -v0'.format(
|
||||||
|
env=c.env,
|
||||||
|
))
|
||||||
df2.prepare_django(c, fail_level='ERROR')
|
df2.prepare_django(c, fail_level='ERROR')
|
||||||
df2.fix_permissions(
|
df2.fix_permissions(
|
||||||
c,
|
c,
|
||||||
|
@ -75,7 +81,7 @@ ns.configure({
|
||||||
|
|
||||||
# Our custom project config.
|
# Our custom project config.
|
||||||
'env': {
|
'env': {
|
||||||
'branch': 'fossy2023',
|
'branch': 'fossy2025',
|
||||||
'app_user': 'www-data',
|
'app_user': 'www-data',
|
||||||
'db_name': 'symposion',
|
'db_name': 'symposion',
|
||||||
'project_dir': '/srv/symposion_app',
|
'project_dir': '/srv/symposion_app',
|
||||||
|
@ -87,7 +93,7 @@ ns.configure({
|
||||||
'uwsgi_conf': 'deploy/uwsgi.ini',
|
'uwsgi_conf': 'deploy/uwsgi.ini',
|
||||||
'nginx_conf': 'deploy/nginx.conf',
|
'nginx_conf': 'deploy/nginx.conf',
|
||||||
'python': '/usr/bin/python3.11',
|
'python': '/usr/bin/python3.11',
|
||||||
'url': 'https://2023.fossy.us/',
|
'url': 'https://2025.fossy.us/',
|
||||||
'domain': '2023.fossy.us',
|
'domain': '2025.fossy.us',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -21,24 +21,17 @@ class CategoryAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
models_to_register = [
|
models_to_register = [
|
||||||
models.CopyleftComplianceProposal,
|
models.DistrosProposal,
|
||||||
models.MemberProjectProposal,
|
|
||||||
models.ContainerDaysProposal,
|
|
||||||
models.SustainableOpenSourceBusinessProposal,
|
|
||||||
models.SoftwareWorkerCoopsProposal,
|
|
||||||
models.DiversityEquityInclusionProposal,
|
|
||||||
models.FOSSAtPlayProposal,
|
|
||||||
models.OpenSourcAIDataProposal,
|
|
||||||
models.OpenWorkProposal,
|
|
||||||
models.CommunityProposal,
|
|
||||||
models.BSDUnixProposal,
|
|
||||||
models.XMPPProposal,
|
|
||||||
models.ScienceOfCommunityProposal,
|
|
||||||
models.AArch64ARM64Proposal,
|
|
||||||
models.FOSSForEducationProposal,
|
|
||||||
models.FOSSInDailyLifeProposal,
|
models.FOSSInDailyLifeProposal,
|
||||||
|
models.FOSSInEducationProposal,
|
||||||
|
models.LegalIssuesProposal,
|
||||||
|
models.LinuxKernalProposal,
|
||||||
|
models.P2PLocalFirstProposal,
|
||||||
|
models.ScienceOfCommunityProposal,
|
||||||
|
models.SupportingUserGroupsProposal,
|
||||||
|
models.WildCardProposal,
|
||||||
|
models.XMPPProposal,
|
||||||
]
|
]
|
||||||
|
|
||||||
for model in models_to_register:
|
for model in models_to_register:
|
||||||
admin.site.register(model, CategoryAdmin,
|
admin.site.register(model, CategoryAdmin,
|
||||||
list_display = [
|
list_display = [
|
||||||
|
|
|
@ -61,95 +61,9 @@ class MiniconfProposalForm(ProposalForm):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class CopyleftComplianceProposalForm(MiniconfProposalForm):
|
class DistrosProposalForm(MiniconfProposalForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.CopyleftComplianceProposal
|
model = models.DistrosProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class MemberProjectProposalForm(MiniconfProposalForm):
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = models.MemberProjectProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class ContainerDaysProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.ContainerDaysProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class SustainableOpenSourceBusinessProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.SustainableOpenSourceBusinessProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class SoftwareWorkerCoopsProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.SoftwareWorkerCoopsProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class DiversityEquityInclusionProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.DiversityEquityInclusionProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSAtPlayProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.FOSSAtPlayProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class OpenSourcAIDataProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.OpenSourcAIDataProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class OpenWorkProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.OpenWorkProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class CommunityProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.CommunityProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class BSDUnixProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.BSDUnixProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class XMPPProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.XMPPProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.ScienceOfCommunityProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class AArch64ARM64ProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.AArch64ARM64Proposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSForEducationProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.FOSSForEducationProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,9 +73,45 @@ class FOSSInDailyLifeProposalForm(MiniconfProposalForm):
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class SecurityProposalForm(MiniconfProposalForm):
|
class FOSSInEducationProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.SecurityProposal
|
model = models.FOSSInEducationProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class LegalIssuesProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.LegalIssuesProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class LinuxKernelProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.LinuxKernalProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class P2PLocalFirstProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.P2PLocalFirstProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.ScienceOfCommunityProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class SupportingUserGroupsProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.SupportingUserGroupsProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class XMPPProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.XMPPProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
@ -169,9 +119,3 @@ class WildCardProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.WildCardProposal
|
model = models.WildCardProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class RightToRepairProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.RightToRepairProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
218
pinaxcon/proposals/migrations/0013_auto_20240515_0500.py
Normal file
218
pinaxcon/proposals/migrations/0013_auto_20240515_0500.py
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
# Generated by Django 2.2.28 on 2024-05-15 05:00
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_schedule', '0009_presentation_videos'),
|
||||||
|
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||||
|
('symposion_speakers', '0012_auto_20230420_0018'),
|
||||||
|
('symposion_reviews', '0001_initial'),
|
||||||
|
('proposals', '0012_righttorepairproposal'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FOSSFundingandEconomicsProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'FOSS Funding and Economics talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='MobileDeviceUserFreedomProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Mobile Device User Freedom talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ReproducibilityProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Reproducability talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='SupportingUserGroupsProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Supporting User Groups talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='OpenSourcAIDataProposal',
|
||||||
|
new_name='AIAndMachineLearningProposal',
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='DiversityEquityInclusionProposal',
|
||||||
|
new_name='DiversityEquityAndInclusionProposal',
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='AArch64ARM64Proposal',
|
||||||
|
new_name='FOSSAndARM64Proposal',
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='FOSSForEducationProposal',
|
||||||
|
new_name='FOSSInEducationProposal',
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='CopyleftComplianceProposal',
|
||||||
|
new_name='LicensingAndLegalIssuesProposal',
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='MemberProjectProposal',
|
||||||
|
new_name='MemberProjectsProposal',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='communityproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='containerdaysproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='fossatplayproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='openworkproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='securityproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='softwareworkercoopsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='sustainableopensourcebusinessproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='aiandmachinelearningproposal',
|
||||||
|
options={'verbose_name': 'AI and Machine Learning talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='diversityequityandinclusionproposal',
|
||||||
|
options={'verbose_name': 'Diversity Equity and Inclusion and FOSS talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='fossandarm64proposal',
|
||||||
|
options={'verbose_name': 'FOSS and ARM64; from the Cloud to the Edge talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='fossindailylifeproposal',
|
||||||
|
options={'verbose_name': 'FOSS in Daily Life talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='fossineducationproposal',
|
||||||
|
options={'verbose_name': 'FOSS in Education talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='licensingandlegalissuesproposal',
|
||||||
|
options={'verbose_name': 'Licensing and Legal Issues talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='memberprojectsproposal',
|
||||||
|
options={'verbose_name': 'SFC Member Projects talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='righttorepairproposal',
|
||||||
|
options={'verbose_name': 'Right to Repair talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='scienceofcommunityproposal',
|
||||||
|
options={'verbose_name': 'Science of Community talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='wildcardproposal',
|
||||||
|
options={'verbose_name': 'Wild card talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='xmppproposal',
|
||||||
|
options={'verbose_name': 'XMPP talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='BSDUnixProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='CommunityProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='ContainerDaysProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='FOSSAtPlayProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='OpenWorkProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='SecurityProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='SoftwareWorkerCoopsProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='SustainableOpenSourceBusinessProposal',
|
||||||
|
),
|
||||||
|
]
|
35
pinaxcon/proposals/migrations/0014_keynotepanelproposal.py
Normal file
35
pinaxcon/proposals/migrations/0014_keynotepanelproposal.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
# Generated by Django 2.2.28 on 2024-05-23 05:11
|
||||||
|
|
||||||
|
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_20240515_0500'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='KeynotePanelProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Keynote panel talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
]
|
35
pinaxcon/proposals/migrations/0015_seleniumproposal.py
Normal file
35
pinaxcon/proposals/migrations/0015_seleniumproposal.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
# Generated by Django 2.2.28 on 2024-05-28 06:09
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||||
|
('proposals', '0014_keynotepanelproposal'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='SeleniumProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Selenium talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
]
|
152
pinaxcon/proposals/migrations/0016_auto_20250304_0337.py
Normal file
152
pinaxcon/proposals/migrations/0016_auto_20250304_0337.py
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
# Generated by Django 2.2.28 on 2025-03-04 03:37
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||||
|
('symposion_speakers', '0012_auto_20230420_0018'),
|
||||||
|
('symposion_reviews', '0001_initial'),
|
||||||
|
('symposion_schedule', '0009_presentation_videos'),
|
||||||
|
('proposals', '0015_seleniumproposal'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DistrosProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Distros talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='LinuxKernalProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Linux Kernal talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='P2PLocalFirstProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Peer-to-Peer and Local First talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='LicensingAndLegalIssuesProposal',
|
||||||
|
new_name='LegalIssuesProposal',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='diversityequityandinclusionproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='fossandarm64proposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='fossfundingandeconomicsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='keynotepanelproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='memberprojectsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='mobiledeviceuserfreedomproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='reproducibilityproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='righttorepairproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='seleniumproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='legalissuesproposal',
|
||||||
|
options={'verbose_name': 'Legal Issues talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='AIAndMachineLearningProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='DiversityEquityAndInclusionProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='FOSSAndARM64Proposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='FOSSFundingandEconomicsProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='KeynotePanelProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='MemberProjectsProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='MobileDeviceUserFreedomProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='ReproducibilityProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='RightToRepairProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='SeleniumProposal',
|
||||||
|
),
|
||||||
|
]
|
|
@ -160,96 +160,51 @@ class MiniconfSessionProposal(Proposal):
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
class CopyleftComplianceProposal(MiniconfSessionProposal):
|
class DistrosProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Copyleft and Compliance talk proposal"
|
verbose_name = "Distros talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class MemberProjectProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "SFC Member Project talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class ContainerDaysProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Container Days proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class SustainableOpenSourceBusinessProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Sustainable Open Source Business proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class SoftwareWorkerCoopsProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Software Worker Co-ops proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class DiversityEquityInclusionProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Diversity Equity and Inclusion and FOSS proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSAtPlayProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "FOSS at Play: Games, creative development, and open technology proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class OpenSourcAIDataProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Open Source AI + Data proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class OpenWorkProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Issues in Open Work; Common Challenges and Best Practices in the Open Source Industry, Open Scholarship, and Government proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class CommunityProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Community: Open Source in Practice proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class BSDUnixProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "BSD Unix proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class XMPPProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "XMPP proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class ScienceOfCommunityProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Science of Community proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class AArch64ARM64Proposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "AArch64/ARM64 Servers and Open Source- The Who, What, Why, and How proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSForEducationProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "FOSS For Education proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "FOSS in Daily Life proposal"
|
verbose_name = "FOSS in Daily Life talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class SecurityProposal(MiniconfSessionProposal):
|
class FOSSInEducationProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Security"
|
verbose_name = "FOSS in Education talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class LegalIssuesProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Legal Issues talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class LinuxKernalProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Linux Kernal talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class P2PLocalFirstProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Peer-to-Peer and Local First talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class ScienceOfCommunityProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Science of Community talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class SupportingUserGroupsProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Supporting User Groups talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class XMPPProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "XMPP talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class WildCardProposal(MiniconfSessionProposal):
|
class WildCardProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Wild card"
|
verbose_name = "Wild card talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class RightToRepairProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Right to Repair"
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.28 on 2024-05-06 00:00
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pinaxcon_registrasion', '0018_auto_20230501_2052'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='attendeeprofile',
|
||||||
|
name='sfc_sustainer',
|
||||||
|
field=models.BooleanField(blank=True, default=False, help_text='Financial support from <a href="https://sfconservancy.org/sustainer/" target="_blank">Sustainers</a> helps Conservancy\'s work in a strategic, long-term way.', verbose_name='Are you an SFC Sustainer?'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -220,6 +220,14 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
sfc_sustainer = models.BooleanField(
|
||||||
|
verbose_name="Are you an SFC Sustainer?",
|
||||||
|
help_text="Financial support from <a href=\"https://sfconservancy.org/sustainer/\" target=\"_blank\">Sustainers</a> "
|
||||||
|
"helps Conservancy's work in a strategic, long-term way.",
|
||||||
|
blank=True,
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
|
|
||||||
def first_name(self):
|
def first_name(self):
|
||||||
return wrap(self.name, 15, break_long_words=False)[0]
|
return wrap(self.name, 15, break_long_words=False)[0]
|
||||||
|
|
||||||
|
|
|
@ -369,27 +369,18 @@ AUTHENTICATION_BACKENDS = [
|
||||||
LOGIN_URL = '/account/login/'
|
LOGIN_URL = '/account/login/'
|
||||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||||
|
|
||||||
CONFERENCE_ID = 2
|
CONFERENCE_ID = 4
|
||||||
PROPOSAL_FORMS = {
|
PROPOSAL_FORMS = {
|
||||||
"aarch64-arm64": "pinaxcon.proposals.forms.AArch64ARM64ProposalForm",
|
"distros": "pinaxcon.proposals.forms.DistrosProposalForm",
|
||||||
"bsd-unix": "pinaxcon.proposals.forms.BSDUnixProposalForm",
|
|
||||||
"community": "pinaxcon.proposals.forms.CommunityProposalForm",
|
|
||||||
"container-days": "pinaxcon.proposals.forms.ContainerDaysProposalForm",
|
|
||||||
"copyleft-compliance": "pinaxcon.proposals.forms.CopyleftComplianceProposalForm",
|
|
||||||
"diversity-equity-inclusion": "pinaxcon.proposals.forms.DiversityEquityInclusionProposalForm",
|
|
||||||
"foss-at-play": "pinaxcon.proposals.forms.FOSSAtPlayProposalForm",
|
|
||||||
"foss-for-education": "pinaxcon.proposals.forms.FOSSForEducationProposalForm",
|
|
||||||
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
||||||
"open-source-ai-data": "pinaxcon.proposals.forms.OpenSourcAIDataProposalForm",
|
"foss-in-education": "pinaxcon.proposals.forms.FOSSInEducationProposalForm",
|
||||||
"open-work": "pinaxcon.proposals.forms.OpenWorkProposalForm",
|
"legal-issues": "pinaxcon.proposals.forms.LegalIssuesProposalForm",
|
||||||
"right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
|
"linux-kernel": "pinaxcon.proposals.forms.LinuxKernelProposalForm",
|
||||||
|
"peer-to-peer-local-first": "pinaxcon.proposals.forms.P2PLocalFirstProposalForm",
|
||||||
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
||||||
"security": "pinaxcon.proposals.forms.SecurityProposalForm",
|
"supporting-user-groups": "pinaxcon.proposals.forms.SupportingUserGroupsProposalForm",
|
||||||
"sfc-member-project": "pinaxcon.proposals.forms.MemberProjectProposalForm",
|
|
||||||
"software-worker-coops": "pinaxcon.proposals.forms.SoftwareWorkerCoopsProposalForm",
|
|
||||||
"sustainable-open-source-business": "pinaxcon.proposals.forms.SustainableOpenSourceBusinessProposalForm",
|
|
||||||
"wildcard": "pinaxcon.proposals.forms.WildCardProposalForm",
|
|
||||||
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
||||||
|
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
||||||
}
|
}
|
||||||
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
||||||
|
|
||||||
|
@ -544,8 +535,8 @@ CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'FOSSY')
|
||||||
CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'FOSSY')
|
CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'FOSSY')
|
||||||
CONFERENCE_EMAIL = os.environ.get('CONFERENCE_EMAIL', DEFAULT_FROM_EMAIL)
|
CONFERENCE_EMAIL = os.environ.get('CONFERENCE_EMAIL', DEFAULT_FROM_EMAIL)
|
||||||
CONF_TZINFO = pytz.timezone(TIME_ZONE)
|
CONF_TZINFO = pytz.timezone(TIME_ZONE)
|
||||||
CONF_START = CONF_TZINFO.localize(datetime(2023, 7, 13))
|
CONF_START = CONF_TZINFO.localize(datetime(2025, 7, 31))
|
||||||
CONF_END = CONF_TZINFO.localize(datetime(2023, 7, 16))
|
CONF_END = CONF_TZINFO.localize(datetime(2025, 8, 3))
|
||||||
CONF_MINICONF_END = CONF_TZINFO.localize(datetime(2023, 3, 14, 23, 59))
|
CONF_MINICONF_END = CONF_TZINFO.localize(datetime(2023, 3, 14, 23, 59))
|
||||||
EARLY_BIRD_DEADLINE = CONF_TZINFO.localize(datetime(2023, 1, 28))
|
EARLY_BIRD_DEADLINE = CONF_TZINFO.localize(datetime(2023, 1, 28))
|
||||||
PENGUIN_DINNER_TICKET_DATE = date(2023, 3, 15)
|
PENGUIN_DINNER_TICKET_DATE = date(2023, 3, 15)
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form method="POST" action="{% url "account_login" %}" autocapitalize="off" {% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
|
<form method="POST" action="{% url "account_login" %}" autocapitalize="off" {% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
|
||||||
<legend>{% trans "Log in to an existing account" %}</legend>
|
<legend>{% trans "Log in to an existing account" %}</legend>
|
||||||
|
<div class="alert alert-primary">Please note that accounts from 2024 are not transferred for privacy reasons.</div>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|bootstrap }}
|
{{ form|bootstrap }}
|
||||||
{% if redirect_field_value %}
|
{% if redirect_field_value %}
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
{% extends "site_base.html" %}
|
{% extends "site_base.html" %}
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
|
|
||||||
{% block meta_desc %}FOSSY (Free and Open Source Yearly) is a 4 day community-oriented conference focused on the creation and impact of free and open source software. Join us in Portland, OR - July 13-16th 2023 at the Oregon Convention Center.{% endblock %}
|
{# NOTE: This template is not used due to flatpages. #}
|
||||||
{% block og_desc %}FOSSY (Free and Open Source Yearly) is a 4 day community-oriented conference focused on the creation and impact of free and open source software. Join us in Portland, OR - July 13-16th 2023 at the Oregon Convention Center.{% endblock %}
|
|
||||||
|
|
||||||
{% block head_title %}FOSSY 2023: The first Free and Open Source Software Yearly conference{% endblock %}
|
{% block meta_desc %}FOSSY (Free and Open Source Yearly) is a 4 day community-oriented conference focused on the creation and impact of free and open source software. Join us in Portland, OR - July 31st – August 3rd 2025 at Portland State University.{% endblock %}
|
||||||
|
{% block og_desc %}FOSSY (Free and Open Source Yearly) is a 4 day community-oriented conference focused on the creation and impact of free and open source software. Join us in Portland, OR - July 31st – August 3rd 2025 at Portland State University.{% endblock %}
|
||||||
|
|
||||||
|
{% block head_title %}FOSSY 2025: The third Free and Open Source Software Yearly conference{% endblock %}
|
||||||
|
|
||||||
{% block body_class %}home{% endblock %}
|
{% block body_class %}home{% endblock %}
|
||||||
|
|
||||||
|
@ -12,8 +14,8 @@
|
||||||
<header class="pt2-ns pb4">
|
<header class="pt2-ns pb4">
|
||||||
<div class="flex-ns center">
|
<div class="flex-ns center">
|
||||||
<div class="mr4 dark-green sans-serif" style="flex-grow: 1">
|
<div class="mr4 dark-green sans-serif" style="flex-grow: 1">
|
||||||
<h1 class="f-subheadline f-headline-ns b lh-solid tracked-tight mv0">FOSSY 2023</h1>
|
<h1 class="f-subheadline f-headline-ns b lh-solid tracked-tight mv0">FOSSY 2025</h1>
|
||||||
<h2 class="f3 f2-ns b lh-solid mt0 mb3">July 13-16th 2023 — Portland, OR</h2>
|
<h2 class="f3 f2-ns b lh-solid mt0 mb3">July 31st – August 3rd 2025 — Portland, OR</h2>
|
||||||
<h3 class="f4 f4-ns b lh-title mv2 mv3-ns">The first Free and Open Source Software Yearly conference</h3>
|
<h3 class="f4 f4-ns b lh-title mv2 mv3-ns">The first Free and Open Source Software Yearly conference</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="lh-solid mt4 mt0-ns" style="font-size: 10rem; max-width: 250px;"><img class="db" src="{% static 'img/conservancy_logo_tall_mono.svg' %}" style="max-height: 180px" alt="Software Freedom Conservancy"></div>
|
<div class="lh-solid mt4 mt0-ns" style="font-size: 10rem; max-width: 250px;"><img class="db" src="{% static 'img/conservancy_logo_tall_mono.svg' %}" style="max-height: 180px" alt="Software Freedom Conservancy"></div>
|
||||||
|
@ -24,7 +26,7 @@
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section id="content">
|
<section id="content">
|
||||||
<h1 class="f3 mt0 mb4">FOSS is back in Portland, OR at the Oregon Convention Center!</h1>
|
<h1 class="f3 mt0 mb4">FOSS is back in Portland, OR at Portland State University!</h1>
|
||||||
<div class="flex-ns">
|
<div class="flex-ns">
|
||||||
<div class="mw6">
|
<div class="mw6">
|
||||||
<p class="f4 mt0">Software Freedom Conservancy is so proud to announce that we are hosting a community oriented conference this coming summer. FOSSY (Free and Open Source Yearly) is focused on the creation and impact of free and open source software, uplifting contributors of all experience.</p>
|
<p class="f4 mt0">Software Freedom Conservancy is so proud to announce that we are hosting a community oriented conference this coming summer. FOSSY (Free and Open Source Yearly) is focused on the creation and impact of free and open source software, uplifting contributors of all experience.</p>
|
||||||
|
@ -37,8 +39,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<figure class="fr pa0 mt4 mt2-ns mr0 ml0 ml4-ns mb4">
|
<figure class="fr pa0 mt4 mt2-ns mr0 ml0 ml4-ns mb4">
|
||||||
<img src="{% static 'img/occ.jpg' %}" alt="Aerial photograph of the Oregon Convention Center">
|
<img src="{% static 'img/psu-smsu.jpg' %}" alt="Aerial photograph of the Portland State University">
|
||||||
<figcaption class="tc mt2">Oregon Convention Center (CC-BY 2.0)</figcaption>
|
<figcaption class="tc mt2">Portland State University (CC-BY 3.0)</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h2 class="sans-serif f2 f1-ns b lh-solid tracked-tight mv0 mr3">
|
<h2 class="sans-serif f2 f1-ns b lh-solid tracked-tight mv0 mr3">
|
||||||
<a class="washed-yellow hover-washed-yellow" href="/" style="text-decoration: none">
|
<a class="washed-yellow hover-washed-yellow" href="/" style="text-decoration: none">
|
||||||
FOSSY 2023
|
FOSSY 2025
|
||||||
</a>
|
</a>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
|
|
@ -96,8 +96,7 @@
|
||||||
<path d="M250.66,374.21V399H247V374.21Z" fill="#36a852"/>
|
<path d="M250.66,374.21V399H247V374.21Z" fill="#36a852"/>
|
||||||
<path d="M265.49,393.87l2.88,1.92a8.4,8.4,0,0,1-7,3.75,8.26,8.26,0,0,1-8.38-8.45c0-5,3.61-8.45,8-8.45s6.53,3.49,7.23,5.38l.39,1-11.3,4.67a4.3,4.3,0,0,0,4.1,2.56A4.82,4.82,0,0,0,265.49,393.87Zm-8.87-3,7.56-3.13a3.28,3.28,0,0,0-3.14-1.79A4.63,4.63,0,0,0,256.62,390.83Z" fill="#ea4535"/>
|
<path d="M265.49,393.87l2.88,1.92a8.4,8.4,0,0,1-7,3.75,8.26,8.26,0,0,1-8.38-8.45c0-5,3.61-8.45,8-8.45s6.53,3.49,7.23,5.38l.39,1-11.3,4.67a4.3,4.3,0,0,0,4.1,2.56A4.82,4.82,0,0,0,265.49,393.87Zm-8.87-3,7.56-3.13a3.28,3.28,0,0,0-3.14-1.79A4.63,4.63,0,0,0,256.62,390.83Z" fill="#ea4535"/>
|
||||||
<rect x="160.95" y="373.04" width="112" height="36" fill="none"/>
|
<rect x="160.95" y="373.04" width="112" height="36" fill="none"/>
|
||||||
<text transform="translate(84.43 102.23)" font-size="15" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro">Janua<tspan x="38.69" y="0" letter-spacing="0.02em">r</tspan>
|
<text transform="translate(84.43 102.23)" font-size="15" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro">July 31st – August 3rd 2025
|
||||||
<tspan x="44.26" y="0">y 14 - 16 2023</tspan>
|
|
||||||
</text>
|
</text>
|
||||||
<g id="Layer_2" data-name="Layer 2">
|
<g id="Layer_2" data-name="Layer 2">
|
||||||
<g id="emperor">
|
<g id="emperor">
|
||||||
|
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 116 KiB |
|
@ -122,13 +122,13 @@
|
||||||
|
|
||||||
<footer class="footer mt-4 d-print-none">
|
<footer class="footer mt-4 d-print-none">
|
||||||
<div class="container py-4">
|
<div class="container py-4">
|
||||||
<div class="row">
|
<!-- <div class="row">
|
||||||
<div class="col-md-12 pb-12 text-center" style="margin-top: 0px;margin-bottom: 0px;border-bottom-style: solid;border-bottom-width: 0px;padding-bottom: 20px;">Wifi: FOSSY <i>(see Registration for older wifi)</i><br/>PIN: outreachy1000</div>
|
<div class="col-md-12 pb-12 text-center" style="margin-top: 0px;margin-bottom: 0px;border-bottom-style: solid;border-bottom-width: 0px;padding-bottom: 20px;">Wifi: FOSSY <i>(see Registration for older wifi)</i><br/>PIN: outreachy1000</div>
|
||||||
</div>
|
</div> -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 pb-4">
|
<div class="col-md-4 pb-4">
|
||||||
<strong>FOSSY 2023</strong> <br>
|
<strong>FOSSY 2025</strong> <br>
|
||||||
July 13-16 2023 <br>
|
July 31st – August 3rd 2025 <br>
|
||||||
Portland, OR<br>
|
Portland, OR<br>
|
||||||
Timezone: PDT - UTC-7 <br>
|
Timezone: PDT - UTC-7 <br>
|
||||||
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="far fa-envelope"></i></a> <a
|
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="far fa-envelope"></i></a> <a
|
||||||
|
@ -141,7 +141,7 @@
|
||||||
<div class="col-md-4 pb-4 text-right">
|
<div class="col-md-4 pb-4 text-right">
|
||||||
<small>
|
<small>
|
||||||
<a href="#">Back to top</a><br>
|
<a href="#">Back to top</a><br>
|
||||||
© 2023 <a href="https://sfconservancy.org/">Software Freedom Conservancy</a><br>
|
© 2025 <a href="https://sfconservancy.org/">Software Freedom Conservancy</a><br>
|
||||||
<a href="/credits/">Credits</a>
|
<a href="/credits/">Credits</a>
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<td>{{ proposal.number }}</td>
|
<td>{{ proposal.number }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{% url "review_detail" proposal.pk %}">
|
<a href="{% url "review_detail" proposal.pk %}">
|
||||||
<small><strong>{{ proposal.speaker }}</strong></small>
|
<small><strong>{{ proposal.speaker }} <{{ proposal.speaker.email }}></strong></small>
|
||||||
<br />
|
<br />
|
||||||
{{ proposal.title }}
|
{{ proposal.title }}
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -56,13 +56,18 @@
|
||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
|
|
||||||
{% if presentation.videos_split %}
|
{% if presentation.videos_split %}
|
||||||
<h2 class="mt-4">Video</h4>
|
<h2 class="mt-4">Videos</h4>
|
||||||
|
{% for v in presentation.youtube_videos %}
|
||||||
|
<iframe width="560" height="315" src="{{ v }}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||||
|
{% endfor %}
|
||||||
|
{% if v.other_videos %}
|
||||||
<video controls style="max-width: 640px">
|
<video controls style="max-width: 640px">
|
||||||
{% for video in presentation.videos_split %}
|
{% for video in presentation.other_videos %}
|
||||||
<source src="{{ video }}">
|
<source src="{{ video }}">
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</video>
|
</video>
|
||||||
<p style="margin-top: 1rem">Available formats:</p>
|
{% endif %}
|
||||||
|
<p style="margin-top: 1rem">Available sources:</p>
|
||||||
<ul>
|
<ul>
|
||||||
{% for video in presentation.videos_split %}
|
{% for video in presentation.videos_split %}
|
||||||
<li>{{ video|urlize }}</li>
|
<li>{{ video|urlize }}</li>
|
||||||
|
|
|
@ -28,7 +28,7 @@ django-reversion==3.0.8
|
||||||
django-sitetree==1.16.0
|
django-sitetree==1.16.0
|
||||||
django-taggit==1.3.0
|
django-taggit==1.3.0
|
||||||
django-timezone-field==4.1.2
|
django-timezone-field==4.1.2
|
||||||
easy-thumbnails==2.7.0
|
easy-thumbnails==2.8.5
|
||||||
bleach==3.2.1
|
bleach==3.2.1
|
||||||
pytz>=2020.1
|
pytz>=2020.1
|
||||||
django-ical==1.7.1
|
django-ical==1.7.1
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 157 KiB |
BIN
static/src/img/psu-smsu.jpg
Normal file
BIN
static/src/img/psu-smsu.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 206 KiB |
3
vendor/registrasion/registrasion/views.py
vendored
3
vendor/registrasion/registrasion/views.py
vendored
|
@ -347,8 +347,7 @@ def _guided_registration_profile_and_voucher(request):
|
||||||
profile_section = GuidedRegistrationSection(
|
profile_section = GuidedRegistrationSection(
|
||||||
title="Profile and Personal Information",
|
title="Profile and Personal Information",
|
||||||
form=profile_form,
|
form=profile_form,
|
||||||
description=("<div class=\"text-info\"><em>You can come back and edit these details any time before "
|
description=("<div class=\"text-info\"><em>You can come back and edit these details</em></div>"),
|
||||||
"June 6 2023.</em></div>"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return [voucher_section, profile_section]
|
return [voucher_section, profile_section]
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
from django.conf import settings
|
||||||
from symposion.proposals.models import ProposalSection
|
from symposion.proposals.models import ProposalSection
|
||||||
|
|
||||||
|
|
||||||
def reviews(request):
|
def reviews(request):
|
||||||
sections = []
|
sections = []
|
||||||
manage_sections = {}
|
manage_sections = {}
|
||||||
for section in ProposalSection.objects.all():
|
for section in ProposalSection.objects.filter(section__conference__id=settings.CONFERENCE_ID):
|
||||||
if request.user.has_perm("reviews.can_review_%s" % section.section.slug):
|
if request.user.has_perm("reviews.can_review_%s" % section.section.slug):
|
||||||
sections.append(section)
|
sections.append(section)
|
||||||
if request.user.has_perm("reviews.can_manage_%s" % section.section.slug):
|
if request.user.has_perm("reviews.can_manage_%s" % section.section.slug):
|
||||||
|
|
13
vendor/symposion/symposion/schedule/models.py
vendored
13
vendor/symposion/symposion/schedule/models.py
vendored
|
@ -308,6 +308,19 @@ class Presentation(models.Model):
|
||||||
def videos_split(self):
|
def videos_split(self):
|
||||||
return [v.strip() for v in self.videos.split('\n') if v != '']
|
return [v.strip() for v in self.videos.split('\n') if v != '']
|
||||||
|
|
||||||
|
def youtube_videos(self):
|
||||||
|
return [
|
||||||
|
v.replace('youtu.be', 'www.youtube.com/embed')
|
||||||
|
for v in self.videos_split()
|
||||||
|
if 'youtu.be' in v
|
||||||
|
]
|
||||||
|
|
||||||
|
def other_videos(self):
|
||||||
|
return [
|
||||||
|
v for v in self.videos_split()
|
||||||
|
if 'youtu.be' not in v
|
||||||
|
]
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ["slot"]
|
ordering = ["slot"]
|
||||||
verbose_name = _("presentation")
|
verbose_name = _("presentation")
|
||||||
|
|
2
vendor/symposion/symposion/schedule/views.py
vendored
2
vendor/symposion/symposion/schedule/views.py
vendored
|
@ -303,7 +303,7 @@ def schedule_json(request):
|
||||||
|
|
||||||
class EventFeed(ICalFeed):
|
class EventFeed(ICalFeed):
|
||||||
|
|
||||||
product_id = '-//2023.everythingopen.au/schedule//EN'
|
product_id = '-//2025.fossy.us/schedule//EN'
|
||||||
timezone = settings.TIME_ZONE
|
timezone = settings.TIME_ZONE
|
||||||
filename = 'conference.ics'
|
filename = 'conference.ics'
|
||||||
|
|
||||||
|
|
2
vendor/symposion/symposion/speakers/forms.py
vendored
2
vendor/symposion/symposion/speakers/forms.py
vendored
|
@ -30,7 +30,7 @@ class SpeakerForm(forms.ModelForm):
|
||||||
def __init__(self, *a, **k):
|
def __init__(self, *a, **k):
|
||||||
super(SpeakerForm, self).__init__(*a, **k)
|
super(SpeakerForm, self).__init__(*a, **k)
|
||||||
self.fields['agreement'].required = True
|
self.fields['agreement'].required = True
|
||||||
self.fields['agreement'].help_text = 'I agree to the <a href="/attend/terms-and-conditions/">Terms and Conditions</a>, and I have read, understood, and agree to act according to the standards set forth in our <a href="/attend/code-of-conduct/">Code of Conduct</a>.<br>I agree to the <a href="/attend/health-and-safety/">Health and Safety Guidelines</a>, in particular the <strong>requirement to wear a mask</strong> at this event.'
|
self.fields['agreement'].help_text = 'I agree to the <a href="/attend/terms-and-conditions/">Terms and Conditions</a>, and I have read, understood, and agree to act according to the standards set forth in our <a href="/attend/code-of-conduct/">Code of Conduct</a>.<br>I agree to the <a href="/attend/health-and-safety/">Health and Safety Guidelines</a>.'
|
||||||
self.fields['biography'].required = True
|
self.fields['biography'].required = True
|
||||||
# self.fields['local_timezone'].required = True
|
# self.fields['local_timezone'].required = True
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue