add conference videos publishing date
This commit is contained in:
parent
305236efad
commit
b365364a56
|
@ -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(),
|
||||
|
|
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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+'>'
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
27
cfp/tests.py
27
cfp/tests.py
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue