Compare commits
10 commits
6557e60bfc
...
5bf63fe046
Author | SHA1 | Date | |
---|---|---|---|
5bf63fe046 | |||
646735252f | |||
711fde5a2f | |||
28c73b4295 | |||
64a94cc807 | |||
4a98404226 | |||
1372f4d27b | |||
9815e1131d | |||
ba1def7e23 | |||
a35192b26a |
11 changed files with 139 additions and 26 deletions
|
@ -61,91 +61,103 @@ class MiniconfProposalForm(ProposalForm):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class AIAndMachineLearningForm(MiniconfProposalForm):
|
class AIAndMachineLearningProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.AIAndMachineLearningProposal
|
model = models.AIAndMachineLearningProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class DiversityEquityAndInclusionForm(MiniconfProposalForm):
|
class DiversityEquityAndInclusionProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.DiversityEquityAndInclusionProposal
|
model = models.DiversityEquityAndInclusionProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class FOSSAndARM64Form(MiniconfProposalForm):
|
class FOSSAndARM64ProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.FOSSAndARM64Proposal
|
model = models.FOSSAndARM64Proposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class FOSSFundingandEconomicsForm(MiniconfProposalForm):
|
class FOSSFundingandEconomicsProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.FOSSFundingandEconomicsProposal
|
model = models.FOSSFundingandEconomicsProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class FOSSInDailyLifeForm(MiniconfProposalForm):
|
class FOSSInDailyLifeProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.FOSSInDailyLifeProposal
|
model = models.FOSSInDailyLifeProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class FOSSInEducationForm(MiniconfProposalForm):
|
class FOSSInEducationProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.FOSSInEducationProposal
|
model = models.FOSSInEducationProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class LicensingAndLegalIssuesForm(MiniconfProposalForm):
|
class KeynotePanelProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.KeynotePanelProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class LicensingAndLegalIssuesProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.LicensingAndLegalIssuesProposal
|
model = models.LicensingAndLegalIssuesProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class MobileDeviceUserFreedomForm(MiniconfProposalForm):
|
class MobileDeviceUserFreedomProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.MobileDeviceUserFreedomProposal
|
model = models.MobileDeviceUserFreedomProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class ReproducibilityForm(MiniconfProposalForm):
|
class ReproducibilityProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.ReproducibilityProposal
|
model = models.ReproducibilityProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class RightToRepairForm(MiniconfProposalForm):
|
class RightToRepairProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.RightToRepairProposal
|
model = models.RightToRepairProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class ScienceOfCommunityForm(MiniconfProposalForm):
|
class SeleniumProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.SeleniumProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.ScienceOfCommunityProposal
|
model = models.ScienceOfCommunityProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class MemberProjectsForm(MiniconfProposalForm):
|
class MemberProjectsProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.MemberProjectsProposal
|
model = models.MemberProjectsProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class SupportingUserGroupsForm(MiniconfProposalForm):
|
class SupportingUserGroupsProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.SupportingUserGroupsProposal
|
model = models.SupportingUserGroupsProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class XMPPForm(MiniconfProposalForm):
|
class XMPPProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.XMPPProposal
|
model = models.XMPPProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class WildCardForm(MiniconfProposalForm):
|
class WildCardProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.WildCardProposal
|
model = models.WildCardProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
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',),
|
||||||
|
),
|
||||||
|
]
|
|
@ -190,6 +190,11 @@ class FOSSInEducationProposal(MiniconfSessionProposal):
|
||||||
verbose_name = "FOSS in Education talk proposal"
|
verbose_name = "FOSS in Education talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class KeynotePanelProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Keynote panel talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LicensingAndLegalIssuesProposal(MiniconfSessionProposal):
|
class LicensingAndLegalIssuesProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Licensing and Legal Issues talk proposal"
|
verbose_name = "Licensing and Legal Issues talk proposal"
|
||||||
|
@ -215,6 +220,11 @@ class ScienceOfCommunityProposal(MiniconfSessionProposal):
|
||||||
verbose_name = "Science of Community talk proposal"
|
verbose_name = "Science of Community talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class SeleniumProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Selenium talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class MemberProjectsProposal(MiniconfSessionProposal):
|
class MemberProjectsProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "SFC Member Projects talk proposal"
|
verbose_name = "SFC Member Projects talk proposal"
|
||||||
|
|
|
@ -377,15 +377,17 @@ PROPOSAL_FORMS = {
|
||||||
"foss-funding-and-economics": "pinaxcon.proposals.forms.FOSSFundingandEconomicsProposalForm",
|
"foss-funding-and-economics": "pinaxcon.proposals.forms.FOSSFundingandEconomicsProposalForm",
|
||||||
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
||||||
"foss-in-education": "pinaxcon.proposals.forms.FOSSInEducationProposalForm",
|
"foss-in-education": "pinaxcon.proposals.forms.FOSSInEducationProposalForm",
|
||||||
|
"keynote-panel": "pinaxcon.proposals.forms.KeynotePanelProposalForm",
|
||||||
"licensing-and-legal-issues": "pinaxcon.proposals.forms.LicensingAndLegalIssuesProposalForm",
|
"licensing-and-legal-issues": "pinaxcon.proposals.forms.LicensingAndLegalIssuesProposalForm",
|
||||||
"mobile-device-user-freedom": "pinaxcon.proposals.forms.MobileDeviceUserFreedomProposalForm",
|
"mobile-device-user-freedom": "pinaxcon.proposals.forms.MobileDeviceUserFreedomProposalForm",
|
||||||
"reproducibility": "pinaxcon.proposals.forms.ReproducibilityProposalForm",
|
"reproducibility": "pinaxcon.proposals.forms.ReproducibilityProposalForm",
|
||||||
"right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
|
"right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
|
||||||
|
"selenium": "pinaxcon.proposals.forms.SeleniumProposalForm",
|
||||||
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
||||||
"member-projects": "pinaxcon.proposals.forms.MemberProjectsProposalForm",
|
"member-projects": "pinaxcon.proposals.forms.MemberProjectsProposalForm",
|
||||||
"supporting-user-groups": "pinaxcon.proposals.forms.SupportingUserGroupsProposalForm",
|
"supporting-user-groups": "pinaxcon.proposals.forms.SupportingUserGroupsProposalForm",
|
||||||
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
||||||
"wildcard": "pinaxcon.proposals.forms.WildCardProposalForm",
|
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
||||||
}
|
}
|
||||||
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
<video controls style="max-width: 640px">
|
{% for v in presentation.youtube_videos %}
|
||||||
{% for video in presentation.videos_split %}
|
<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>
|
||||||
<source src="{{ video }}">
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</video>
|
{% if v.other_videos %}
|
||||||
<p style="margin-top: 1rem">Available formats:</p>
|
<video controls style="max-width: 640px">
|
||||||
|
{% for video in presentation.other_videos %}
|
||||||
|
<source src="{{ video }}">
|
||||||
|
{% endfor %}
|
||||||
|
</video>
|
||||||
|
{% 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
|
||||||
|
|
|
@ -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/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…
Reference in a new issue