Compare commits
9 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 174dcfe735 | |||
| e63b98394b | |||
| 35e8c0c7e8 | |||
| 3453001e33 | |||
| 3a64e1b6a2 | |||
| fc13ee348e | |||
| e5cd53a1f5 | |||
| de4d86a522 | |||
| a7620bdaa7 |
18 changed files with 469 additions and 120 deletions
|
|
@ -1,10 +1,41 @@
|
||||||
Export any reports you want to keep.
|
# Rolling over and setting up for a new conference
|
||||||
|
|
||||||
Take a database dump:
|
This website collects a limited amount of personally identifiable information for the purposes of organizing a conference. In the interests of security, we've chosen to reset the site for each conference to limit the amount of information that could potentially ever be exposed in the event of a vulnerability.
|
||||||
|
|
||||||
|
|
||||||
|
## Step 1: Take a snapshot of the public conference site
|
||||||
|
|
||||||
|
Method described here:
|
||||||
|
|
||||||
|
https://f.sfconservancy.org/Conservancy/2024.fossy.us/src/branch/main/README.md
|
||||||
|
|
||||||
|
|
||||||
|
## Step 2: Download any reports for archive use
|
||||||
|
|
||||||
|
This might include the attendees, talks proposed and speakers.
|
||||||
|
|
||||||
|
|
||||||
|
## Step 3: Take a database backup
|
||||||
|
|
||||||
|
This is useful in case we miss something. Run:
|
||||||
|
|
||||||
fab download-postgres-db
|
fab download-postgres-db
|
||||||
|
|
||||||
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.
|
|
||||||
|
## Step 4: Delete any uploaded files/reports
|
||||||
|
|
||||||
|
On the server, run:
|
||||||
|
|
||||||
|
rm -rf /srv/symposion_app/site_media/*
|
||||||
|
|
||||||
|
|
||||||
|
## Step 4: Reset the database
|
||||||
|
|
||||||
|
Remove all accounts, tickets, invoices, talks, etc.
|
||||||
|
|
||||||
|
Probably the easiest approach is to select and delete all non-staff "User" records via Django Admin and letting the cascading deletes handle any relationships.
|
||||||
|
|
||||||
|
I've previously also used the commands below:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo -u postgres psql symposion
|
$ sudo -u postgres psql symposion
|
||||||
|
|
@ -70,10 +101,27 @@ delete from auth_user where is_staff = false;
|
||||||
|
|
||||||
Set any remaining account `completed_registration` to false.
|
Set any remaining account `completed_registration` to false.
|
||||||
|
|
||||||
|
|
||||||
|
# Step 5: Update conference details and dates
|
||||||
|
|
||||||
Add a new Conference entry in Django Admin and update the `CONFERENCE_ID` in pinaxcon/settings.py. Also update the conference dates.
|
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.
|
Find and update all uses of 2026 and the conference dates in this codebase.
|
||||||
|
|
||||||
Update flatpages such as the "/" home page.
|
Update flatpages such as the "/" home page.
|
||||||
|
|
||||||
Update the Django "site" in the Admin.
|
Update the Django "site" in the Admin.
|
||||||
|
|
||||||
|
|
||||||
|
# Step 6: Update tracks/miniconfs
|
||||||
|
|
||||||
|
These are done in code. See commits from previous years adding/modifying tracks. Essentially you need to modify `pinaxcon/proposals/admin.py`, `.../forms.py`, `.../models.py` and `pinaxcon/settings.py`. Then run `makemigrations` and `migrate`.
|
||||||
|
|
||||||
|
In Django Admin, add "conference sections" matching the tracks, "proposal sections" matching the sections and then "proposal kinds" matching the proposal sections. For any re-use proposal kinds, be sure you've updated them to the current year's section.
|
||||||
|
|
||||||
|
After adding tracks, run `manage.py create_review_permissions`.
|
||||||
|
|
||||||
|
|
||||||
|
# Step 7: Update teams
|
||||||
|
|
||||||
|
In the Django Admin, update the teams to match the tracks. These will be used to control who has permission to review which proposals.
|
||||||
|
|
|
||||||
9
fabfile.py
vendored
9
fabfile.py
vendored
|
|
@ -75,13 +75,10 @@ ns.configure({
|
||||||
# Built-in Fabric config.
|
# Built-in Fabric config.
|
||||||
'run': {
|
'run': {
|
||||||
'echo': True,
|
'echo': True,
|
||||||
# Needed so local commands work. Can also use FABRIC_RUN_REPLACE_ENV.
|
|
||||||
'replace_env': False,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
# Our custom project config.
|
# Our custom project config.
|
||||||
'env': {
|
'env': {
|
||||||
'branch': 'fossy2025',
|
'branch': 'fossy2026',
|
||||||
'app_user': 'www-data',
|
'app_user': 'www-data',
|
||||||
'db_name': 'symposion',
|
'db_name': 'symposion',
|
||||||
'project_dir': '/srv/symposion_app',
|
'project_dir': '/srv/symposion_app',
|
||||||
|
|
@ -93,7 +90,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://2025.fossy.us/',
|
'url': 'https://2026.fossy.ca/',
|
||||||
'domain': '2025.fossy.us',
|
'domain': '2026.fossy.ca',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@
|
||||||
"model": "symposion_conference.conference",
|
"model": "symposion_conference.conference",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
"fields": {
|
"fields": {
|
||||||
"title": "FOSSY 2025",
|
"title": "FOSSY 2026",
|
||||||
"start_date": "2025-07-31",
|
"start_date": "2026-08-06",
|
||||||
"end_date": "2025-08-03",
|
"end_date": "2026-08-09",
|
||||||
"timezone": "US/Pacific"
|
"timezone": "US/Pacific"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
"model": "sites.site",
|
"model": "sites.site",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
"fields": {
|
"fields": {
|
||||||
"domain": "2025.fossy.us",
|
"domain": "2026.fossy.ca",
|
||||||
"name": "FOSSY 2025"
|
"name": "FOSSY 2026"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -21,17 +21,17 @@ class CategoryAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
models_to_register = [
|
models_to_register = [
|
||||||
|
models.CampKDEProposal,
|
||||||
models.DatabasesProposal,
|
models.DatabasesProposal,
|
||||||
models.DistrosProposal,
|
models.FOSSAndResearchComputingProposal,
|
||||||
models.FOSSInDailyLifeProposal,
|
models.FOSSInDailyLifeProposal,
|
||||||
models.FOSSInEducationProposal,
|
models.FediverseProposal,
|
||||||
models.LegalIssuesProposal,
|
models.GNUToolchainProposal,
|
||||||
models.LibreGraphicsProposal,
|
models.LinuxKernelProposal,
|
||||||
models.LinuxKernalProposal,
|
models.OpenSourceGovernanceAndCommunitySustainabilityProposal,
|
||||||
models.MobileDevicesProposal,
|
models.RightToRepairProposal,
|
||||||
models.P2PLocalFirstProposal,
|
|
||||||
models.ScienceOfCommunityProposal,
|
models.ScienceOfCommunityProposal,
|
||||||
models.SupportingUserGroupsProposal,
|
models.StudentPresentationsProposal,
|
||||||
models.WildCardProposal,
|
models.WildCardProposal,
|
||||||
models.XMPPProposal,
|
models.XMPPProposal,
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -61,15 +61,15 @@ class MiniconfProposalForm(ProposalForm):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DatabasesProposalForm(MiniconfProposalForm):
|
class CampKDEProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.DatabasesProposal
|
model = models.CampKDEProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class DistrosProposalForm(MiniconfProposalForm):
|
class DatabasesProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.DistrosProposal
|
model = models.DatabasesProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -79,51 +79,27 @@ class FOSSInDailyLifeProposalForm(MiniconfProposalForm):
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class FOSSInEducationProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.FOSSInEducationProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LegalIssuesProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.LegalIssuesProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LibreGraphicsProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.LibreGraphicsProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LinuxKernelProposalForm(MiniconfProposalForm):
|
class LinuxKernelProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.LinuxKernalProposal
|
model = models.LinuxKernelProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class MobileDevicesProposalForm(MiniconfProposalForm):
|
class OpenSourceGovernanceAndCommunitySustainabilityProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.MobileDevicesProposal
|
model = models.OpenSourceGovernanceAndCommunitySustainabilityProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class P2PLocalFirstProposalForm(MiniconfProposalForm):
|
class RightToRepairProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.P2PLocalFirstProposal
|
model = models.RightToRepairProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
class WildCardProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.ScienceOfCommunityProposal
|
model = models.WildCardProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class SupportingUserGroupsProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.SupportingUserGroupsProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -133,7 +109,31 @@ class XMPPProposalForm(MiniconfProposalForm):
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class WildCardProposalForm(MiniconfProposalForm):
|
class FediverseProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.WildCardProposal
|
model = models.FediverseProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.ScienceOfCommunityProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class FOSSAndResearchComputingProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.FOSSAndResearchComputingProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class StudentPresentationsProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.StudentPresentationsProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class GNUToolchainProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.GNUToolchainProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
|
||||||
138
pinaxcon/proposals/migrations/0019_auto_20260319_0640.py
Normal file
138
pinaxcon/proposals/migrations/0019_auto_20260319_0640.py
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
# Generated by Django 2.2.28 on 2026-03-19 06:40
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_schedule', '0009_presentation_videos'),
|
||||||
|
('symposion_speakers', '0014_auto_20260319_0640'),
|
||||||
|
('symposion_proposals', '0004_auto_20260319_0640'),
|
||||||
|
('symposion_reviews', '0001_initial'),
|
||||||
|
('proposals', '0018_mobiledevicesproposal'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CampKDEProposal',
|
||||||
|
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': 'Camp KDE talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='OpenSourceGovernanceAndCommunitySustainabilityProposal',
|
||||||
|
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': 'Open Source Governance and Community Sustainability talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='RightToRepairProposal',
|
||||||
|
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': 'Right to Repair talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='LinuxKernalProposal',
|
||||||
|
new_name='LinuxKernelProposal',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='fossineducationproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='legalissuesproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='libregraphicsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='mobiledevicesproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='p2plocalfirstproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='scienceofcommunityproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='supportingusergroupsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='linuxkernelproposal',
|
||||||
|
options={'verbose_name': 'Linux Kernel talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='DistrosProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='FOSSInEducationProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='LegalIssuesProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='LibreGraphicsProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='MobileDevicesProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='P2PLocalFirstProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='ScienceOfCommunityProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='SupportingUserGroupsProposal',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
# Generated by Django 2.2.28 on 2026-04-01 02:03
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_proposals', '0004_auto_20260319_0640'),
|
||||||
|
('proposals', '0019_auto_20260319_0640'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FediverseProposal',
|
||||||
|
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': 'Fediverse talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FOSSAndResearchComputingProposal',
|
||||||
|
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 and Research Computing talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='GNUToolchainProposal',
|
||||||
|
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': 'GNUToolchain and other development tools talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ScienceOfCommunityProposal',
|
||||||
|
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': 'Science of Community talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='StudentPresentationsProposal',
|
||||||
|
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': 'Student talks and presentations proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -160,59 +160,39 @@ class MiniconfSessionProposal(Proposal):
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
class CampKDEProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Camp KDE talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class DatabasesProposal(MiniconfSessionProposal):
|
class DatabasesProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Databases talk proposal"
|
verbose_name = "Databases talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class DistrosProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Distros talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "FOSS in Daily Life talk proposal"
|
verbose_name = "FOSS in Daily Life talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class FOSSInEducationProposal(MiniconfSessionProposal):
|
class LinuxKernelProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "FOSS in Education talk proposal"
|
verbose_name = "Linux Kernel talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LegalIssuesProposal(MiniconfSessionProposal):
|
class OpenSourceGovernanceAndCommunitySustainabilityProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Legal Issues talk proposal"
|
verbose_name = "Open Source Governance and Community Sustainability talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LibreGraphicsProposal(MiniconfSessionProposal):
|
class RightToRepairProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Libre Graphics talk proposal"
|
verbose_name = "Right to Repair talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LinuxKernalProposal(MiniconfSessionProposal):
|
class WildCardProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Linux Kernal talk proposal"
|
verbose_name = "Wild card talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class MobileDevicesProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Mobile Devices 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 XMPPProposal(MiniconfSessionProposal):
|
||||||
|
|
@ -220,6 +200,26 @@ class XMPPProposal(MiniconfSessionProposal):
|
||||||
verbose_name = "XMPP talk proposal"
|
verbose_name = "XMPP talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class WildCardProposal(MiniconfSessionProposal):
|
class FediverseProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Wild card talk proposal"
|
verbose_name = "Fediverse talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class ScienceOfCommunityProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Science of Community talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class FOSSAndResearchComputingProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "FOSS and Research Computing talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class StudentPresentationsProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Student talks and presentations proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class GNUToolchainProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "GNUToolchain and other development tools talk proposal"
|
||||||
|
|
|
||||||
|
|
@ -397,21 +397,21 @@ MARKDOWNIFY = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFERENCE_ID = 4
|
CONFERENCE_ID = 5
|
||||||
PROPOSAL_FORMS = {
|
PROPOSAL_FORMS = {
|
||||||
|
"camp-kde": "pinaxcon.proposals.forms.CampKDEProposalForm",
|
||||||
"databases": "pinaxcon.proposals.forms.DatabasesProposalForm",
|
"databases": "pinaxcon.proposals.forms.DatabasesProposalForm",
|
||||||
"distros": "pinaxcon.proposals.forms.DistrosProposalForm",
|
"fediverse": "pinaxcon.proposals.forms.FediverseProposalForm",
|
||||||
|
"foss-and-research-computing": "pinaxcon.proposals.forms.FOSSAndResearchComputingProposalForm",
|
||||||
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
||||||
"foss-in-education": "pinaxcon.proposals.forms.FOSSInEducationProposalForm",
|
"gnu-toolchain": "pinaxcon.proposals.forms.GNUToolchainProposalForm",
|
||||||
"legal-issues": "pinaxcon.proposals.forms.LegalIssuesProposalForm",
|
|
||||||
"libre-graphics": "pinaxcon.proposals.forms.LibreGraphicsProposalForm",
|
|
||||||
"linux-kernel": "pinaxcon.proposals.forms.LinuxKernelProposalForm",
|
"linux-kernel": "pinaxcon.proposals.forms.LinuxKernelProposalForm",
|
||||||
"mobile-devices": "pinaxcon.proposals.forms.MobileDevicesProposalForm",
|
"open-source-governance": "pinaxcon.proposals.forms.OpenSourceGovernanceAndCommunitySustainabilityProposalForm",
|
||||||
"peer-to-peer-local-first": "pinaxcon.proposals.forms.P2PLocalFirstProposalForm",
|
"right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
|
||||||
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
||||||
"supporting-user-groups": "pinaxcon.proposals.forms.SupportingUserGroupsProposalForm",
|
"student-presentations": "pinaxcon.proposals.forms.StudentPresentationsProposalForm",
|
||||||
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
|
||||||
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
||||||
|
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
||||||
}
|
}
|
||||||
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
||||||
|
|
||||||
|
|
@ -566,8 +566,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(2025, 7, 31))
|
CONF_START = CONF_TZINFO.localize(datetime(2026, 8, 6))
|
||||||
CONF_END = CONF_TZINFO.localize(datetime(2025, 8, 3))
|
CONF_END = CONF_TZINFO.localize(datetime(2026, 8, 9))
|
||||||
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,7 +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>
|
<div class="alert alert-primary">Please note that accounts from previous years are not transferred for privacy reasons.</div>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|bootstrap }}
|
{{ form|bootstrap }}
|
||||||
{% if redirect_field_value %}
|
{% if redirect_field_value %}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,11 @@
|
||||||
{# NOTE: This template is not used due to flatpages. #}
|
{# NOTE: This template is not used due to flatpages. #}
|
||||||
|
|
||||||
{# Description duplicated because you can't include the same block twice. #}
|
{# Description duplicated because you can't include the same block twice. #}
|
||||||
{% 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 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 Vancouver, Canada - August 6th – 9th 2026 at University of British Columbia.{% 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 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 Vancouver, Canada - August 6th – 9th 2026 at University of British Columbia.{% endblock %}
|
||||||
|
|
||||||
{% block head_title %}FOSSY 2025: The third Free and Open Source Software Yearly conference{% endblock %}
|
{% block head_title %}FOSSY 2026: The third Free and Open Source Software Yearly conference{% endblock %}
|
||||||
|
|
||||||
{% block body_class %}home{% endblock %}
|
{% block body_class %}home{% endblock %}
|
||||||
|
|
||||||
|
|
@ -16,8 +16,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 2025</h1>
|
<h1 class="f-subheadline f-headline-ns b lh-solid tracked-tight mv0">FOSSY 2026</h1>
|
||||||
<h2 class="f3 f2-ns b lh-solid mt0 mb3">July 31st – August 3rd 2025 — Portland, OR</h2>
|
<h2 class="f3 f2-ns b lh-solid mt0 mb3">August 6th – 9th 2026 — University of British Columbia, Canada</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>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section id="content">
|
<section id="content">
|
||||||
<h1 class="f3 mt0 mb4">FOSS is back in Portland, OR at Portland State University!</h1>
|
<h1 class="f3 mt0 mb4">FOSS in Vancouver, Canada at University of British Columbia!</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>
|
||||||
|
|
|
||||||
|
|
@ -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 2025
|
FOSSY 2026
|
||||||
</a>
|
</a>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +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">July 31st – August 3rd 2025
|
<text transform="translate(84.43 102.23)" font-size="15" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro">August 6th – 9th 2026
|
||||||
</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: 116 KiB After Width: | Height: | Size: 116 KiB |
|
|
@ -128,9 +128,9 @@
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 pb-4">
|
<div class="col-md-4 pb-4">
|
||||||
<strong>FOSSY 2025</strong> <br>
|
<strong>FOSSY 2026</strong> <br>
|
||||||
July 31st – August 3rd 2025 <br>
|
August 6th – 9th 2026 <br>
|
||||||
Portland, OR<br>
|
Vancouver, Canada<br>
|
||||||
Timezone: PDT - UTC-7 <br>
|
Timezone: PDT - UTC-7 <br>
|
||||||
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="bi-envelope-fill"></i></a>
|
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="bi-envelope-fill"></i></a>
|
||||||
<a href="https://x.com/conservancy" alt="Twitter"><i class="bi-twitter-x"></i></a>
|
<a href="https://x.com/conservancy" alt="Twitter"><i class="bi-twitter-x"></i></a>
|
||||||
|
|
@ -145,7 +145,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>
|
||||||
© 2025 <a href="https://sfconservancy.org/">Software Freedom Conservancy</a><br>
|
© 2026 <a href="https://sfconservancy.org/">Software Freedom Conservancy</a><br>
|
||||||
<a href="/credits/">Credits</a>
|
<a href="/credits/">Credits</a>
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
28
vendor/symposion/symposion/proposals/migrations/0004_auto_20260319_0640.py
vendored
Normal file
28
vendor/symposion/symposion/proposals/migrations/0004_auto_20260319_0640.py
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Generated by Django 2.2.28 on 2026-03-19 06:40
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='proposalbase',
|
||||||
|
name='abstract',
|
||||||
|
field=models.TextField(help_text="This will appear in the conference programme. Up to about 500 words. This field supports <a href='https://daringfireball.net/projects/markdown/syntax' target='_blank'>Markdown</a>, with limitations on allowed elements.", verbose_name='Abstract'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='proposalbase',
|
||||||
|
name='private_abstract',
|
||||||
|
field=models.TextField(help_text="This will only be shown to organisers and reviewers. You should provide any details about your proposal that you don't want to be public here. This field supports <a href='https://daringfireball.net/projects/markdown/syntax' target='_blank'>Markdown</a>, with limitations on allowed elements.", verbose_name='Private Abstract'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='proposalbase',
|
||||||
|
name='technical_requirements',
|
||||||
|
field=models.TextField(blank=True, help_text="Speakers will be provided with: Internet access, power, projector, audio. If you require anything in addition, please list your technical requirements here. Such as: a static IP address, A/V equipment or will be demonstrating security-related techniques on the conference network. This field supports <a href='https://daringfireball.net/projects/markdown/syntax' target='_blank'>Markdown</a>, with limitations on allowed elements.", verbose_name='Special Requirements'),
|
||||||
|
),
|
||||||
|
]
|
||||||
2
vendor/symposion/symposion/schedule/views.py
vendored
2
vendor/symposion/symposion/schedule/views.py
vendored
|
|
@ -305,7 +305,7 @@ def schedule_json(request):
|
||||||
|
|
||||||
class EventFeed(ICalFeed):
|
class EventFeed(ICalFeed):
|
||||||
|
|
||||||
product_id = '-//2025.fossy.us/schedule//EN'
|
product_id = '-//2026.fossy.ca/schedule//EN'
|
||||||
timezone = settings.TIME_ZONE
|
timezone = settings.TIME_ZONE
|
||||||
filename = 'conference.ics'
|
filename = 'conference.ics'
|
||||||
|
|
||||||
|
|
|
||||||
23
vendor/symposion/symposion/speakers/migrations/0014_auto_20260319_0640.py
vendored
Normal file
23
vendor/symposion/symposion/speakers/migrations/0014_auto_20260319_0640.py
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 2.2.28 on 2026-03-19 06:40
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_speakers', '0013_merge_20260219_2116'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='speaker',
|
||||||
|
name='biography',
|
||||||
|
field=models.TextField(blank=True, help_text="This will appear on the conference website and in the programme. Please write in the third person, eg 'Alice is a Moblin hacker...', 150-200 words. This field supports <a href='https://daringfireball.net/projects/markdown/syntax' target='_blank'>Markdown</a>, with limitations on allowed elements.", verbose_name='Biography'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='speaker',
|
||||||
|
name='experience',
|
||||||
|
field=models.TextField(blank=True, help_text="Have you had any experience presenting elsewhere? If so, we'd like to know. Anything you put here will only be seen by the organisers and reviewers; use it to convince them why they should accept your proposal. This field supports <a href='https://daringfireball.net/projects/markdown/syntax' target='_blank'>Markdown</a>, with limitations on allowed elements.", verbose_name='Speaking experience'),
|
||||||
|
),
|
||||||
|
]
|
||||||
Loading…
Add table
Reference in a new issue