From e8318b68065bab1e019c9b7eb3784678e9f0a28c Mon Sep 17 00:00:00 2001 From: Emilie Date: Wed, 15 Mar 2017 10:26:22 +0100 Subject: [PATCH] [Vertigo M&C] live streaming --- app/local_settings.py | 1 + .../core/templatetags/organization_tags.py | 4 + .../0015_livestreaming_event_location.py | 22 +++ app/organization/media/models.py | 3 +- app/organization/media/views.py | 8 +- app/organization/projects/models.py | 8 +- .../static/img/vertigo-starts/vertigo_tx.png | Bin 44086 -> 0 bytes .../src/js/modules/live-streaming-counter.js | 5 +- .../base/static/src/sass/modules/_all.scss | 2 + .../src/sass/modules/_live-streaming.scss | 53 ++++++ .../templates/media/live_streaming/base.html | 174 ++++++++++++++++++ .../live_streaming/live_streaming_detail.html | 53 ++++++ .../base/templates/media/media_base.html | 152 +++++++++++++++ 13 files changed, 476 insertions(+), 9 deletions(-) create mode 100644 app/organization/media/migrations/0015_livestreaming_event_location.py delete mode 100644 app/themes/base/static/img/vertigo-starts/vertigo_tx.png create mode 100644 app/themes/base/static/src/sass/modules/_live-streaming.scss create mode 100644 app/themes/base/templates/media/live_streaming/base.html create mode 100644 app/themes/base/templates/media/live_streaming/live_streaming_detail.html create mode 100644 app/themes/base/templates/media/media_base.html diff --git a/app/local_settings.py b/app/local_settings.py index 4d77d167..592145ad 100644 --- a/app/local_settings.py +++ b/app/local_settings.py @@ -87,6 +87,7 @@ ADMIN_MENU_ORDER = ( 'organization-core.LinkType')), (_('Media'), ('organization-media.Media', 'organization-media.Playlist', + 'organization-media.LiveStreaming', 'organization-media.MediaCategory', (_('Media Library'), 'fb_browse'), )), diff --git a/app/organization/core/templatetags/organization_tags.py b/app/organization/core/templatetags/organization_tags.py index a3db871a..7b66bf79 100644 --- a/app/organization/core/templatetags/organization_tags.py +++ b/app/organization/core/templatetags/organization_tags.py @@ -238,3 +238,7 @@ def filter_content(dynamic_contents): else : dict["other"].append(dc) return dict + +@register.filter +def format_iso(date): + return date.isoformat() diff --git a/app/organization/media/migrations/0015_livestreaming_event_location.py b/app/organization/media/migrations/0015_livestreaming_event_location.py new file mode 100644 index 00000000..30c0286c --- /dev/null +++ b/app/organization/media/migrations/0015_livestreaming_event_location.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-03-14 18:32 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mezzanine_agenda', '0017_auto_20170222_1039'), + ('organization-media', '0014_livestreaming'), + ] + + operations = [ + migrations.AddField( + model_name='livestreaming', + name='event_location', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='live_streaming_location', to='mezzanine_agenda.EventLocation', verbose_name='Event Location'), + ), + ] diff --git a/app/organization/media/models.py b/app/organization/media/models.py index ffe49571..6baf0328 100644 --- a/app/organization/media/models.py +++ b/app/organization/media/models.py @@ -30,7 +30,7 @@ from mezzanine.core.models import RichText, Displayable, Slugged from mezzanine.core.fields import RichTextField, OrderField, FileField from mezzanine.utils.models import AdminThumbMixin, upload_to from organization.core.models import * -from mezzanine_agenda.models import Event +from mezzanine_agenda.models import Event, EventLocation from django.conf import settings import requests @@ -183,6 +183,7 @@ class LiveStreaming(Displayable): html5_url = models.URLField(_('html5 url'), max_length=1024, blank=True) youtube_id = models.CharField(_('youtube id'), max_length=64, blank=True, null=True) type = models.CharField(_('type'), max_length=32, choices=LIVE_STREAMING_TYPE_CHOICES, default='html5') + event_location = models.ForeignKey(EventLocation, verbose_name=_('Event Location'), related_name='live_streaming_location', blank=True, null=True, on_delete=models.SET_NULL) class Meta: verbose_name = "live streaming" diff --git a/app/organization/media/views.py b/app/organization/media/views.py index 8f89245c..0f1c8d25 100644 --- a/app/organization/media/views.py +++ b/app/organization/media/views.py @@ -25,6 +25,7 @@ from organization.media.models import * from organization.core.views import * from dal import autocomplete from django.core.exceptions import FieldDoesNotExist +from datetime import datetime # temporarily excluse not ready models EXCLUDED_MODELS = ("organizationplaylist", "personplaylist") @@ -132,4 +133,9 @@ class PlaylistOverlayView(SlugMixin, DetailView): class LiveStreamingDetailView(SlugMixin, DetailView): model = LiveStreaming - template_name='media/live_streaming_detail.html' + template_name='media/live_streaming/live_streaming_detail.html' + + def get_context_data(self, **kwargs): + context = super(LiveStreamingDetailView, self).get_context_data(**kwargs) + context['next_event'] = Event.objects.filter(location=self.object.event_location).filter(start__gt=datetime.now()).first() + return context diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py index 75116285..3d5d1498 100644 --- a/app/organization/projects/models.py +++ b/app/organization/projects/models.py @@ -336,12 +336,12 @@ class ProjectPublicData(models.Model): project = models.ForeignKey(Project, verbose_name=_('project'), related_name='public_data', blank=True, null=True, on_delete=models.SET_NULL) brief_description = models.CharField(_('brief description'), max_length=110, help_text="Brief description of the challenges faced by the project to be used for wider communication strategy (e.g. Twitter) (110 characters max).") - challenges_description = models.TextField(_('challenges description'), help_text="Full description of the challenges faced by the project (100-150 words).") + challenges_description = models.TextField(_('full description'), help_text="Full description of the challenges faced by the project (100-150 words).") technology_description = models.TextField(_('technology description'), help_text="Must include the elements to be made available to the artist with sufficient functional and implementation details for enabling him/her to elaborate his/her technical approach (100-200 words).") - objectives_description = models.TextField(_('objectives description'), help_text="What the project is looking to gain from the collaboration and what kind of artist would be suitable (100 – 150 words).") + objectives_description = models.TextField(_('objective description'), help_text="What the project is looking to gain from the collaboration and what kind of artist would be suitable (100 – 150 words).") resources_description = models.TextField(_('resource description'), help_text="Resources available to the artist -- e.g. office facility, studio facility, technical equipment, internet connection, laboratory, and periods of availability for artistic production, staff possibly allocated to the project, available budget for travel, consumables and equipment, etc... (50 – 100 words).") period = models.CharField(_('period of implementation'), max_length=128, help_text="Possible period of implementation (must be part of the project implementation workplan)") - image = models.FileField(_("Image"), max_length=1024, upload_to="user/images/%Y/%m/%d/", help_text="Representing the project") + image = models.FileField(_("Image"), max_length=1024, upload_to="images", help_text="Representing the project") image_credits = models.CharField(_('Image credits'), max_length=256, blank=True, null=True) class Meta: @@ -355,7 +355,7 @@ class ProjectPrivateData(models.Model): description = models.TextField(_('project description'), help_text="(500 - 1000 words)") affiliation = models.CharField(_('affiliation'), max_length=512) - commitment_letter = models.FileField(_("letter of commitment by the project coordinator"), max_length=1024, upload_to="user/documents/%Y/%m/%d/", help_text="Written on behalf of the whole project consortium, this letter will commit in implementing the collaboration of a residency application selected by the VERTIGO jury, on the conditions set by the project (in annex of letter: synthesis of all related information entered by project).") + commitment_letter = models.FileField(_("letter of commitment by the project coordinator"), max_length=1024, upload_to="Documents/%Y/%m/%d/", help_text="Written on behalf of the whole project consortium, this letter will commit in implementing the collaboration of a residency application selected by the VERTIGO jury, on the conditions set by the project (in annex of letter: synthesis of all related information entered by project).") persons = models.CharField(_('persons'), max_length=512, help_text="First name and last name of the persons from organization / project who will be part preliminary of the project team (separated by a comma)") class Meta: diff --git a/app/themes/base/static/img/vertigo-starts/vertigo_tx.png b/app/themes/base/static/img/vertigo-starts/vertigo_tx.png deleted file mode 100644 index 7f32d1a44b13e2d5aa0fff4b5d24d98b8ebbfbf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44086 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 ckk~Bo+s~I<&K|4_5dYz+'); } -function CountDownTimer(dt, id, video_id, video_url) +function CountDownTimer(dt, id, video_id/*, video_url*/) { var end = new Date(dt); @@ -52,7 +52,7 @@ function CountDownTimer(dt, id, video_id, video_url) $('#countdown-title').html('

'); $('#'+id).html('
'); $('#live').html('- Live !'); - switchVideo(video_id, video_url); + //switchVideo(video_id, video_url); return; } @@ -82,4 +82,3 @@ jQuery.fn.center = function () { $(window).scrollLeft()) + "px"); return this; } - diff --git a/app/themes/base/static/src/sass/modules/_all.scss b/app/themes/base/static/src/sass/modules/_all.scss index be0adf8b..53b1c05e 100755 --- a/app/themes/base/static/src/sass/modules/_all.scss +++ b/app/themes/base/static/src/sass/modules/_all.scss @@ -70,6 +70,8 @@ @import 'instagram'; @import 'hero'; @import 'overlay'; +@import 'live-streaming'; + // Typography modules @import 'dashed'; diff --git a/app/themes/base/static/src/sass/modules/_live-streaming.scss b/app/themes/base/static/src/sass/modules/_live-streaming.scss new file mode 100644 index 00000000..8fb6e446 --- /dev/null +++ b/app/themes/base/static/src/sass/modules/_live-streaming.scss @@ -0,0 +1,53 @@ +// -*- coding: utf-8 -*- + +// Copyright (c) 2016-2017 Ircam +// Copyright (c) 2016-2017 Jérémy Fabre + +// This file is part of mezzanine-organization. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +$module: ".page--live-streaming"; + +#{$module} { + + & .page__content { + + text-align: center; + + } + + video { + + } + + .overlay { + background: #FFFFFF; + position:relative; + top:-260px; + z-index:90; + color: white; + font-size:1.3em; + height: 720px; + } + + #countdown { + margin-top: 1em; + font-weight: bold; + color: red; + } + + + +} diff --git a/app/themes/base/templates/media/live_streaming/base.html b/app/themes/base/templates/media/live_streaming/base.html new file mode 100644 index 00000000..3e3fd0b7 --- /dev/null +++ b/app/themes/base/templates/media/live_streaming/base.html @@ -0,0 +1,174 @@ +{% extends "base.html" %} +{% load i18n mezzanine_tags keyword_tags organization_tags pages_tags %} + +{% block meta_title %}{{ page.meta_title }}{% endblock %} + +{% block meta_keywords %}{% metablock %} +{% keywords_for page as keywords %} +{% for keyword in keywords %} + {% if not forloop.first %}, {% endif %} + {{ keyword }} +{% endfor %} +{% endmetablock %}{% endblock %} + +{% block meta_description %}{% metablock %} +{{ page.description }} +{% endmetablock %}{% endblock %} + +{% block main %} + + {% block hero %} + {% endblock %} + +
+
+ +
+ +
+ {% block page_title %} + {{ page.title }} + {% endblock %} +
+ +
+ +
+ +
+ +
+ {% block page_sidebar %} + {% endblock %} +
+ +
+ +
+ {% block page_content %} + {{ page.content }} + {% endblock %} + {% block page_link %} + {% with object.links.all as links %} + {% if links %} + {% include 'core/inc/link.html' %} + {% endif %} + {% endwith %} + {% endblock %} + {% block page_file %} + {% with object.files.all as files %} + {% if files %} + {% include 'core/inc/files.html' %} + {% endif %} + {% endwith %} + {% endblock %} + {% block page_audio %} + {% for related in object.playlists.all %} + {% with related.playlist as playlist %} + {% if playlist.type == 'audio' %} + {% include 'media/inc/playlist_audio_detail.html' %} + {% endif %} + {% endwith %} + {% endfor %} + {% endblock %} +
+ +
+ +
+ + {% block page_slider %} + {% with object.images.all|get_type:'page_slider' as slider_images %} + {% if slider_images %} + {% include 'core/inc/slider.html' %} + {% endif %} + {% endwith %} + {% endblock %} + + {% block page_video %} + {% for related in object.playlists.all %} + {% with related.playlist as playlist %} + {% if playlist.type == 'video' %} + {% include 'media/inc/playlist_video_slider.html' %} + {% endif %} + {% endwith %} + {% endfor %} + {% endblock %} + +
+ + {% block page_person_list %} + {% endblock %} + + {% block page_demo %} + {% endblock %} + + {% block page_blog %} + {% endblock %} + + {% block page_sub_content %} + {% with object.blocks.all as blocks %} + {% include "core/inc/block.html" %} + {% endwith %} + {% endblock %} + + {% block related_project %} + {% endblock %} + + {% block products %} + {% if page.product_lists.all|length > 0 %} + {% for page_product_list in page.product_lists.all %} + {% with page_product_list.list as list %} + {% with "shop/includes/product_list_"|add:list.style|add:"_style.html" as template %} + {% include template %} + {% endwith %} + {% endwith %} + {% endfor %} + {% endif %} + {% endblock %} + + {% block page_sub_content_2 %} + {% endblock %} + + {% block page_person_list_team %} + {% endblock %} + + {% block page_sub_content_3 %} + {% endblock %} + + {% block logo %} + {% with page.images.all|get_type:'logo' as images %} + {% if images %} +
+
+
+
+
+
    + {% include 'core/inc/logo.html' %} +
+
+
+
+
+
+ {% endif %} + {% endwith %} + {% endblock %} + +
+ +
+ +
+ + {% block page_related_content %} + {% with dynamic_content=page.dynamic_content_pages.all|filter_content object=page %} + {% include "core/inc/related_content.html" %} + {% endwith %} + {% endblock %} + +
+ + +{% endblock %} diff --git a/app/themes/base/templates/media/live_streaming/live_streaming_detail.html b/app/themes/base/templates/media/live_streaming/live_streaming_detail.html new file mode 100644 index 00000000..11a142e6 --- /dev/null +++ b/app/themes/base/templates/media/live_streaming/live_streaming_detail.html @@ -0,0 +1,53 @@ +{% extends "media/media_base.html" %} +{% load mezzanine_tags keyword_tags i18n organization_tags staticfiles %} + +{% block meta_title %}{% trans "Live Streaming" %}{% endblock %} + + +{% block page_class %} + live-streaming +{% endblock %} + +{% block page_title %} + {% editable person.title %} +

{{ object.title }}

+ {% endeditable %} +{% endblock %} + +{% block page_sidebar %} +{% endblock %} + +{% block page_content %} + {% if object.type = "youtube" %} + {% if object.youtube_id %} +
+ +
+ {% else %} +

Please fill youtube id

+ {% endif %} + {% elif object.type = "html5" %} + {% if object.html5_url %} + + {% else %} +

Please fill html5 live streaming url

+ {% endif %} + {% endif %} + +
+
+
+
+{% endblock %} + +{% block footer_scripts %} + {{ block.super }} + + + +{% endblock %} diff --git a/app/themes/base/templates/media/media_base.html b/app/themes/base/templates/media/media_base.html new file mode 100644 index 00000000..cfe5065b --- /dev/null +++ b/app/themes/base/templates/media/media_base.html @@ -0,0 +1,152 @@ +{% extends "pages/page.html" %} +{% load mezzanine_tags keyword_tags i18n organization_tags %} + + +{% block main %} + + {% block hero %} + {% endblock %} + +
+
+ +
+ +
+ {% block page_title %} + {{ page.title }} + {% endblock %} +
+ +
+ +
+ +
+ {% block page_content %} + {{ page.content }} + {% endblock %} + {% block page_link %} + {% with object.links.all as links %} + {% if links %} + {% include 'core/inc/link.html' %} + {% endif %} + {% endwith %} + {% endblock %} + {% block page_file %} + {% with object.files.all as files %} + {% if files %} + {% include 'core/inc/files.html' %} + {% endif %} + {% endwith %} + {% endblock %} + {% block page_audio %} + {% for related in object.playlists.all %} + {% with related.playlist as playlist %} + {% if playlist.type == 'audio' %} + {% include 'media/inc/playlist_audio_detail.html' %} + {% endif %} + {% endwith %} + {% endfor %} + {% endblock %} +
+ +
+ +
+ + {% block page_slider %} + {% with object.images.all|get_type:'page_slider' as slider_images %} + {% if slider_images %} + {% include 'core/inc/slider.html' %} + {% endif %} + {% endwith %} + {% endblock %} + + {% block page_video %} + {% for related in object.playlists.all %} + {% with related.playlist as playlist %} + {% if playlist.type == 'video' %} + {% include 'media/inc/playlist_video_slider.html' %} + {% endif %} + {% endwith %} + {% endfor %} + {% endblock %} + +
+ + {% block page_person_list %} + {% endblock %} + + {% block page_demo %} + {% endblock %} + + {% block page_blog %} + {% endblock %} + + {% block page_sub_content %} + {% with object.blocks.all as blocks %} + {% include "core/inc/block.html" %} + {% endwith %} + {% endblock %} + + {% block related_project %} + {% endblock %} + + {% block products %} + {% if page.product_lists.all|length > 0 %} + {% for page_product_list in page.product_lists.all %} + {% with page_product_list.list as list %} + {% with "shop/includes/product_list_"|add:list.style|add:"_style.html" as template %} + {% include template %} + {% endwith %} + {% endwith %} + {% endfor %} + {% endif %} + {% endblock %} + + {% block page_sub_content_2 %} + {% endblock %} + + {% block page_person_list_team %} + {% endblock %} + + {% block page_sub_content_3 %} + {% endblock %} + + {% block logo %} + {% with page.images.all|get_type:'logo' as images %} + {% if images %} +
+
+
+
+
+
    + {% include 'core/inc/logo.html' %} +
+
+
+
+
+
+ {% endif %} + {% endwith %} + {% endblock %} + +
+ +
+ +
+ + {% block page_related_content %} + {% with dynamic_content=page.dynamic_content_pages.all|filter_content object=page %} + {% include "core/inc/related_content.html" %} + {% endwith %} + {% endblock %} + +
+ + +{% endblock %} -- 2.39.5