add conference videos publishing date

This commit is contained in:
Élie Bouttier 2017-11-27 21:17:20 +01:00
parent 305236efad
commit b365364a56
5 changed files with 92 additions and 8 deletions

View File

@ -260,7 +260,7 @@ class ConferenceForm(forms.ModelForm):
model = Conference
fields = [
'name', 'venue', 'city', 'contact_email', 'schedule_publishing_date', 'schedule_redirection_url',
'volunteers_opening_date', 'volunteers_closing_date', 'reply_email', 'secure_domain', 'staff',
'volunteers_opening_date', 'volunteers_closing_date', 'video_publishing_date', 'reply_email', 'secure_domain', 'staff',
]
widgets = {
'staff': UsersWidget(),

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-11-27 19:59
from __future__ import unicode_literals
import cfp.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cfp', '0020_auto_20171116_0940'),
]
operations = [
migrations.AddField(
model_name='conference',
name='video_publishing_date',
field=models.DateTimeField(blank=True, default=None, null=True, verbose_name='Video publishing date'),
),
migrations.AlterField(
model_name='room',
name='capacity',
field=models.IntegerField(default=0, verbose_name='Capacity'),
),
migrations.AlterField(
model_name='room',
name='label',
field=models.CharField(blank=True, default='', max_length=256, verbose_name='Label'),
),
migrations.AlterField(
model_name='room',
name='name',
field=models.CharField(blank=True, default='', max_length=256, verbose_name='Name'),
),
migrations.AlterField(
model_name='talk',
name='description',
field=models.TextField(help_text='This description will be visible on the program.', verbose_name='Description of your talk'),
),
migrations.AlterField(
model_name='talk',
name='materials',
field=models.FileField(blank=True, help_text='You can use this field to share some materials related to your intervention.', null=True, upload_to=cfp.models.talks_materials_destination, verbose_name='Materials'),
),
migrations.AlterField(
model_name='talk',
name='notes',
field=models.TextField(blank=True, help_text='If you have any constraint or if you have anything that may help you to select your talk, like a video or slides of your talk, please write it down here. This field will only be visible by organizers.', verbose_name='Message to organizers'),
),
]

View File

@ -41,6 +41,7 @@ class Conference(models.Model):
help_text=_('If specified, schedule tab will redirect to this URL.'))
volunteers_opening_date = models.DateTimeField(null=True, blank=True, default=None, verbose_name=_('Volunteers enrollment opening date'))
volunteers_closing_date = models.DateTimeField(null=True, blank=True, default=None, verbose_name=_('Volunteers enrollment closing date'))
video_publishing_date = models.DateTimeField(null=True, blank=True, default=None, verbose_name=_('Video publishing date'))
custom_css = models.TextField(blank=True)
external_css_link = models.URLField(blank=True)
@ -67,6 +68,10 @@ class Conference(models.Model):
def schedule_available(self):
return self.schedule_publishing_date and self.schedule_publishing_date <= timezone.now()
@property
def videos_available(self):
return self.video_publishing_date and self.video_publishing_date <= timezone.now()
def from_email(self):
return self.name+' <'+self.contact_email+'>'

View File

@ -195,12 +195,13 @@ class Program:
elt.text = ', '.join(map(lambda x: x.strip(), self.conference.venue.split('\n')))
elt = ET.SubElement(conference, 'city')
elt.text = self.conference.city
elt = ET.SubElement(conference, 'start_date')
elt.text = sorted(self.days.keys())[0].strftime('%Y-%m-%d')
elt = ET.SubElement(conference, 'end_date')
elt.text = sorted(self.days.keys(), reverse=True)[0].strftime('%Y-%m-%d')
elt = ET.SubElement(conference, 'days_count')
elt.text = str(len(self.days))
if self.days:
elt = ET.SubElement(conference, 'start_date')
elt.text = sorted(self.days.keys())[0].strftime('%Y-%m-%d')
elt = ET.SubElement(conference, 'end_date')
elt.text = sorted(self.days.keys(), reverse=True)[0].strftime('%Y-%m-%d')
elt = ET.SubElement(conference, 'days_count')
elt.text = str(len(self.days))
for index, day in enumerate(sorted(self.days.keys())):
day_elt = ET.SubElement(schedule, 'day', index=str(index+1), date=day.strftime('%Y-%m-%d'))
@ -252,7 +253,7 @@ class Program:
if talk.materials:
elt = ET.SubElement(links_elt, 'link', tag='slides')
elt.text = talk.materials.url
if talk.video:
if talk.video and self.conference.videos_available:
elt = ET.SubElement(links_elt, 'link', tag='video')
elt.text = talk.video

View File

@ -359,6 +359,8 @@ class StaffTest(TestCase):
conf = Conference.objects.get(site=site)
conf.name = 'PonyConf'
conf.save()
room1 = Room.objects.create(site=site, name='Room 1')
room2 = Room.objects.create(site=site, name='Room 2')
category_conf = TalkCategory.objects.create(site=site, name='Conference', label='conference')
category_ws = TalkCategory.objects.create(site=site, name='Workshop', label='workshop')
speaker1 = Participant.objects.create(site=site, name='Speaker 1', email='1@example.org')
@ -580,6 +582,31 @@ class StaffTest(TestCase):
conf.save()
self.assertFalse(conf.disclosed_acceptances)
def test_conference_videos_available(self):
conf = Conference.objects.get(name='PonyConf')
talk = Talk.objects.get(title='Talk 1')
talk.room = Room.objects.filter(site=conf.site).first()
talk.start_date = timezone.now()
talk.duration = 60
talk.accepted = True
talk.video = 'this-is-a-video-location'
talk.save()
xml_url = reverse('public-schedule') + 'xml/'
conf.schedule_publishing_date = timezone.now() - timedelta(hours=1)
conf.video_publishing_date = None
conf.save()
self.assertContains(self.client.get(xml_url), 'Talk 1')
self.assertFalse(conf.videos_available)
self.assertNotContains(self.client.get(xml_url), talk.video)
conf.video_publishing_date = timezone.now() + timedelta(hours=1)
conf.save()
self.assertFalse(conf.videos_available)
self.assertNotContains(self.client.get(xml_url), talk.video)
conf.video_publishing_date = timezone.now() - timedelta(hours=1)
conf.save()
self.assertTrue(conf.videos_available)
self.assertContains(self.client.get(xml_url), talk.video)
def test_talk_decide(self):
talk = Talk.objects.get(title='Talk 1')
talk.accepted = None