diff --git a/.gitignore b/.gitignore
index ad1500a297..64f36e0eb5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,6 +46,7 @@ log/
media/
pod/*/migrations/
pod/custom/*
+!pod/custom/settings_local.py.example
settings_local.py
## Others
pod/static/
diff --git a/pod/authentication/populatedCASbackend.py b/pod/authentication/populatedCASbackend.py
index e6efdc8903..174db53ae7 100644
--- a/pod/authentication/populatedCASbackend.py
+++ b/pod/authentication/populatedCASbackend.py
@@ -93,10 +93,26 @@ def populateUser(tree):
populate_user_from_entry(user, owner, entry)
+def get_server():
+ if isinstance(LDAP_SERVER['url'], str):
+ server = Server(LDAP_SERVER['url'], port=LDAP_SERVER[
+ 'port'], use_ssl=LDAP_SERVER[
+ 'use_ssl'], get_info=ALL)
+ elif isinstance(LDAP_SERVER['url'], tuple):
+ hosts = []
+ for server in LDAP_SERVER['url']:
+ if not (server == LDAP_SERVER['url'][0]):
+ hosts.append(server)
+ server = Server(LDAP_SERVER['url'][0], port=LDAP_SERVER[
+ 'port'], use_ssl=LDAP_SERVER[
+ 'use_ssl'], get_info=ALL,
+ allowed_referral_hosts=hosts)
+ return server
+
+
def get_ldap_conn():
try:
- server = Server(LDAP_SERVER['url'], port=LDAP_SERVER[
- 'port'], use_ssl=LDAP_SERVER['use_ssl'], get_info=ALL)
+ server = get_server()
conn = Connection(
server, AUTH_LDAP_BIND_DN, AUTH_LDAP_BIND_PASSWORD, auto_bind=True)
return conn
diff --git a/pod/chapter/static/css/videojs-chapters.css b/pod/chapter/static/css/videojs-chapters.css
index 6b40914690..2176dd63ea 100644
--- a/pod/chapter/static/css/videojs-chapters.css
+++ b/pod/chapter/static/css/videojs-chapters.css
@@ -4,10 +4,10 @@
right: 0;
top: 0;
height: 100%;
- width: 10%;
+ width: 20%;
background-color: rgba(43,51,63,0.7);
overflow-y: auto;
- border: 2px solid black;
+ /*border: 2px solid black;*/
cursor: default;
}
.chapters-list.inactive {
@@ -31,13 +31,15 @@
position: relative;
margin: 0;
padding: 0;
+ padding-bottom: 30px;
}
.chapters-list ol li {
display: list-item;
list-style-type: none;
text-align: -webkit-match-parent;
- background-color: rgba(0, 0, 0, 0.8);
- margin: 3px;
+ /*background-color: rgba(0, 0, 0, 0.8);*/
+ margin: 0 3px;
+ border-top:1px solid rgba(0, 0, 0, 0.8);
}
.chapters-list ol li a:hover,
.chapters-list ol li a.current {
@@ -51,6 +53,7 @@
transition: .3s;
color: #fff;
text-align: left;
+ font-size:1.3em;
}
#chapters {
diff --git a/pod/chapter/static/js/videojs-chapters.js b/pod/chapter/static/js/videojs-chapters.js
index a1beccee99..daa47e7c17 100644
--- a/pod/chapter/static/js/videojs-chapters.js
+++ b/pod/chapter/static/js/videojs-chapters.js
@@ -19,11 +19,11 @@
var MenuButton = videojs.getComponent('MenuButton');
var ChapterMenuButton = videojs.extend(MenuButton, {
constructor: function(player, options){
- options.label = 'Chapters';
+ options.label = gettext('Chapters');
MenuButton.call(this, player, options);
- this.el().setAttribute('aria-label', 'Chapters');
+ this.el().setAttribute('aria-label', gettext('Chapters'));
videojs.dom.addClass(this.el(), 'vjs-chapters-button');
- this.controlText('Chapters');
+ this.controlText(gettext('Chapters'));
var span = document.createElement('span');
videojs.dom.addClass(span, 'vjs-chapters-icon');
diff --git a/pod/custom/settings_local.py.example b/pod/custom/settings_local.py.example
new file mode 100644
index 0000000000..4ed3d9a14f
--- /dev/null
+++ b/pod/custom/settings_local.py.example
@@ -0,0 +1,844 @@
+"""
+# ********************************************************** ATTENTION **********************************************************
+#
+# Attention ! Veuillez ne pas renommer ce fichier en settings_local.py mais vous en inspirer pour configurer votre instance Pod.
+#
+# ********************************************************** WARNING ************************************************************
+#
+# Warning ! Please do not rename this file to settings_local.py but be inspired by it to configure your Pod instance.
+#
+#********************************************************************************************************************************
+"""
+
+
+# configuration principale
+"""
+# La clé secrète d’une installation Django.
+# Elle est utilisée dans le contexte de la signature cryptographique,
+# et doit être définie à une valeur unique et non prédictible.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#secret-key
+"""
+SECRET_KEY = 'A_CHANGER'
+
+"""
+# Une valeur booléenne qui active ou désactive le mode de débogage.
+# Ne déployez jamais de site en production avec le réglage DEBUG activé.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#debug
+"""
+DEBUG = True
+
+"""
+# Une liste de chaînes représentant des noms de domaine/d’hôte que ce site Django peut servir.
+# C’est une mesure de sécurité pour empêcher les attaques d’en-tête Host HTTP,
+# qui sont possibles même avec bien des configurations de serveur Web apparemment sécurisées.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#allowed-hosts
+"""
+ALLOWED_HOSTS = ['localhost']
+
+"""
+# L’âge des cookies de sessions, en secondes.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#session-cookie-age
+"""
+SESSION_COOKIE_AGE = 14400
+
+"""
+# Indique s’il faut que la session expire lorsque l’utilisateur ferme son navigateur.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#session-cookie-age
+"""
+SESSION_EXPIRE_AT_BROWSER_CLOSE = True
+
+"""
+# Une liste de toutes les personnes qui reçoivent les notifications d’erreurs dans le code.
+# Lorsque DEBUG=False et qu’une vue lève une exception,
+# Django envoie un courriel à ces personnes contenant les informations complètes de l’exception.
+# Chaque élément de la liste doit être un tuple au format « (nom complet, adresse électronique) ».
+# Exemple : [('John', 'john@example.com'), ('Mary', 'mary@example.com')] Dans Pod,
+# les "admins" sont également destinataires des courriels de contact,
+# d'encodage ou de flux rss si la variable CONTACT_US_EMAIL n'est pas renseignée.
+"""
+ADMINS = ( ('Name', 'adminmail@univ.fr'),)
+
+"""
+# Dans Pod, les "managers" sont destinataires des courriels de fin d'encodage (et ainsi des vidéos déposées sur la plateforme).
+# Le premier managers renseigné est également contact des flus rss.
+# Ils sont aussi destinataires des courriels de contact si la variable CONTACT_US_EMAIL n'est pas renseignée.
+"""
+MANAGERS = ADMINS
+
+"""
+# Un dictionnaire contenant les réglages de toutes les bases de données à utiliser avec Django.
+# C’est un dictionnaire imbriqué dont les contenus font correspondre l’alias de base de données avec un dictionnaire contenant les options de chacune des bases de données.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#databases
+"""
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+ }
+}
+
+"""
+# Langue par défaut si non détectée
+"""
+LANGUAGE_CODE = "fr"
+
+"""
+# Langue disponible et traduite
+"""
+LANGUAGES = (
+ ('fr', 'Français'), ('en', 'English'), ('nl', 'Dutch (Netherlands)')
+)
+
+"""
+# Une chaîne représentant le fuseau horaire pour cette installation.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-TIME_ZONE
+"""
+TIME_ZONE = "UTC"
+
+"""
+# Le répertoire dans lequel stocker temporairement les données (typiquement pour les fichiers plus grands que FILE_UPLOAD_MAX_MEMORY_SIZE) lors des téléversements de fichiers.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#file-upload-temp-dir
+"""
+FILE_UPLOAD_TEMP_DIR = "/var/tmp"
+
+"""
+# Le chemin absolu vers le répertoire dans lequel collectstatic rassemble les fichiers statiques en vue du déploiement.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-STATIC_ROOT
+"""
+STATIC_ROOT = "/pod/static"
+
+"""
+# Chemin absolu de système de fichiers pointant vers le répertoire qui contiendra les fichiers téléversés par les utilisateurs.
+# https://docs.djangoproject.com/fr/1.11/ref/settings/#std:setting-MEDIA_ROOT
+"""
+MEDIA_ROOT = "/pod/media"
+
+"""
+# nom du serveur smtp
+"""
+EMAIL_HOST = "smtp.univ.fr"
+
+"""
+# port d'écoute du serveur smtp
+"""
+EMAIL_PORT = 25
+
+"""
+# courriel utilisé par défaut pour les envois automatique (erreur de code etc.)
+"""
+SERVER_EMAIL = "noreply@univ.fr"
+
+"""
+# courriel utilisé par défaut pour les envois de courriel (contact, encodage etc.)
+"""
+DEFAULT_FROM_EMAIL= "noreply@univ.fr"
+
+"""
+# Les utilisateurs inactif ne sont plus affichés dans la barre de menu utilisateur
+"""
+MENUBAR_HIDE_INACTIVE_OWNERS = True
+
+"""
+# Les utilisateurs non staff ne sont plus affichés dans la barre de menu utilisateur
+"""
+MENUBAR_SHOW_STAFF_OWNERS_ONLY = False
+
+"""
+# Afficher les vidéos dont l'accès est protégé par mot de passe sur la page d'accueil
+"""
+HOMEPAGE_SHOWS_PASSWORDED = False
+
+"""
+# Afficher les vidéos dont l'accès est protégé par authentification sur la page d'accueil
+"""
+HOMEPAGE_SHOWS_RESTRICTED = False
+
+"""
+# Les mots clés saisis lors de l'ajout de vidéo sont convertis automatiquement en minuscule
+"""
+FORCE_LOWERCASE_TAGS = True
+
+"""
+# Les mots clés saisis lors de l'ajout de vidéo ne peuvent dépassé la longueur saisie
+"""
+MAX_TAG_LENGTH = 50
+
+"""
+# Utiliser l'application de gestion de fichier fourni avec le projet. Si False, chaque fichier envoyé ne pourra être utilisé qu'une seule fois.
+"""
+USE_PODFILE = False
+
+"""
+# Liste des applications tierces accessibles.
+"""
+THIRD_PARTY_APPS = []
+
+"""
+# Nom du répertoire racine ou les fichiers "complémentaires" (hors vidéos etc.) sont téléversés.
+"""
+FILES_DIR = "files"
+
+"""
+# Choix de sujet pour les courriels envoyés depuis la plateforme
+"""
+SUBJECT_CHOICES = (
+ ('', '-----'),
+ ('info', ('Request more information')),
+ ('contribute', ('Learn more about how to contribute')),
+ ('request_password', ('Password request for a video')),
+ ('inappropriate_content', ('Report inappropriate content')),
+ ('bug', ('Correction or bug report')),
+ ('other', ('Other (please specify)'))
+)
+
+"""
+# Si valeur vaut 'True', le username de l'utilisateur ne sera pas visible sur la plate-forme Pod et
+# si la valeur vaut 'False' le username sera affichés aux utilisateurs authentifiés. (par soucis du respect du RGPD)
+"""
+HIDE_USERNAME = False
+
+"""
+# Si valeur vaut 'True', l'onglet Utilisateur ne sera pas visible et si la valeur vaut 'False' l'onglet Utilisateur ne sera visible qu'aux personnes authentifiées.
+# (par soucis du respect du RGPD)
+"""
+HIDE_USER_TAB = False
+
+"""
+# Si la valeur vaut 'True', le filtre des vidéos par utilisateur ne sera plus visible sur la plate-forme Pod et
+# si la valeur vaut 'False' le filtre sera visible qu'aux personnes authentifiées. (par soucis du respect du RGPD)
+"""
+HIDE_USER_FILTER = False
+
+"""
+# Si valeur vaut 'True', les URLs contenues dans le texte de superposition seront transformées, à la lecture de la vidéo, en lien cliquable.
+"""
+LINK_SUPERPOSITION = False
+
+"""
+# Si valeur vaut 'True', les e-mails de contacts seront adressés, selon le sujet, soit au propriétaire de la vidéo soit au(x) manageur(s) des vidéos Pod.
+# (voir USER_CONTACT_EMAIL_CASE et USE_ESTABLISHMENT_FIELD )
+"""
+CUSTOM_CONTACT_US = False
+
+"""
+# Une liste contenant les sujets de contact dont l'utilisateur sera seul destinataire plutôt que le(s) manageur(s).
+# Si la liste est vide, les mails de contact seront envoyés au(x) manageur(s). Valeurs possibles :
+# 'info', 'contribute', 'request_password', 'inapropriate_content', 'bug', 'other'
+"""
+USER_CONTACT_EMAIL_CASE = []
+
+"""
+# Si valeur vaut 'True', rajoute un attribut 'establishment' à l'utilisateur Pod ce qui permet de gérer plus d'un établissement pouvant utiliser Pod.
+# Dans ce cas les emails de contact par exemple seront envoyés soit à l'utilisateur soit au(x) manageur(s) de l'établissement de l'utilisateur.
+# (voir USER_CONTACT_EMAIL_CASE )
+# Egalement les emails de fin d'encodage seront envoyés au(x) manageur(s) de l'établissement du propriétaire de la vidéo encodée,
+# en plus d'un email au propriétaire, en confirmation de la fin d'encodage de sa vidéo.
+"""
+USE_ESTABLISHMENT_FIELD = False
+
+"""
+# Permet d'activer la possibilité de voir en details le nombre de visualisation d'une vidéo durant un jour donné ou mois,
+# année ou encore le nombre de vue total depuis la création de la vidéo. un lien est rajouté dans la partie info lors de la lecture d'une vidéo,
+# un lien est rajouté dans la page de visualisation d'une chaîne ou un theme ou encore toutes les vidéos présentes sur la plateforme.
+"""
+USE_STATS_VIEW = False
+
+"""
+# affichage de la statistique de vue des videos si utilisateur authentifié
+"""
+VIEW_STATS_AUTH = False
+
+"""
+# Fixe une année maximale que la date de suppression d'une vidéo ne peut dépasser. Par défaut MAX_DURATION_DATE_DELETE = 10. (Année courante + 10 ans).
+"""
+MAX_DURATION_DATE_DELETE = 10
+
+"""
+# Permet d'utiliser la mise en ligne fragmentée (qui permet de reprendre la mise en ligne lors de problèmes de connexion)
+"""
+USE_CHUNKED_UPLOAD = False
+
+"""
+# Taille d'un fragment (le fichier sera mis en ligne par fragment de cette taille)
+"""
+CHUNK_SIZE = 1000000
+
+"""
+# Masquer l'authentification locale
+"""
+HIDE_LOCAL_LOGIN = False
+
+"""
+# Afficher uniquement les thèmes de premier niveau dans l'onglet 'Chaîne'
+"""
+SHOW_ONLY_PARENT_THEMES = False
+
+"""
+# Organiser l'affichage des vidéos dans des themes par sections pliables
+"""
+ORGANIZE_BY_THEME = False
+
+"""
+# Configuration des templates / de l'affichage
+# L'ensemble des variables ci-après doivent être contnu dans un dictionnnaire TEMPLATE_VISIBLE_SETTINGS.
+# Voici sa valeur par défaut :
+"""
+TEMPLATE_VISIBLE_SETTINGS = {
+ 'TITLE_SITE': 'Pod',
+ 'TITLE_ETB': 'University name',
+ 'LOGO_SITE': 'img/logoPod.svg',
+ 'LOGO_ETB': 'img/logo_etb.svg',
+ 'LOGO_PLAYER': 'img/logoPod.svg',
+ 'LINK_PLAYER': '',
+ 'FOOTER_TEXT': ('',),
+ 'FAVICON': 'img/logoPod.svg',
+ 'CSS_OVERRIDE' : '',
+ 'PRE_HEADER_TEMPLATE' : '',
+ 'POST_FOOTER_TEMPLATE' : '',
+ 'TRACKING_TEMPLATE' : '',
+}
+
+
+"""
+# Titre du site.
+TITLE_SITE = "Pod"
+"""
+
+"""
+# Titre de l’établissement.
+"""
+TITLE_ETB = "University name"
+
+"""
+# Logo affiché en haut à gauche sur toutes les pages. Doit se situer dans le répertoire static
+"""
+LOGO_SITE = "img/logoPod.svg"
+
+"""
+# Logo affiché dans le footer sur toutes les pages. Doit se situer dans le répertoire static
+"""
+LOGO_ETB = "img/logo_etb.svg"
+
+"""
+# Logo affiché sur le player video. Doit se situer dans le répertoire static
+"""
+LOGO_PLAYER = "img/logoPod.svg"
+
+"""
+# Lien de destination du logo affiché sur le player
+"""
+LINK_PLAYER = ""
+
+"""
+# Texte affiché dans le footer. Une ligne par entrée, accepte du code html.
+# Par exmple : ( '42, rue Paul Duez', '59000 Lille - France', ('Google maps') )
+"""
+FOOTER_TEXT = ('',)
+
+"""
+# Icon affiché dans la barre d'adresse du navigateur
+"""
+FAVICON = "img/logoPod.svg"
+
+"""
+# Si souhaitée, à créer et sauvegarder dans le répertoire static de l'application custom et préciser le chemin d'accès. Par exemple : "custom/etab.css"
+"""
+CSS_OVERRIDE = ""
+
+"""
+# vous pouvez créer un template dans votre application custom et indiquer son chemin dans cette variable pour que ce code html,
+# ce template soit affiché en haut de votre page, le code est ajouté juste après la balise body.(Or iframe)
+# Si le fichié créé est '/usr/local/django_projects/podv2/pod/custom/templates/custom/preheader.html' alors la varaible doit prendre la valeur 'custom/preheader.html'
+"""
+PRE_HEADER_TEMPLATE = ""
+
+"""
+# Idem que pre-header, le code contenu dans le template sera affiché juste avant la fermeture du body. (Or iframe)
+"""
+POST_FOOTER_TEMPLATE = ""
+
+"""
+# vous pouvez créer un template dans votre application custom pour y intégrer votre code Piwik ou Google analytics.
+# Ce template est inséré dans toutes les pages de la plateforme, y compris en mode iframe
+"""
+TRACKING_TEMPLATE = ""
+
+# Configuration application recherche
+# Pour mettre à jour le moteur de recherche, je lance toutes les nuits la tache cron suivante :
+# 0 5 * * * cd /home/pod/django_projects/podv2 && /home/pod/.virtualenvs/django_pod/bin/python manage.py index_videos --all
+
+"""
+# adresse du ou des instances d'Elasticsearch utilisées pour l'indexation et la recherche de vidéo.
+"""
+ES_URL = ['http://127.0.0.1:9200/']
+
+"""
+# Valeur pour l’index de ElasticSearch
+"""
+ES_INDEX = "pod"
+
+
+
+# Configuration encodage
+
+"""
+# commande ffmpeg
+"""
+FFMPEG = "ffmpeg"
+
+"""
+# commande ffprobe
+"""
+FFPROBE = "ffprobe"
+
+"""
+# durée en seconde des segment HLS
+"""
+SEGMENT_TARGET_DURATION = 2
+
+"""
+# la taille du buffer est égale au bitrate vidéo du rendu multiplié par cette valeur
+"""
+RATE_MONITOR_BUFFER_RATIO = 2
+
+"""
+# nombre de thread possible pour ffmpeg (0 égale maximum possible)
+"""
+FFMPEG_NB_THREADS = 0
+
+"""
+# Commande utilisée pour récupérer les informations de la première piste video du fichier envoyé
+"""
+GET_INFO_VIDEO = "%(ffprobe)s -v quiet -show_format -show_streams -select_streams v:0 -print_format json -i %(source)s"
+
+"""
+# Commande utilisée pour récupérer les informations de la première piste audio du fichier envoyé
+"""
+GET_INFO_AUDIO = "%(ffprobe)s -v quiet -show_format -show_streams -select_streams a:0 -print_format json -i %(source)s"
+
+"""
+# paramètres de la commande ffmpeg utilisés pour encoder toutes les vidéos, peu importe le rendu
+"""
+FFMPEG_STATIC_PARAMS = " -c:a aac -ar 48000 -c:v h264 -profile:v high -pix_fmt yuv420p -crf 20 -sc_threshold 0 -force_key_frames \"expr:gte(t,n_forced*1)\" -deinterlace -threads %(nb_threads)s "
+
+"""
+# autres paramètres qui sont placés au début de la commande
+"""
+FFMPEG_MISC_PARAMS = " -hide_banner -y "
+
+"""
+# bitrate audio pour l'encodage M4A (encodage des fichiers audio envoyés sur la plateforme)
+"""
+AUDIO_BITRATE = "192k"
+
+"""
+# commande utilisée pour l'encodage des fichiers audio envoyés sur la plateforme
+"""
+ENCODING_M4A = "%(ffmpeg)s -i %(source)s %(misc_params)s -c:a aac -b:a %(audio_bitrate)s -vn -threads %(nb_threads)s \"%(output_dir)s/audio_%(audio_bitrate)s.m4a\""
+
+"""
+# commande utilisée pour l'encodage audio pour tous les fichiers envoyés sur la plateforme
+"""
+ENCODE_MP3_CMD = "%(ffmpeg)s -i %(source)s %(misc_params)s -vn -b:a %(audio_bitrate)s -vn -f mp3 -threads %(nb_threads)s \"%(output_dir)s/audio_%(audio_bitrate)s.mp3\""
+
+"""
+# Si True, un courriel est envoyé aux managers et à l'auteur (si DEBUG est à True) à la fin de l'encodage
+"""
+EMAIL_ON_ENCODING_COMPLETION = True
+
+"""
+# Répertoire temporaire pour la création des thumbnails
+"""
+FILE_UPLOAD_TEMP_DIR = "/tmp"
+
+"""
+# Utilisation de Celery pour la gestion des taches d'encodage
+"""
+CELERY_TO_ENCODE = False
+
+# Configuration flux RSS
+
+"""
+# couverture du droit pour chaque vidéo
+"""
+DEFAULT_DC_COVERAGE = TITLE_ETB + " - Town - Country"
+
+"""
+# droit par défaut affichés dans le flux RSS si non renseigné
+"""
+DEFAULT_DC_RIGHTS = "BY-NC-SA"
+
+# Configuration autotranscription
+
+"""
+# Utilisation de la transcription automatique
+"""
+USE_TRANSCRIPTION = TITLE_ETB + " - Town - Country"
+
+"""
+# Paramétrage de l'autotranscription (voir cette page pour configurer)
+"""
+DS_PARAM = {}
+
+# Configuration application vidéo
+
+"""
+# Si True, seule les personnes "Staff" peuvent déposer des vidéos sur la plateforme
+"""
+RESTRICT_EDIT_VIDEO_ACCESS_TO_STAFF_ONLY = False
+
+"""
+# image par défaut affichée comme poster ou vignette, utilisée pour présenter la vidéo. Cette image doit se situer dans le répertoire static.
+"""
+DEFAULT_THUMBNAIL = "img/default.png"
+
+"""
+# Encodage possible sur la plateforme. Associé à un rendu dans le cas d'une vidéo.
+"""
+ENCODING_CHOICES = (
+ ("audio", "audio"),*
+ ("360p", "360p"),
+ ("480p", "480p"),
+ ("720p", "720p"),
+ ("1080p", "1080p"),
+ ("playlist", "playlist")
+)
+
+"""
+# Format d'encodage réalisé sur la plateforme.
+"""
+FORMAT_CHOICES = (
+ ("video/mp4", 'video/mp4'),
+ ("video/mp2t", 'video/mp2t'),
+ ("video/webm", 'video/webm'),
+ ("audio/mp3", "audio/mp3"),
+ ("audio/wav", "audio/wav"),
+ ("application/x-mpegURL", "application/x-mpegURL"),
+)
+
+"""
+# Licence proposées pour les vidéos.
+"""
+LICENCE_CHOICES = (
+ ('by', ("Attribution 4.0 International (CC BY 4.0)")),
+ ('by-nd', ("Attribution-NoDerivatives 4.0 " "International (CC BY-ND 4.0)" )),
+ ('by-nc-nd', ( "Attribution-NonCommercial-NoDerivatives 4.0 " "International (CC BY-NC-ND 4.0)" )),
+ ('by-nc', ("Attribution-NonCommercial 4.0 " "International (CC BY-NC 4.0)")),
+ ('by-nc-sa', ( "Attribution-NonCommercial-ShareAlike 4.0 " "International (CC BY-NC-SA 4.0)" )),
+ ('by-sa', ( "Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)"))
+)
+
+"""
+# Les vidéos créées sans type (par importation par exemple) seront affectées au type par défaut (en général, le type ayant pour identifiant '1' est 'Other')
+"""
+DEFAULT_TYPE_ID = 1
+
+"""
+# Liste des cursus proposés lors de l'ajout des vidéos. Affichés en dessous d'une vidéos, ils sont aussi utilisés pour affiner la recherche.
+"""
+CURSUS_CODES = (
+ ('0', ("None / All")),
+ ('L', ("Bachelor’s Degree")),
+ ('M', ("Master’s Degree")),
+ ('D', ("Doctorate")),
+ ('1', _("Other"))
+)
+
+"""
+# Liste des langues proposées lors de l'ajout des vidéos. Affichés en dessous d'une vidéos, ils sont aussi utilisés pour affiner la recherche.
+"""
+LANG_CHOICES = ( settings.PREF_LANG_CHOICES + (('', '----------'),) + settings.ALL_LANG_CHOICES )
+
+"""
+# Répertoire par défaut pour le téléversement des vidéos.
+"""
+VIDEOS_DIR = "videos"
+
+"""
+# Fonction appelée pour lancer l'encodage des vidéos
+"""
+ENCODE_VIDEO = "start_encode"
+
+"""
+# Extension autorisée pour le téléversement sur la plateforme
+"""
+VIDEO_ALLOWED_EXTENSIONS = ( '3gp', 'avi', 'divx', 'flv', 'm2p', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mts', 'wmv', 'mp3', 'ogg', 'wav', 'wma' )
+
+"""
+# Taille maximum en Go des fichiers téléversés sur la plateforme
+"""
+VIDEO_MAX_UPLOAD_SIZE = 1
+
+"""
+# Ensemble des textes d'aide affichés avec le formulaire d'envoi de vidéo
+# voir pod/video/forms.py
+"""
+VIDEO_FORM_FIELDS_HELP_TEXT = ""
+
+"""
+# Liste des champs du formulaire d'édition de vidéos affichés
+"""
+VIDEO_FORM_FIELDS = __all__
+
+"""
+# Ensemble des textes d'aide affichés avec le formulaire d'édition de chaine.
+# voir pod/video/forms.py
+"""
+CHANNEL_FORM_FIELDS_HELP_TEXT = ""
+
+"""
+# Ensemble des textes d'aide affichés avec le formulaire d'édition de theme.
+# voir pod/video/forms.py
+"""
+THEME_FORM_FIELDS_HELP_TEXT = ""
+
+# Configuration application recorder (enregistreur)
+
+"""
+# Type d'enregistrement géré par la plateforme.
+# Un enregistreur ne peut déposer que des fichiers de type proposé par la plateforme.
+# Le traitement se fait en fonction du type de fichier déposé.
+"""
+RECORDER_TYPE = ( ('video', _('Video')), ('audiovideocast', _('Audiovideocast')), )
+
+"""
+# Chemin racine du répertoire où sont déposés les enregistrements (chemin du serveur FTP).
+"""
+DEFAULT_RECORDER_PATH = "/data/ftp-pod/ftp/"
+
+"""
+# Identifiant du propriétaire par défaut (si non spécifié) des enregistrements déposés.
+"""
+DEFAULT_RECORDER_USER_ID = 1
+
+"""
+# Ajoute un enregistreur par défaut à un enregistrement non identifiable (mauvais chemin dans le dépôt FTP).
+"""
+DEFAULT_RECORDER_ID = 1
+
+"""
+# Identifiant du type de vidéo par défaut (si non spécifié). (Exemple : 3 pour Colloque/conférence, 4 pour Cours...)
+"""
+DEFAULT_RECORDER_TYPE_ID = 1
+
+"""
+# Si True, le manager de l'enregistreur pourra choisir un propriétaire de l'enregistrement.
+"""
+ALLOW_RECORDER_MANAGER_CHOICE_VID_OWNER = True
+
+"""
+# Si True, une page apparaîtra dans le menu du profil de l'utilisateur autorisé permettant de s'attribuer un enregistrement.
+"""
+ALLOW_MANUAL_RECORDING_CLAIMING = False
+
+"""
+# Si True, permet de ne pas prendre en compte la 1° image lors du traitement d'une fichier d'enregistrement de type AudioVideoCast.
+"""
+RECORDER_SKIP_FIRST_IMAGE = False
+
+"""
+# Précise les proxy à utiliser pour une requête vers l'application elle même, par défaut force la non utilisation de proxy
+"""
+SELF_REQUESTS_PROXIES = { "http": None, "https": None}
+
+"""
+# Autorise la requête sur l'application en elle même sans vérifier le certificat SSL
+"""
+ALLOW_INSECURE_REQUESTS = False
+
+"""
+# Chemin d'accès web (public) au répertoire de dépot des enregistrements (DEFAULT_RECORDER_PATH). Attention à penser à modifier la conf de NGINX
+"""
+PUBLIC_RECORD_DIR = "records"
+
+"""
+# Si True, affiche l'icone de prévisualisation des vidéos dans la page "Revendiquer un enregistrement"
+"""
+USE_RECORD_PREVIEW = False
+
+# Configuration application podfile (gestion de fichier)
+
+"""
+# Extensions autorisées pour les documents téléversés dans le gestionnaire de fichier
+"""
+FILE_ALLOWED_EXTENSIONS = ( 'doc', 'docx', 'odt', 'pdf', 'xls', 'xlsx', 'ods', 'ppt', 'pptx', 'txt', 'html', 'htm', 'vtt', 'srt', 'webm', 'ts', )
+
+"""
+# Extensions autorisées pour les images téléversés dans le gestionnaire de fichier
+"""
+IMAGE_ALLOWED_EXTENSIONS = ( 'jpg', 'jpeg', 'bmp', 'png', 'gif', 'tiff', )
+
+"""
+# Poids maximum en Mo par fichier téléversé dans le gestionnaire de fichier
+"""
+FILE_MAX_UPLOAD_SIZE = 10
+
+# Configuration application completion (contributeur, sous-titre, document à télécharger, superposition)
+
+"""
+# Liste de rôle possible pour un contributeur
+"""
+ROLE_CHOICES = (
+ ('actor', ('actor')),
+ ('author', ('author')),
+ ('designer', ('designer')),
+ ('consultant', ('consultant')),
+ ('contributor', ('contributor')),
+ ('editor', ('editor')),
+ ('speaker', ('speaker')),
+ ('soundman', ('soundman')),
+ ('director', ('director')),
+ ('writer', ('writer')),
+ ('technician', ('technician')),
+ ('voice-over', ('voice-over')),
+)
+
+"""
+# Liste de type de piste possible pour une vidéo (sous-titre, légende etc.)
+"""
+KIND_CHOICES = ( ('subtitles', ('subtitles')), ('captions', ('captions')), )
+
+# Configuration application authentification (Local, CAS et LDAP)
+
+"""
+# Type d'authentification possible sur votre instance. Pour l'instant local ou cas
+"""
+AUTH_TYPE = (('local', _('local')), ('CAS', 'CAS'))
+
+"""
+# Activation de l'authentification CAS en plus de l'authentification locale
+"""
+USE_CAS = False
+
+"""
+# Url du serveur cas de l'établissement. Format http://url_cas
+"""
+CAS_SERVER_URL = "sso_cas"
+
+"""
+# Si True, authentifie automatiquement l'individu si déjà authentifié sur le serveur CAS
+"""
+CAS_GATEWAY = False
+
+"""
+# Si utilisation de la connection CAS, renseigne les champs du compte de la personne depuis une source externe.
+# Valeur possible : None (pas de renseignement), CAS (renseigne les champs de la personne depuis les informations renvoyées par le CAS),
+# LDAP (Interroge le serveur LDAP pour renseigner les champs du compte de la personne)
+"""
+POPULATE_USER = None
+
+"""
+# variable utilisée pour trouver les informations de l'individu connecté dans le fichier renvoyé par le CAS lors de l'authentification
+"""
+AUTH_CAS_USER_SEARCH = "user"
+
+"""
+# liste de correspondance entre les champs d'un compte de Pod et les champs renvoyés par le CAS
+"""
+USER_CAS_MAPPING_ATTRIBUTES = {
+ "uid": "uid",
+ "mail": "mail",
+ "last_name": "sn",
+ "first_name": "givenname",
+ "affiliation": "eduPersonAffiliation"
+}
+
+"""
+# Si True, des groupes sont créés automatiquement à partir des affiliations des individus qui se connectent sur la plateforme et
+# l'individu qui se connecte est ajouté automatiquement à ses groupes
+"""
+CREATE_GROUP_FROM_AFFILIATION = False
+
+"""
+# Les personnes ayant pour affiliation les valeurs renseignées dans cette variable sont automatiquement la valeur staff de leur compte à True
+"""
+AFFILIATION_STAFF = ('faculty', 'employee', 'staff')
+
+"""
+# Valeurs possibles pour l'Affiliation du compte
+"""
+AFFILIATION = (
+ ('student', ('student')),
+ ('faculty', ('faculty')),
+ ('staff', ('staff')),
+ ('employee', ('employee')),
+ ('member', ('member')),
+ ('affiliate', ('affiliate')),
+ ('alum', ('alum')),
+ ('library-walk-in', ('library-walk-in')),
+ ('researcher', ('researcher')),
+ ('retired', ('retired')),
+ ('emeritus', ('emeritus')),
+ ('teacher', ('teacher')),
+ ('registered-reader', _('registered-reader'))
+)
+
+"""
+# Information de connection au serveur LDAP. Le champ url peut contenir un ou plusieurs url pour ajouter des hôtes de référence, exemple :
+# Si un seul host : {'url': "ldap.univ.fr'', 'port': 389, 'use_ssl': False}
+# Si plusieurs : {'url': ("ldap.univ.fr'',"ldap2.univ.fr"), 'port': 389, 'use_ssl': False}
+"""
+LDAP_SERVER = {'url': '', 'port': 389, 'use_ssl': False}
+
+"""
+# Identifiant (DN) du compte pour se connecter au serveur LDAP
+"""
+AUTH_LDAP_BIND_DN = ""
+
+"""
+# Mot de passe du compte pour se connecter au serveur LDAP
+"""
+AUTH_LDAP_BIND_PASSWORD = ""
+
+"""
+# Filtre LDAP permettant la recherche de l'individu dans le serveur LDAP
+"""
+AUTH_LDAP_USER_SEARCH = ('ou=people,dc=univ,dc=fr', "(uid=%(uid)s)")
+
+"""
+# liste de correspondance entre les champs d'un compte de Pod et les champs renvoyés par le LDAP
+"""
+USER_LDAP_MAPPING_ATTRIBUTES = {
+ "uid": "uid",
+ "mail": "mail",
+ "last_name": "sn",
+ "first_name": "givenname",
+ "primaryAffiliation": "eduPersonPrimaryAffiliation",
+ "affiliations": "eduPersonAffiliation"
+}
+
+"""
+# Utiliser l'authentification Shibboleth
+"""
+USE_SHIB = False
+
+"""
+# Nom de la fédération d'identité utilisée
+"""
+SHIB_NAME = ""
+
+"""
+# Mapping des attributs entre shibboleth et la classe utilisateur
+"""
+SHIBBOLETH_ATTRIBUTE_MAP = {
+ "shib-user": (True, "username"),
+ "shib-given-name": (True, "first_name"),
+ "shib-sn": (True, "last_name"),
+ "shib-mail": (False, "email"),
+}
+
+"""
+# Nom de l'attribut dans les headers qui sert à identifier l'utilisateur connecté avec Shibboleth
+"""
+REMOTE_USER_HEADER = REMOTE_USER
+
+"""
+# URL de connexion à votre instance Shibboleth
+"""
+
+SHIB_URL = ""
+
+"""
+# URL de déconnexion à votre instance Shibboleth
+"""
+SHIB_LOGOUT_URL = ""
diff --git a/pod/live/views.py b/pod/live/views.py
index b2e6eab500..b04a7cf2fa 100644
--- a/pod/live/views.py
+++ b/pod/live/views.py
@@ -8,6 +8,7 @@
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _
from django.db.models import Prefetch
+from django.core.exceptions import ObjectDoesNotExist
def lives(request): # affichage des directs
@@ -20,10 +21,23 @@ def lives(request): # affichage des directs
})
+def get_broadcaster_by_slug(slug, site):
+ broadcaster = None
+ if slug.isnumeric():
+ try:
+ broadcaster = Broadcaster.objects.get(
+ id=slug, building__sites=site)
+ except ObjectDoesNotExist:
+ pass
+ if broadcaster is None:
+ broadcaster = get_object_or_404(Broadcaster, slug=slug,
+ building__sites=site)
+ return broadcaster
+
+
def video_live(request, slug): # affichage des directs
site = get_current_site(request)
- broadcaster = get_object_or_404(Broadcaster, slug=slug,
- building__sites=site)
+ broadcaster = get_broadcaster_by_slug(slug, site)
if broadcaster.is_restricted and not request.user.is_authenticated():
iframe_param = 'is_iframe=true&' if (
request.GET.get('is_iframe')) else ''
diff --git a/pod/locale/fr/LC_MESSAGES/django.mo b/pod/locale/fr/LC_MESSAGES/django.mo
index 3a5425ada9..264e8d5337 100755
Binary files a/pod/locale/fr/LC_MESSAGES/django.mo and b/pod/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/pod/locale/fr/LC_MESSAGES/django.po b/pod/locale/fr/LC_MESSAGES/django.po
index 54f28a51f7..f8dba0a323 100755
--- a/pod/locale/fr/LC_MESSAGES/django.po
+++ b/pod/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Pod\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-06-12 16:31+0000\n"
+"POT-Creation-Date: 2020-06-26 09:50+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -29,7 +29,7 @@ msgstr "Etablissement"
#: pod/authentication/forms.py:60 pod/authentication/forms.py:61
#: pod/main/templates/navbar.html:22 pod/main/templates/navbar_collapse.html:76
-#: pod/video/forms.py:227 pod/video/forms.py:558 pod/video/forms.py:562
+#: pod/video/forms.py:228 pod/video/forms.py:565 pod/video/forms.py:569
#: pod/video/models.py:247 pod/video/templates/videos/filter_aside.html:13
msgid "Users"
msgstr "Utilisateurs"
@@ -91,7 +91,7 @@ msgid "registered-reader"
msgstr "lecteur enregistré"
#: pod/authentication/models.py:68 pod/recorder/models.py:122
-#: pod/video/models.py:1395 pod/video/views.py:1237
+#: pod/video/models.py:1395 pod/video/views.py:1290
msgid "Comment"
msgstr "Commentaire"
@@ -165,8 +165,8 @@ msgstr "Changer votre image de profil"
#: pod/video/templates/videos/video_note_comments_display.html:148
#: pod/video/templates/videos/video_note_display.html:27
#: pod/video/templates/videos/video_notes.html:80
-#: pod/video/templates/videos/video_notes.html:116 pod/video/views.py:214
-#: pod/video/views.py:673 pod/video/views.py:727 pod/video/views.py:1157
+#: pod/video/templates/videos/video_notes.html:116 pod/video/views.py:268
+#: pod/video/views.py:726 pod/video/views.py:780 pod/video/views.py:1210
#: pod/video_search/templates/search/search.html:42
msgid "One or more errors have been found in the form."
msgstr "Une ou plusieurs erreurs ont été trouvées dans le formulaire."
@@ -251,6 +251,7 @@ msgid "Chapter"
msgstr "Chapitre"
#: pod/chapter/models.py:31 pod/chapter/templates/video_chapter.html:67
+#: pod/video/templates/videos/video-element.html:38
msgid "Chapters"
msgstr "Chapitres"
@@ -400,7 +401,7 @@ msgstr "Ajouter un nouveau chapitre"
#: pod/enrichment/templates/enrichment/group_enrichment.html:71
#: pod/interactive/templates/interactive/edit_interactive.html:128
#: pod/interactive/templates/interactive/group_interactive.html:71
-#: pod/video/templates/videos/video.html:219
+#: pod/video/templates/videos/video.html:223
#: pod/video/templates/videos/video_edit.html:136
msgid "Manage video"
msgstr "Gérer la vidéo"
@@ -675,7 +676,7 @@ msgstr "Fin"
msgid "End time of the overlay, in seconds."
msgstr "Fin de la superposition, en secondes."
-#: pod/completion/models.py:279 pod/video/views.py:1266
+#: pod/completion/models.py:279 pod/video/views.py:1319
msgid "Content"
msgstr "Contenu"
@@ -1067,7 +1068,7 @@ msgstr "Le fichier n’a pas été enregistré."
#: pod/completion/views.py:235 pod/completion/views.py:411
#: pod/completion/views.py:812 pod/podfile/views.py:427
-#: pod/podfile/views.py:477 pod/video/views.py:304 pod/video/views.py:1315
+#: pod/podfile/views.py:477 pod/video/views.py:358 pod/video/views.py:1368
msgid "Please correct errors"
msgstr "Veuillez corriger les erreurs"
@@ -1133,8 +1134,8 @@ msgstr "Temps de fin de l'affichage de l'enrichissement en secondes."
#: pod/enrichment/models.py:137
#: pod/enrichment/templates/enrichment/list_enrichment.html:11
-#: pod/video/forms.py:94 pod/video/models.py:414 pod/video/models.py:469
-#: pod/video/templates/videos/video-info.html:83 pod/video/views.py:1263
+#: pod/video/forms.py:95 pod/video/models.py:414 pod/video/models.py:469
+#: pod/video/templates/videos/video-info.html:83 pod/video/views.py:1316
#: pod/video_search/templates/search/search.html:77
msgid "Type"
msgstr "Type"
@@ -1348,8 +1349,8 @@ msgstr "Signaler la vidéo"
#: pod/interactive/templates/interactive/video_interactive.html:56
#: pod/interactive/templates/interactive/video_interactive.html:57
#: pod/video/templates/videos/video-info.html:9
-#: pod/video/templates/videos/video.html:145
-#: pod/video/templates/videos/video.html:146
+#: pod/video/templates/videos/video.html:149
+#: pod/video/templates/videos/video.html:150
msgid "Summary"
msgstr "Description"
@@ -1358,9 +1359,9 @@ msgstr "Description"
#: pod/interactive/templates/interactive/video_interactive.html:61
#: pod/interactive/templates/interactive/video_interactive.html:62
#: pod/video/templates/videos/video-info.html:33
-#: pod/video/templates/videos/video.html:152
-#: pod/video/templates/videos/video.html:154
#: pod/video/templates/videos/video.html:156
+#: pod/video/templates/videos/video.html:158
+#: pod/video/templates/videos/video.html:160
msgid "Infos"
msgstr "Informations"
@@ -1369,8 +1370,8 @@ msgstr "Informations"
#: pod/interactive/templates/interactive/video_interactive.html:67
#: pod/interactive/templates/interactive/video_interactive.html:68
#: pod/video/templates/videos/video-info.html:101
-#: pod/video/templates/videos/video.html:161
-#: pod/video/templates/videos/video.html:162
+#: pod/video/templates/videos/video.html:165
+#: pod/video/templates/videos/video.html:166
msgid "Downloads"
msgstr "Téléchargements"
@@ -1379,8 +1380,8 @@ msgstr "Téléchargements"
#: pod/interactive/templates/interactive/video_interactive.html:73
#: pod/interactive/templates/interactive/video_interactive.html:74
#: pod/video/templates/videos/video-info.html:146
-#: pod/video/templates/videos/video.html:167
-#: pod/video/templates/videos/video.html:168
+#: pod/video/templates/videos/video.html:171
+#: pod/video/templates/videos/video.html:172
msgid "Embed/Share"
msgstr "Intégrer/Partager"
@@ -1388,8 +1389,8 @@ msgstr "Intégrer/Partager"
#: pod/enrichment/templates/enrichment/video_enrichment.html:110
#: pod/interactive/templates/interactive/video_interactive.html:85
#: pod/interactive/templates/interactive/video_interactive.html:86
-#: pod/video/templates/videos/video.html:174
-#: pod/video/templates/videos/video.html:175
+#: pod/video/templates/videos/video.html:178
+#: pod/video/templates/videos/video.html:179
msgid "Other versions"
msgstr "Autre version"
@@ -1401,7 +1402,7 @@ msgstr "Version originale"
#: pod/enrichment/templates/enrichment/video_enrichment.html:118
#: pod/interactive/templates/interactive/video_interactive.html:94
-#: pod/video/templates/videos/video.html:188
+#: pod/video/templates/videos/video.html:192
msgid "Add the video to a playlist"
msgstr "Ajouter une vidéo à une playlist"
@@ -1411,7 +1412,7 @@ msgstr "Ajouter une vidéo à une playlist"
#: pod/playlist/templates/my_playlists.html:10
#: pod/playlist/templates/my_playlists.html:17
#: pod/playlist/templates/playlist.html:14
-#: pod/video/templates/videos/video.html:189
+#: pod/video/templates/videos/video.html:193
msgid "My playlists"
msgstr "Mes playlists"
@@ -1596,7 +1597,7 @@ msgstr "Vous regardez cette vidéo en tant qu'utilisateur anonyme"
msgid "You cannot add interactivity to this video."
msgstr "Vous ne pouvez éditer cette vidéo interactive."
-#: pod/live/forms.py:51 pod/video/forms.py:181 pod/video/forms.py:686
+#: pod/live/forms.py:51 pod/video/forms.py:182 pod/video/forms.py:693
msgid "Password"
msgstr "Mot de passe"
@@ -1606,8 +1607,8 @@ msgstr "nom"
#: pod/live/models.py:28 pod/live/templates/live/live.html:80
#: pod/video/models.py:234 pod/video/models.py:316
-#: pod/video/templates/channel/channel.html:74
-#: pod/video/templates/channel/channel.html:85
+#: pod/video/templates/channel/channel.html:79
+#: pod/video/templates/channel/channel.html:90
#: pod/video/templates/channel/channel_edit.html:38
#: pod/video/templates/videos/video.html:99
#: pod/video/templates/videos/video.html:108
@@ -1667,7 +1668,7 @@ msgstr "Hauteur (en pixel) du site intégré sur la page du live"
msgid "Check if the broadcaster is currently sending stream."
msgstr "Cocher la case si le diffuseur envoie un flux."
-#: pod/live/models.py:88 pod/video/forms.py:177 pod/video/models.py:547
+#: pod/live/models.py:88 pod/video/forms.py:178 pod/video/models.py:547
msgid "Restricted access"
msgstr "Accès restreint"
@@ -1770,7 +1771,7 @@ msgstr ""
msgid "Sorry, no buildings found"
msgstr "Désolé, aucun bâtiment trouvé"
-#: pod/live/views.py:47 pod/video/views.py:586
+#: pod/live/views.py:61 pod/video/views.py:639
msgid "The password is incorrect."
msgstr "Le mot de passe est incorrect."
@@ -1828,8 +1829,8 @@ msgstr "Sujet"
msgid "Please choose a subjects related your request"
msgstr "Veuillez choisir un sujet en lien avec votre requête"
-#: pod/main/forms.py:60 pod/playlist/models.py:22 pod/video/forms.py:104
-#: pod/video/forms.py:218 pod/video/forms.py:244 pod/video/models.py:227
+#: pod/main/forms.py:60 pod/playlist/models.py:22 pod/video/forms.py:105
+#: pod/video/forms.py:219 pod/video/forms.py:245 pod/video/models.py:227
#: pod/video/models.py:309 pod/video/models.py:490
msgid "Description"
msgstr "Description"
@@ -2512,20 +2513,20 @@ msgid "Share on"
msgstr "Partager sur"
#: pod/main/templates/aside.html:20 pod/main/templates/aside.html:25
-#: pod/video/forms.py:127 pod/video/models.py:441 pod/video/models.py:519
+#: pod/video/forms.py:128 pod/video/models.py:441 pod/video/models.py:519
#: pod/video/templates/videos/filter_aside.html:56
#: pod/video/templates/videos/video-info.html:89
msgid "Disciplines"
msgstr "Disciplines"
-#: pod/main/templates/aside.html:38 pod/video/forms.py:123
+#: pod/main/templates/aside.html:38 pod/video/forms.py:124
#: pod/video/models.py:515 pod/video/templates/videos/filter_aside.html:78
#: pod/video/templates/videos/video-info.html:15
#: pod/video_search/templates/search/search.html:89
msgid "Tags"
msgstr "Mots clés"
-#: pod/main/templates/base.html:61
+#: pod/main/templates/base.html:62
msgid "Home"
msgstr "Accueil"
@@ -2611,7 +2612,7 @@ msgstr "Cordialement"
msgid "You just send a message from"
msgstr "Vous venez d'envoyer un message depuis"
-#: pod/main/templates/navbar.html:17 pod/video/forms.py:163
+#: pod/main/templates/navbar.html:17 pod/video/forms.py:164
#: pod/video/models.py:260 pod/video/models.py:525
msgid "Channels"
msgstr "Chaînes"
@@ -2897,7 +2898,7 @@ msgstr "La vidéo a été ajoutée à votre playlist."
msgid "This playlist has been deleted."
msgstr "Cette playlist a été supprimée."
-#: pod/podfile/forms.py:49 pod/video/forms.py:255
+#: pod/podfile/forms.py:49 pod/video/forms.py:256
#, python-format
msgid ""
"The current file %(size)s, which is too large. The maximum file size is "
@@ -3061,7 +3062,7 @@ msgstr "Supprimer cet enregistrement"
msgid "If checked, record will be deleted instead of saving it"
msgstr "Si coché, l'enregistrement sera supprimé et non ajouté"
-#: pod/recorder/forms.py:74 pod/video/forms.py:696
+#: pod/recorder/forms.py:74 pod/video/forms.py:703
msgid "I agree"
msgstr "J'accepte"
@@ -3365,30 +3366,30 @@ msgstr "(Ré)encoder la sélection"
msgid "Transcript selected"
msgstr "Transcription selectionnée"
-#: pod/video/admin.py:260 pod/video/forms.py:227 pod/video/forms.py:565
-#: pod/video/forms.py:567 pod/video/models.py:244
+#: pod/video/admin.py:260 pod/video/forms.py:228 pod/video/forms.py:572
+#: pod/video/forms.py:574 pod/video/models.py:244
msgid "Owners"
msgstr "Propriétaires"
-#: pod/video/forms.py:80
+#: pod/video/forms.py:81
msgid "File field"
msgstr "Fichier"
-#: pod/video/forms.py:81 pod/video/models.py:454
+#: pod/video/forms.py:82 pod/video/models.py:454
#: pod/video/templates/videos/add_video.html:71
msgid "You can send an audio or video file."
msgstr "Vous pouvez envoyer un fichier audio ou vidéo."
-#: pod/video/forms.py:82 pod/video/views.py:1560
+#: pod/video/forms.py:83 pod/video/views.py:1620
#, python-format
msgid "The following formats are supported: %s"
msgstr "Les formats suivants sont supportés: %s"
-#: pod/video/forms.py:85 pod/video/forms.py:212 pod/video/forms.py:238
+#: pod/video/forms.py:86 pod/video/forms.py:213 pod/video/forms.py:239
msgid "Title field"
msgstr "Champ de titre"
-#: pod/video/forms.py:86 pod/video/forms.py:213 pod/video/forms.py:239
+#: pod/video/forms.py:87 pod/video/forms.py:214 pod/video/forms.py:240
msgid ""
"Please choose a title as short and accurate as possible, reflecting the main "
"subject / context of the content."
@@ -3396,14 +3397,14 @@ msgstr ""
"Veuillez choisir un titre aussi court et précis que possible, symbolisant le "
"sujet principal / contexte du contenu."
-#: pod/video/forms.py:88 pod/video/forms.py:215 pod/video/forms.py:241
+#: pod/video/forms.py:89 pod/video/forms.py:216 pod/video/forms.py:242
msgid ""
"You can use the “Description” field below for all additional information."
msgstr ""
"Vous pouvez utiliser le champ \"Description\" pour des informations "
"supplémentaires."
-#: pod/video/forms.py:90
+#: pod/video/forms.py:91
msgid ""
"You may add contributors later using the second button of the content "
"edition toolbar: they will appear in the “Info” tab at the bottom of the "
@@ -3413,7 +3414,7 @@ msgstr ""
"bouton de la barre d'outils du contenu: ils apparaissent dans la barre "
"d'info en bas du lecteur audio / vidéo."
-#: pod/video/forms.py:95
+#: pod/video/forms.py:96
msgid ""
"Select the type of your content. If the type you wish does not appear in the "
"list, please temporary select “Other” and contact us to explain your needs."
@@ -3422,12 +3423,12 @@ msgstr ""
"n’apparaît pas dans la liste, veuillez temporairement choisir \"Autres\" et "
"contactez-nous pour expliquer vos besoins."
-#: pod/video/forms.py:99 pod/video/models.py:483
+#: pod/video/forms.py:100 pod/video/models.py:483
#: pod/video/templates/videos/video-info.html:46
msgid "Additional owners"
msgstr "Propriétaires additionels"
-#: pod/video/forms.py:100
+#: pod/video/forms.py:101
msgid ""
"In this field you can select and add additional owners to the video. These "
"additional owners will have the same rights as you except that they can't "
@@ -3437,7 +3438,7 @@ msgstr ""
"supplémentaires à la vidéo. Ces autres propriétaires auront les mêmes droits "
"que vous sauf qu'ils ne peuvent pas supprimer cette vidéo."
-#: pod/video/forms.py:105 pod/video/forms.py:219 pod/video/forms.py:245
+#: pod/video/forms.py:106 pod/video/forms.py:220 pod/video/forms.py:246
#: pod/video/models.py:229 pod/video/models.py:310 pod/video/models.py:493
msgid ""
"In this field you can describe your content, add all needed related "
@@ -3447,25 +3448,25 @@ msgstr ""
"informations nécessaires, et mettre en forme le résultat en utilisant la "
"barre d'outils."
-#: pod/video/forms.py:109
+#: pod/video/forms.py:110
msgid "Date of the event field"
msgstr "Date de l'évènement"
-#: pod/video/forms.py:110
+#: pod/video/forms.py:111
msgid "Enter the date of the event, if applicable, in the AAAA-MM-JJ format."
msgstr "Entrer la date de l’évènement, si possible, au format AAAA-MM-JJ."
-#: pod/video/forms.py:113 pod/video/models.py:500
+#: pod/video/forms.py:114 pod/video/models.py:500
#: pod/video_search/templates/search/search.html:140
msgid "University course"
msgstr "Cursus universitaire"
-#: pod/video/forms.py:114 pod/video/models.py:502
+#: pod/video/forms.py:115 pod/video/models.py:502
msgid "Select an university course as audience target of the content."
msgstr ""
"Sélectionner un cursus universitaire qui convient à l'audience de ce contenu."
-#: pod/video/forms.py:116
+#: pod/video/forms.py:117
msgid ""
"Choose “None / All” if it does not apply or if all are concerned, or “Other” "
"for an audience outside the european LMD scheme."
@@ -3473,24 +3474,24 @@ msgstr ""
"Choisissez \"Aucun / Tous\" si ce n'est pas applicable ou si tous sont "
"concernés, ou \"Autre\" pour une audience en dehors du schéma européen LMD."
-#: pod/video/forms.py:120 pod/video/models.py:505
+#: pod/video/forms.py:121 pod/video/models.py:505
#: pod/video/templates/videos/video-info.html:84
#: pod/video_search/templates/search/search.html:127
msgid "Main language"
msgstr "Langue principale"
-#: pod/video/forms.py:121 pod/video/models.py:507
+#: pod/video/forms.py:122 pod/video/models.py:507
msgid "Select the main language used in the content."
msgstr "Sélectionner la langue principalement utilisée dans ce contenu."
-#: pod/video/forms.py:124
+#: pod/video/forms.py:125
msgid ""
"Please try to add only relevant keywords that can be useful to other users."
msgstr ""
"Veuiller essayer d'ajouter uniquement des mots clés pertinents qui pourront "
"être utiles aux autres utilisateurs."
-#: pod/video/forms.py:128
+#: pod/video/forms.py:129
msgid ""
"Select the discipline to which your content belongs. If the discipline you "
"wish does not appear in the list, please select nothing and contact us to "
@@ -3500,65 +3501,65 @@ msgstr ""
"discipline que vous désirez n’apparaît pas dans la liste, veuillez n'en "
"sélectionner aucune et contactez nous pour expliquer vos besoins."
-#: pod/video/forms.py:131 pod/video/forms.py:167 pod/video/models.py:531
+#: pod/video/forms.py:132 pod/video/forms.py:168 pod/video/models.py:531
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"Maintenez \"Control\", ou \"Command\" sur un Mac, pour en sélectionner "
"plusieurs."
-#: pod/video/forms.py:134 pod/video/models.py:521
+#: pod/video/forms.py:135 pod/video/models.py:521
msgid "Licence"
msgstr "Licence"
-#: pod/video/forms.py:138 pod/video/models.py:77
+#: pod/video/forms.py:139 pod/video/models.py:77
msgid "Attribution 4.0 International (CC BY 4.0)"
msgstr "Attribution 4.0 International (CC BY 4.0)"
-#: pod/video/forms.py:141 pod/video/models.py:78
+#: pod/video/forms.py:142 pod/video/models.py:78
msgid "Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)"
msgstr "Attribution - Pas de Modification 4.0 International (CC BY-ND 4.0)"
-#: pod/video/forms.py:145 pod/video/models.py:82
+#: pod/video/forms.py:146 pod/video/models.py:82
msgid ""
"Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)"
msgstr ""
"Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 "
"International (CC BY-NC-ND 4.0)"
-#: pod/video/forms.py:149 pod/video/models.py:85
+#: pod/video/forms.py:150 pod/video/models.py:85
msgid "Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)"
msgstr ""
"Attribution - Pas d’Utilisation Commerciale 4.0 International (CC BY-NC 4.0)"
-#: pod/video/forms.py:154 pod/video/models.py:88
+#: pod/video/forms.py:155 pod/video/models.py:88
msgid ""
"Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)"
msgstr ""
"Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes "
"Conditions 4.0 International (CC BY-NC-SA 4.0)"
-#: pod/video/forms.py:160 pod/video/models.py:92
+#: pod/video/forms.py:161 pod/video/models.py:92
msgid "Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)"
msgstr ""
"Attribution - Partage dans les Mêmes Conditions 4.0 International (CC BY-SA "
"4.0)"
-#: pod/video/forms.py:163 pod/video/models.py:388 pod/video/models.py:529
+#: pod/video/forms.py:164 pod/video/models.py:388 pod/video/models.py:529
msgid "Themes"
msgstr "Thèmes"
-#: pod/video/forms.py:164
+#: pod/video/forms.py:165
msgid "Select the channel in which you want your content to appear."
msgstr "Sélectionner la chaîne où vous voulez que votre contenu apparaisse."
-#: pod/video/forms.py:165
+#: pod/video/forms.py:166
msgid "Themes related to this channel will appear in the “Themes” list below."
msgstr ""
"Les thèmes relatifs à cette chaîne apparaîtront dans la liste \"Thèmes\" ci-"
"dessous."
-#: pod/video/forms.py:169
+#: pod/video/forms.py:170
msgid ""
"If the channel or Themes you wish does not appear in the list, please select "
"nothing and contact us to explain your needs."
@@ -3567,11 +3568,11 @@ msgstr ""
"liste, veuillez ne rien sélectionner et contactez nous pour expliquer vos "
"besoins."
-#: pod/video/forms.py:173 pod/video/models.py:540
+#: pod/video/forms.py:174 pod/video/models.py:540
msgid "Draft"
msgstr "Brouillon"
-#: pod/video/forms.py:174
+#: pod/video/forms.py:175
msgid ""
"In “Draft mode”, the content shows nowhere and nobody else but you can see "
"it."
@@ -3579,7 +3580,7 @@ msgstr ""
"En \"Mode brouillon\", le contenu n’apparaîtra nul part et uniquement vous "
"pourrez le voir."
-#: pod/video/forms.py:178
+#: pod/video/forms.py:179
msgid ""
"If you don't select “Draft mode”, you can restrict the content access to "
"only people who can log in"
@@ -3587,7 +3588,7 @@ msgstr ""
"Si vous ne sélectionnez pas le \"Mode brouillon\", vous pouvez restreindre "
"son accès aux personnes authentifiées"
-#: pod/video/forms.py:182
+#: pod/video/forms.py:183
msgid ""
"If you don't select “Draft mode”, you can add a password which will be asked "
"to anybody willing to watch your content."
@@ -3595,7 +3596,7 @@ msgstr ""
"Si vous ne sélectionnez par le \"Mode brouillon\", vous pouvez ajouter un "
"mot de passe qui sera demandé aux utilisateurs souhaitant voir votre contenu."
-#: pod/video/forms.py:185
+#: pod/video/forms.py:186
msgid ""
"If your video is in a playlist the password of your video will be removed "
"automatically."
@@ -3603,13 +3604,13 @@ msgstr ""
"Si votre vidéo est dans une playlist vous ne pourrez pas lui ajouter de mot "
"de passe."
-#: pod/video/forms.py:192 pod/video/models.py:509
+#: pod/video/forms.py:193 pod/video/models.py:509
#: pod/video/templates/videos/add_video.html:38
#: pod/video/templates/videos/add_video.html:81
msgid "Transcript"
msgstr "Transcrire"
-#: pod/video/forms.py:193 pod/video/templates/videos/add_video.html:84
+#: pod/video/forms.py:194 pod/video/templates/videos/add_video.html:84
msgid ""
"Available only in French and English, transcription is a speech recognition "
"technology that transforms an oral speech into text in an automated way. By "
@@ -3621,7 +3622,7 @@ msgstr ""
"automatiquement. En cochant cette case, cela va générer un fichier de sous-"
"titre durant l’encodage de la vidéo."
-#: pod/video/forms.py:198 pod/video/templates/videos/add_video.html:85
+#: pod/video/forms.py:199 pod/video/templates/videos/add_video.html:85
msgid ""
"You will probably have to modify this file using the captioning tool in the "
"completion page to improve it."
@@ -3629,20 +3630,20 @@ msgstr ""
"Vous aurez probablement à améliorer ce fichier en utilisant l’outil de sous-"
"titrage accessible sur la page de complétion de la video."
-#: pod/video/forms.py:223 pod/video/models.py:241
+#: pod/video/forms.py:224 pod/video/models.py:241
msgid "Extra style"
msgstr "Style supplémentaire"
-#: pod/video/forms.py:223 pod/video/models.py:236
+#: pod/video/forms.py:224 pod/video/models.py:236
msgid "Background color"
msgstr "Couleur d'arrière-plan"
-#: pod/video/forms.py:224
+#: pod/video/forms.py:225
msgid "In this field you can add some style to personnalize your channel."
msgstr ""
"Dans ce champ vous pouvez ajouter des styles pour personnaliser votre chaîne."
-#: pod/video/forms.py:228
+#: pod/video/forms.py:229
msgid ""
"Owners can add videos to this channel and access this page to customize the "
"channel."
@@ -3650,27 +3651,33 @@ msgstr ""
"Les propriétaires peuvent ajouter des vidéos dans cette chaîne et accéder à "
"cette page pour la personnaliser."
-#: pod/video/forms.py:230
+#: pod/video/forms.py:231
msgid "Users can only add videos to this channel"
msgstr "Les utilisateurs peuvent uniquement ajouter des vidéos à cette chaîne"
-#: pod/video/forms.py:386
+#: pod/video/forms.py:387
msgid "The date must be before or equal to "
msgstr "La date doit être antérieure ou égale à "
-#: pod/video/forms.py:443 pod/video/templates/videos/add_video.html:68
+#: pod/video/forms.py:398
+msgid "Owner of the video cannot be an additional owner too"
+msgstr ""
+"Le propriétaire de la video ne peut pas être propriétaire additionnel en "
+"même temps"
+
+#: pod/video/forms.py:450 pod/video/templates/videos/add_video.html:68
msgid "File"
msgstr "Fichier"
-#: pod/video/forms.py:697
+#: pod/video/forms.py:704
msgid "Delete video cannot be undo"
msgstr "La suppression est définitive"
-#: pod/video/forms.py:764
+#: pod/video/forms.py:771
msgid "A note can't be empty"
msgstr "Une note ne peut pas être vide"
-#: pod/video/forms.py:786
+#: pod/video/forms.py:793
msgid "A comment can't be empty"
msgstr "Un commentaire ne peut pas être vide"
@@ -3794,7 +3801,7 @@ msgstr "Master"
msgid "Doctorate"
msgstr "Doctorat"
-#: pod/video/models.py:66
+#: pod/video/models.py:66 pod/video/views.py:175
msgid "Other"
msgstr "Autre"
@@ -3962,7 +3969,7 @@ msgstr "Est une vidéo"
msgid "Date to delete"
msgstr "Date de suppression"
-#: pod/video/models.py:583
+#: pod/video/models.py:583 pod/video/templates/channel/channel.html:109
msgid "videos"
msgstr "vidéos"
@@ -4071,7 +4078,7 @@ msgid "Encoding steps"
msgstr "Etapes de l'encodage"
#: pod/video/models.py:1311 pod/video/models.py:1318 pod/video/models.py:1334
-#: pod/video/views.py:1248
+#: pod/video/views.py:1301
msgid "Note"
msgstr "Note"
@@ -4137,33 +4144,33 @@ msgstr "Vidéo à supprimer"
msgid "Videos to delete"
msgstr "Vidéos à supprimer"
-#: pod/video/templates/channel/channel.html:57
+#: pod/video/templates/channel/channel.html:62
msgid "Show view statistics for all videos in this theme"
msgstr "Afficher les statistiques de vue pour toutes les vidéos de ce thème"
-#: pod/video/templates/channel/channel.html:57
-#: pod/video/templates/channel/channel.html:63
+#: pod/video/templates/channel/channel.html:62
+#: pod/video/templates/channel/channel.html:68
#: pod/video/templates/videos/videos.html:27
msgid "Statistics views"
msgstr "Statistiques de vues"
-#: pod/video/templates/channel/channel.html:59
-#: pod/video/templates/channel/channel.html:65
+#: pod/video/templates/channel/channel.html:64
+#: pod/video/templates/channel/channel.html:70
#: pod/video/templates/videos/videos.html:29
msgid "subscribe to the video feed"
msgstr "souscrire au flux vidéo"
-#: pod/video/templates/channel/channel.html:60
-#: pod/video/templates/channel/channel.html:66
+#: pod/video/templates/channel/channel.html:65
+#: pod/video/templates/channel/channel.html:71
#: pod/video/templates/videos/videos.html:31
msgid "subscribe to the audio feed"
msgstr "souscrire au flux audio"
-#: pod/video/templates/channel/channel.html:63
+#: pod/video/templates/channel/channel.html:68
msgid "Show view statistics for all videos in this channel"
msgstr "Les utilisateurs peuvent uniquement ajouter des vidéos à cette chaîne"
-#: pod/video/templates/channel/channel.html:70
+#: pod/video/templates/channel/channel.html:75
#: pod/video/templates/channel/channel_edit.html:32
#: pod/video/templates/channel/channel_edit.html:33
#: pod/video/templates/channel/theme_edit.html:32
@@ -4171,14 +4178,14 @@ msgstr "Les utilisateurs peuvent uniquement ajouter des vidéos à cette chaîne
msgid "Edit the themes"
msgstr "Editer les thèmes"
-#: pod/video/templates/channel/channel.html:71
+#: pod/video/templates/channel/channel.html:76
#: pod/video/templates/channel/my_channels.html:20
#: pod/video/templates/channel/theme_edit.html:33
#: pod/video/templates/videos/video.html:97
msgid "Edit the channel"
msgstr "Éditer la chaîne"
-#: pod/video/templates/channel/channel.html:93
+#: pod/video/templates/channel/channel.html:98
#: pod/video/templates/videos/my_videos.html:9
#: pod/video/templates/videos/my_videos.html:18
#: pod/video/templates/videos/videos.html:6
@@ -4192,7 +4199,7 @@ msgid_plural "%(counter)s videos found"
msgstr[0] "%(counter)s vidéo trouvée"
msgstr[1] "%(counter)s vidéos trouvées"
-#: pod/video/templates/channel/channel.html:103
+#: pod/video/templates/channel/channel.html:135
msgid "Themes of "
msgstr "Thèmes de "
@@ -4529,6 +4536,14 @@ msgstr "Cocher la case pour indiquer le début de lecture souhaité."
msgid "QR code for this link"
msgstr "QR code pour le lien"
+#: pod/video/templates/videos/video.html:140
+msgid ""
+"This video is chaptered. Click the chapter button on the video player to view them."
+msgstr ""
+"Cette vidéo est chapitrée. Cliquez sur le bouton de chapitre sur le lecteur vidéo pour les voir."
+
#: pod/video/templates/videos/video_collaborate.html:20
msgid "Collaborate"
msgstr "Collaborer"
@@ -4752,120 +4767,120 @@ msgstr ""
"Le contenu \"%(content_title)s\" a été encodé au format web, et est "
"maintenant disponible sur %(site_title)s."
-#: pod/video/views.py:192 pod/video/views.py:232
+#: pod/video/views.py:246 pod/video/views.py:286
msgid "You cannot edit this channel."
msgstr "Vous ne pouvez éditer cette chaîne."
-#: pod/video/views.py:209 pod/video/views.py:660
+#: pod/video/views.py:263 pod/video/views.py:713
msgid "The changes have been saved."
msgstr "Les modifications ont été sauvegardées."
-#: pod/video/views.py:540
+#: pod/video/views.py:593
msgid "You don't have access to this playlist."
msgstr "Vous n'avez pas les droits d'accès à cette liste de lecture."
-#: pod/video/views.py:601
+#: pod/video/views.py:654
msgid "You cannot watch this video."
msgstr "Vous ne pouvez pas voir cette vidéo."
-#: pod/video/views.py:633
+#: pod/video/views.py:686
msgid "You cannot edit this video."
msgstr "Vous ne pouvez pas éditer cette vidéo."
-#: pod/video/views.py:710
+#: pod/video/views.py:763
msgid "You cannot delete this video."
msgstr "Vous ne pouvez pas supprimer cette vidéo."
-#: pod/video/views.py:720
+#: pod/video/views.py:773
msgid "The video has been deleted."
msgstr "La vidéo a été supprimée."
-#: pod/video/views.py:836
+#: pod/video/views.py:889
#, python-format
msgid "You cannot %s this note or comment."
msgstr "Vous ne pouvez pas %s cette note ou ce commentaire."
-#: pod/video/views.py:859
+#: pod/video/views.py:912
msgid "You cannot see this note or comment."
msgstr "Vous ne pouvez pas voir cette note ou ce commentaire."
-#: pod/video/views.py:1095 pod/video/views.py:1109 pod/video/views.py:1132
+#: pod/video/views.py:1148 pod/video/views.py:1162 pod/video/views.py:1185
msgid "The comment has been saved."
msgstr "Le commentaire a été enregistré."
-#: pod/video/views.py:1122 pod/video/views.py:1147
+#: pod/video/views.py:1175 pod/video/views.py:1200
msgid "The note has been saved."
msgstr "La note a été sauvegardée."
-#: pod/video/views.py:1187
+#: pod/video/views.py:1240
msgid "The note has been deleted."
msgstr "La note a été supprimée."
-#: pod/video/views.py:1195
+#: pod/video/views.py:1248
msgid "The comment has been deleted."
msgstr "Le commentaire a été supprimé."
-#: pod/video/views.py:1241 pod/video/views.py:1244 pod/video/views.py:1250
+#: pod/video/views.py:1294 pod/video/views.py:1297 pod/video/views.py:1303
msgid "None"
msgstr "Aucun"
-#: pod/video/views.py:1263
+#: pod/video/views.py:1316
msgid "ID"
msgstr "ID"
-#: pod/video/views.py:1263
+#: pod/video/views.py:1316
msgid "Status"
msgstr "Status"
-#: pod/video/views.py:1264
+#: pod/video/views.py:1317
msgid "Parent note id"
msgstr "Identifiant de note parent"
-#: pod/video/views.py:1264
+#: pod/video/views.py:1317
msgid "Parent comment id"
msgstr "ID du commentaire parent"
-#: pod/video/views.py:1265
+#: pod/video/views.py:1318
msgid "Created on"
msgstr "Créé le"
-#: pod/video/views.py:1265
+#: pod/video/views.py:1318
msgid "Modified on"
msgstr "Modifié le"
-#: pod/video/views.py:1266
+#: pod/video/views.py:1319
msgid "Note timestamp"
msgstr "Horodatage de la note"
-#: pod/video/views.py:1293 pod/video/views.py:1321
+#: pod/video/views.py:1346 pod/video/views.py:1374
msgid "You cannot access to this view."
msgstr "Vous ne pouvez pas accéder à cette vue."
-#: pod/video/views.py:1441
+#: pod/video/views.py:1494
msgid "Pod video view statistics"
msgstr "Statistiques de visualisation des vidéos Pod"
-#: pod/video/views.py:1447
+#: pod/video/views.py:1500
#, python-format
msgid "Video viewing statistics for %s"
msgstr "Statistiques de visualisation de la vidéo %s"
-#: pod/video/views.py:1450
+#: pod/video/views.py:1503
#, python-format
msgid "Video viewing statistics for the channel %s"
msgstr "Statistiques de visualisation des vidéos de la chaîne %s"
-#: pod/video/views.py:1453
+#: pod/video/views.py:1506
#, python-format
msgid "Video viewing statistics for the theme %s"
msgstr "Statistiques de visualisation des vidéos du thème %s"
-#: pod/video/views.py:1487
+#: pod/video/views.py:1546
#, python-format
msgid "You do not have access rights to this video: %s "
msgstr "Vous n'avez pas les droits d'accès à cette vidéo: %s "
-#: pod/video/views.py:1502
+#: pod/video/views.py:1562
#, python-format
msgid "The following video does not exist : %s"
msgstr "La video suivante n'existe pas : %s"
diff --git a/pod/locale/nl/LC_MESSAGES/django.po b/pod/locale/nl/LC_MESSAGES/django.po
index e8aa813830..c3ee53d974 100644
--- a/pod/locale/nl/LC_MESSAGES/django.po
+++ b/pod/locale/nl/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-06-12 16:31+0000\n"
+"POT-Creation-Date: 2020-06-26 09:50+0000\n"
"PO-Revision-Date: 2018-07-03 13:41+0100\n"
"Last-Translator: Nicolas \n"
"Language-Team: LANGUAGE \n"
@@ -29,7 +29,7 @@ msgstr ""
#: pod/authentication/forms.py:60 pod/authentication/forms.py:61
#: pod/main/templates/navbar.html:22 pod/main/templates/navbar_collapse.html:76
-#: pod/video/forms.py:227 pod/video/forms.py:558 pod/video/forms.py:562
+#: pod/video/forms.py:228 pod/video/forms.py:565 pod/video/forms.py:569
#: pod/video/models.py:247 pod/video/templates/videos/filter_aside.html:13
msgid "Users"
msgstr ""
@@ -91,7 +91,7 @@ msgid "registered-reader"
msgstr ""
#: pod/authentication/models.py:68 pod/recorder/models.py:122
-#: pod/video/models.py:1395 pod/video/views.py:1237
+#: pod/video/models.py:1395 pod/video/views.py:1290
msgid "Comment"
msgstr ""
@@ -162,8 +162,8 @@ msgstr ""
#: pod/video/templates/videos/video_note_comments_display.html:148
#: pod/video/templates/videos/video_note_display.html:27
#: pod/video/templates/videos/video_notes.html:80
-#: pod/video/templates/videos/video_notes.html:116 pod/video/views.py:214
-#: pod/video/views.py:673 pod/video/views.py:727 pod/video/views.py:1157
+#: pod/video/templates/videos/video_notes.html:116 pod/video/views.py:268
+#: pod/video/views.py:726 pod/video/views.py:780 pod/video/views.py:1210
#: pod/video_search/templates/search/search.html:42
msgid "One or more errors have been found in the form."
msgstr ""
@@ -245,6 +245,7 @@ msgid "Chapter"
msgstr ""
#: pod/chapter/models.py:31 pod/chapter/templates/video_chapter.html:67
+#: pod/video/templates/videos/video-element.html:38
msgid "Chapters"
msgstr ""
@@ -390,7 +391,7 @@ msgstr ""
#: pod/enrichment/templates/enrichment/group_enrichment.html:71
#: pod/interactive/templates/interactive/edit_interactive.html:128
#: pod/interactive/templates/interactive/group_interactive.html:71
-#: pod/video/templates/videos/video.html:219
+#: pod/video/templates/videos/video.html:223
#: pod/video/templates/videos/video_edit.html:136
msgid "Manage video"
msgstr ""
@@ -655,7 +656,7 @@ msgstr ""
msgid "End time of the overlay, in seconds."
msgstr ""
-#: pod/completion/models.py:279 pod/video/views.py:1266
+#: pod/completion/models.py:279 pod/video/views.py:1319
msgid "Content"
msgstr ""
@@ -1025,7 +1026,7 @@ msgstr ""
#: pod/completion/views.py:235 pod/completion/views.py:411
#: pod/completion/views.py:812 pod/podfile/views.py:427
-#: pod/podfile/views.py:477 pod/video/views.py:304 pod/video/views.py:1315
+#: pod/podfile/views.py:477 pod/video/views.py:358 pod/video/views.py:1368
msgid "Please correct errors"
msgstr ""
@@ -1091,8 +1092,8 @@ msgstr ""
#: pod/enrichment/models.py:137
#: pod/enrichment/templates/enrichment/list_enrichment.html:11
-#: pod/video/forms.py:94 pod/video/models.py:414 pod/video/models.py:469
-#: pod/video/templates/videos/video-info.html:83 pod/video/views.py:1263
+#: pod/video/forms.py:95 pod/video/models.py:414 pod/video/models.py:469
+#: pod/video/templates/videos/video-info.html:83 pod/video/views.py:1316
#: pod/video_search/templates/search/search.html:77
msgid "Type"
msgstr ""
@@ -1298,8 +1299,8 @@ msgstr ""
#: pod/interactive/templates/interactive/video_interactive.html:56
#: pod/interactive/templates/interactive/video_interactive.html:57
#: pod/video/templates/videos/video-info.html:9
-#: pod/video/templates/videos/video.html:145
-#: pod/video/templates/videos/video.html:146
+#: pod/video/templates/videos/video.html:149
+#: pod/video/templates/videos/video.html:150
msgid "Summary"
msgstr ""
@@ -1308,9 +1309,9 @@ msgstr ""
#: pod/interactive/templates/interactive/video_interactive.html:61
#: pod/interactive/templates/interactive/video_interactive.html:62
#: pod/video/templates/videos/video-info.html:33
-#: pod/video/templates/videos/video.html:152
-#: pod/video/templates/videos/video.html:154
#: pod/video/templates/videos/video.html:156
+#: pod/video/templates/videos/video.html:158
+#: pod/video/templates/videos/video.html:160
msgid "Infos"
msgstr ""
@@ -1319,8 +1320,8 @@ msgstr ""
#: pod/interactive/templates/interactive/video_interactive.html:67
#: pod/interactive/templates/interactive/video_interactive.html:68
#: pod/video/templates/videos/video-info.html:101
-#: pod/video/templates/videos/video.html:161
-#: pod/video/templates/videos/video.html:162
+#: pod/video/templates/videos/video.html:165
+#: pod/video/templates/videos/video.html:166
msgid "Downloads"
msgstr ""
@@ -1329,8 +1330,8 @@ msgstr ""
#: pod/interactive/templates/interactive/video_interactive.html:73
#: pod/interactive/templates/interactive/video_interactive.html:74
#: pod/video/templates/videos/video-info.html:146
-#: pod/video/templates/videos/video.html:167
-#: pod/video/templates/videos/video.html:168
+#: pod/video/templates/videos/video.html:171
+#: pod/video/templates/videos/video.html:172
msgid "Embed/Share"
msgstr ""
@@ -1338,8 +1339,8 @@ msgstr ""
#: pod/enrichment/templates/enrichment/video_enrichment.html:110
#: pod/interactive/templates/interactive/video_interactive.html:85
#: pod/interactive/templates/interactive/video_interactive.html:86
-#: pod/video/templates/videos/video.html:174
-#: pod/video/templates/videos/video.html:175
+#: pod/video/templates/videos/video.html:178
+#: pod/video/templates/videos/video.html:179
msgid "Other versions"
msgstr ""
@@ -1351,7 +1352,7 @@ msgstr ""
#: pod/enrichment/templates/enrichment/video_enrichment.html:118
#: pod/interactive/templates/interactive/video_interactive.html:94
-#: pod/video/templates/videos/video.html:188
+#: pod/video/templates/videos/video.html:192
msgid "Add the video to a playlist"
msgstr ""
@@ -1361,7 +1362,7 @@ msgstr ""
#: pod/playlist/templates/my_playlists.html:10
#: pod/playlist/templates/my_playlists.html:17
#: pod/playlist/templates/playlist.html:14
-#: pod/video/templates/videos/video.html:189
+#: pod/video/templates/videos/video.html:193
msgid "My playlists"
msgstr ""
@@ -1536,7 +1537,7 @@ msgstr ""
msgid "You cannot add interactivity to this video."
msgstr ""
-#: pod/live/forms.py:51 pod/video/forms.py:181 pod/video/forms.py:686
+#: pod/live/forms.py:51 pod/video/forms.py:182 pod/video/forms.py:693
msgid "Password"
msgstr ""
@@ -1546,8 +1547,8 @@ msgstr ""
#: pod/live/models.py:28 pod/live/templates/live/live.html:80
#: pod/video/models.py:234 pod/video/models.py:316
-#: pod/video/templates/channel/channel.html:74
-#: pod/video/templates/channel/channel.html:85
+#: pod/video/templates/channel/channel.html:79
+#: pod/video/templates/channel/channel.html:90
#: pod/video/templates/channel/channel_edit.html:38
#: pod/video/templates/videos/video.html:99
#: pod/video/templates/videos/video.html:108
@@ -1607,7 +1608,7 @@ msgstr ""
msgid "Check if the broadcaster is currently sending stream."
msgstr ""
-#: pod/live/models.py:88 pod/video/forms.py:177 pod/video/models.py:547
+#: pod/live/models.py:88 pod/video/forms.py:178 pod/video/models.py:547
msgid "Restricted access"
msgstr ""
@@ -1697,7 +1698,7 @@ msgstr ""
msgid "Sorry, no buildings found"
msgstr ""
-#: pod/live/views.py:47 pod/video/views.py:586
+#: pod/live/views.py:61 pod/video/views.py:639
msgid "The password is incorrect."
msgstr ""
@@ -1755,8 +1756,8 @@ msgstr ""
msgid "Please choose a subjects related your request"
msgstr ""
-#: pod/main/forms.py:60 pod/playlist/models.py:22 pod/video/forms.py:104
-#: pod/video/forms.py:218 pod/video/forms.py:244 pod/video/models.py:227
+#: pod/main/forms.py:60 pod/playlist/models.py:22 pod/video/forms.py:105
+#: pod/video/forms.py:219 pod/video/forms.py:245 pod/video/models.py:227
#: pod/video/models.py:309 pod/video/models.py:490
msgid "Description"
msgstr ""
@@ -2439,20 +2440,20 @@ msgid "Share on"
msgstr ""
#: pod/main/templates/aside.html:20 pod/main/templates/aside.html:25
-#: pod/video/forms.py:127 pod/video/models.py:441 pod/video/models.py:519
+#: pod/video/forms.py:128 pod/video/models.py:441 pod/video/models.py:519
#: pod/video/templates/videos/filter_aside.html:56
#: pod/video/templates/videos/video-info.html:89
msgid "Disciplines"
msgstr ""
-#: pod/main/templates/aside.html:38 pod/video/forms.py:123
+#: pod/main/templates/aside.html:38 pod/video/forms.py:124
#: pod/video/models.py:515 pod/video/templates/videos/filter_aside.html:78
#: pod/video/templates/videos/video-info.html:15
#: pod/video_search/templates/search/search.html:89
msgid "Tags"
msgstr ""
-#: pod/main/templates/base.html:61
+#: pod/main/templates/base.html:62
msgid "Home"
msgstr ""
@@ -2538,7 +2539,7 @@ msgstr ""
msgid "You just send a message from"
msgstr ""
-#: pod/main/templates/navbar.html:17 pod/video/forms.py:163
+#: pod/main/templates/navbar.html:17 pod/video/forms.py:164
#: pod/video/models.py:260 pod/video/models.py:525
msgid "Channels"
msgstr ""
@@ -2818,7 +2819,7 @@ msgstr ""
msgid "This playlist has been deleted."
msgstr ""
-#: pod/podfile/forms.py:49 pod/video/forms.py:255
+#: pod/podfile/forms.py:49 pod/video/forms.py:256
#, python-format
msgid ""
"The current file %(size)s, which is too large. The maximum file size is "
@@ -2978,7 +2979,7 @@ msgstr ""
msgid "If checked, record will be deleted instead of saving it"
msgstr ""
-#: pod/recorder/forms.py:74 pod/video/forms.py:696
+#: pod/recorder/forms.py:74 pod/video/forms.py:703
msgid "I agree"
msgstr ""
@@ -3259,205 +3260,205 @@ msgstr ""
msgid "Transcript selected"
msgstr ""
-#: pod/video/admin.py:260 pod/video/forms.py:227 pod/video/forms.py:565
-#: pod/video/forms.py:567 pod/video/models.py:244
+#: pod/video/admin.py:260 pod/video/forms.py:228 pod/video/forms.py:572
+#: pod/video/forms.py:574 pod/video/models.py:244
msgid "Owners"
msgstr ""
-#: pod/video/forms.py:80
+#: pod/video/forms.py:81
msgid "File field"
msgstr ""
-#: pod/video/forms.py:81 pod/video/models.py:454
+#: pod/video/forms.py:82 pod/video/models.py:454
#: pod/video/templates/videos/add_video.html:71
msgid "You can send an audio or video file."
msgstr ""
-#: pod/video/forms.py:82 pod/video/views.py:1560
+#: pod/video/forms.py:83 pod/video/views.py:1620
#, python-format
msgid "The following formats are supported: %s"
msgstr ""
-#: pod/video/forms.py:85 pod/video/forms.py:212 pod/video/forms.py:238
+#: pod/video/forms.py:86 pod/video/forms.py:213 pod/video/forms.py:239
msgid "Title field"
msgstr ""
-#: pod/video/forms.py:86 pod/video/forms.py:213 pod/video/forms.py:239
+#: pod/video/forms.py:87 pod/video/forms.py:214 pod/video/forms.py:240
msgid ""
"Please choose a title as short and accurate as possible, reflecting the main "
"subject / context of the content."
msgstr ""
-#: pod/video/forms.py:88 pod/video/forms.py:215 pod/video/forms.py:241
+#: pod/video/forms.py:89 pod/video/forms.py:216 pod/video/forms.py:242
msgid ""
"You can use the “Description” field below for all additional information."
msgstr ""
-#: pod/video/forms.py:90
+#: pod/video/forms.py:91
msgid ""
"You may add contributors later using the second button of the content "
"edition toolbar: they will appear in the “Info” tab at the bottom of the "
"audio / video player."
msgstr ""
-#: pod/video/forms.py:95
+#: pod/video/forms.py:96
msgid ""
"Select the type of your content. If the type you wish does not appear in the "
"list, please temporary select “Other” and contact us to explain your needs."
msgstr ""
-#: pod/video/forms.py:99 pod/video/models.py:483
+#: pod/video/forms.py:100 pod/video/models.py:483
#: pod/video/templates/videos/video-info.html:46
msgid "Additional owners"
msgstr ""
-#: pod/video/forms.py:100
+#: pod/video/forms.py:101
msgid ""
"In this field you can select and add additional owners to the video. These "
"additional owners will have the same rights as you except that they can't "
"delete this video."
msgstr ""
-#: pod/video/forms.py:105 pod/video/forms.py:219 pod/video/forms.py:245
+#: pod/video/forms.py:106 pod/video/forms.py:220 pod/video/forms.py:246
#: pod/video/models.py:229 pod/video/models.py:310 pod/video/models.py:493
msgid ""
"In this field you can describe your content, add all needed related "
"information, and format the result using the toolbar."
msgstr ""
-#: pod/video/forms.py:109
+#: pod/video/forms.py:110
msgid "Date of the event field"
msgstr ""
-#: pod/video/forms.py:110
+#: pod/video/forms.py:111
msgid "Enter the date of the event, if applicable, in the AAAA-MM-JJ format."
msgstr ""
-#: pod/video/forms.py:113 pod/video/models.py:500
+#: pod/video/forms.py:114 pod/video/models.py:500
#: pod/video_search/templates/search/search.html:140
msgid "University course"
msgstr ""
-#: pod/video/forms.py:114 pod/video/models.py:502
+#: pod/video/forms.py:115 pod/video/models.py:502
msgid "Select an university course as audience target of the content."
msgstr ""
-#: pod/video/forms.py:116
+#: pod/video/forms.py:117
msgid ""
"Choose “None / All” if it does not apply or if all are concerned, or “Other” "
"for an audience outside the european LMD scheme."
msgstr ""
-#: pod/video/forms.py:120 pod/video/models.py:505
+#: pod/video/forms.py:121 pod/video/models.py:505
#: pod/video/templates/videos/video-info.html:84
#: pod/video_search/templates/search/search.html:127
msgid "Main language"
msgstr ""
-#: pod/video/forms.py:121 pod/video/models.py:507
+#: pod/video/forms.py:122 pod/video/models.py:507
msgid "Select the main language used in the content."
msgstr ""
-#: pod/video/forms.py:124
+#: pod/video/forms.py:125
msgid ""
"Please try to add only relevant keywords that can be useful to other users."
msgstr ""
-#: pod/video/forms.py:128
+#: pod/video/forms.py:129
msgid ""
"Select the discipline to which your content belongs. If the discipline you "
"wish does not appear in the list, please select nothing and contact us to "
"explain your needs."
msgstr ""
-#: pod/video/forms.py:131 pod/video/forms.py:167 pod/video/models.py:531
+#: pod/video/forms.py:132 pod/video/forms.py:168 pod/video/models.py:531
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
-#: pod/video/forms.py:134 pod/video/models.py:521
+#: pod/video/forms.py:135 pod/video/models.py:521
msgid "Licence"
msgstr ""
-#: pod/video/forms.py:138 pod/video/models.py:77
+#: pod/video/forms.py:139 pod/video/models.py:77
msgid "Attribution 4.0 International (CC BY 4.0)"
msgstr ""
-#: pod/video/forms.py:141 pod/video/models.py:78
+#: pod/video/forms.py:142 pod/video/models.py:78
msgid "Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)"
msgstr ""
-#: pod/video/forms.py:145 pod/video/models.py:82
+#: pod/video/forms.py:146 pod/video/models.py:82
msgid ""
"Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)"
msgstr ""
-#: pod/video/forms.py:149 pod/video/models.py:85
+#: pod/video/forms.py:150 pod/video/models.py:85
msgid "Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)"
msgstr ""
-#: pod/video/forms.py:154 pod/video/models.py:88
+#: pod/video/forms.py:155 pod/video/models.py:88
msgid ""
"Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)"
msgstr ""
-#: pod/video/forms.py:160 pod/video/models.py:92
+#: pod/video/forms.py:161 pod/video/models.py:92
msgid "Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)"
msgstr ""
-#: pod/video/forms.py:163 pod/video/models.py:388 pod/video/models.py:529
+#: pod/video/forms.py:164 pod/video/models.py:388 pod/video/models.py:529
msgid "Themes"
msgstr ""
-#: pod/video/forms.py:164
+#: pod/video/forms.py:165
msgid "Select the channel in which you want your content to appear."
msgstr ""
-#: pod/video/forms.py:165
+#: pod/video/forms.py:166
msgid "Themes related to this channel will appear in the “Themes” list below."
msgstr ""
-#: pod/video/forms.py:169
+#: pod/video/forms.py:170
msgid ""
"If the channel or Themes you wish does not appear in the list, please select "
"nothing and contact us to explain your needs."
msgstr ""
-#: pod/video/forms.py:173 pod/video/models.py:540
+#: pod/video/forms.py:174 pod/video/models.py:540
msgid "Draft"
msgstr ""
-#: pod/video/forms.py:174
+#: pod/video/forms.py:175
msgid ""
"In “Draft mode”, the content shows nowhere and nobody else but you can see "
"it."
msgstr ""
-#: pod/video/forms.py:178
+#: pod/video/forms.py:179
msgid ""
"If you don't select “Draft mode”, you can restrict the content access to "
"only people who can log in"
msgstr ""
-#: pod/video/forms.py:182
+#: pod/video/forms.py:183
msgid ""
"If you don't select “Draft mode”, you can add a password which will be asked "
"to anybody willing to watch your content."
msgstr ""
-#: pod/video/forms.py:185
+#: pod/video/forms.py:186
msgid ""
"If your video is in a playlist the password of your video will be removed "
"automatically."
msgstr ""
-#: pod/video/forms.py:192 pod/video/models.py:509
+#: pod/video/forms.py:193 pod/video/models.py:509
#: pod/video/templates/videos/add_video.html:38
#: pod/video/templates/videos/add_video.html:81
msgid "Transcript"
msgstr ""
-#: pod/video/forms.py:193 pod/video/templates/videos/add_video.html:84
+#: pod/video/forms.py:194 pod/video/templates/videos/add_video.html:84
msgid ""
"Available only in French and English, transcription is a speech recognition "
"technology that transforms an oral speech into text in an automated way. By "
@@ -3465,51 +3466,55 @@ msgid ""
"encoding the video."
msgstr ""
-#: pod/video/forms.py:198 pod/video/templates/videos/add_video.html:85
+#: pod/video/forms.py:199 pod/video/templates/videos/add_video.html:85
msgid ""
"You will probably have to modify this file using the captioning tool in the "
"completion page to improve it."
msgstr ""
-#: pod/video/forms.py:223 pod/video/models.py:241
+#: pod/video/forms.py:224 pod/video/models.py:241
msgid "Extra style"
msgstr ""
-#: pod/video/forms.py:223 pod/video/models.py:236
+#: pod/video/forms.py:224 pod/video/models.py:236
msgid "Background color"
msgstr ""
-#: pod/video/forms.py:224
+#: pod/video/forms.py:225
msgid "In this field you can add some style to personnalize your channel."
msgstr ""
-#: pod/video/forms.py:228
+#: pod/video/forms.py:229
msgid ""
"Owners can add videos to this channel and access this page to customize the "
"channel."
msgstr ""
-#: pod/video/forms.py:230
+#: pod/video/forms.py:231
msgid "Users can only add videos to this channel"
msgstr ""
-#: pod/video/forms.py:386
+#: pod/video/forms.py:387
msgid "The date must be before or equal to "
msgstr ""
-#: pod/video/forms.py:443 pod/video/templates/videos/add_video.html:68
+#: pod/video/forms.py:398
+msgid "Owner of the video cannot be an additional owner too"
+msgstr ""
+
+#: pod/video/forms.py:450 pod/video/templates/videos/add_video.html:68
msgid "File"
msgstr ""
-#: pod/video/forms.py:697
+#: pod/video/forms.py:704
msgid "Delete video cannot be undo"
msgstr ""
-#: pod/video/forms.py:764
+#: pod/video/forms.py:771
msgid "A note can't be empty"
msgstr ""
-#: pod/video/forms.py:786
+#: pod/video/forms.py:793
msgid "A comment can't be empty"
msgstr ""
@@ -3619,7 +3624,7 @@ msgstr ""
msgid "Doctorate"
msgstr ""
-#: pod/video/models.py:66
+#: pod/video/models.py:66 pod/video/views.py:175
msgid "Other"
msgstr ""
@@ -3765,7 +3770,7 @@ msgstr ""
msgid "Date to delete"
msgstr ""
-#: pod/video/models.py:583
+#: pod/video/models.py:583 pod/video/templates/channel/channel.html:109
msgid "videos"
msgstr ""
@@ -3874,7 +3879,7 @@ msgid "Encoding steps"
msgstr ""
#: pod/video/models.py:1311 pod/video/models.py:1318 pod/video/models.py:1334
-#: pod/video/views.py:1248
+#: pod/video/views.py:1301
msgid "Note"
msgstr ""
@@ -3940,33 +3945,33 @@ msgstr ""
msgid "Videos to delete"
msgstr ""
-#: pod/video/templates/channel/channel.html:57
+#: pod/video/templates/channel/channel.html:62
msgid "Show view statistics for all videos in this theme"
msgstr ""
-#: pod/video/templates/channel/channel.html:57
-#: pod/video/templates/channel/channel.html:63
+#: pod/video/templates/channel/channel.html:62
+#: pod/video/templates/channel/channel.html:68
#: pod/video/templates/videos/videos.html:27
msgid "Statistics views"
msgstr ""
-#: pod/video/templates/channel/channel.html:59
-#: pod/video/templates/channel/channel.html:65
+#: pod/video/templates/channel/channel.html:64
+#: pod/video/templates/channel/channel.html:70
#: pod/video/templates/videos/videos.html:29
msgid "subscribe to the video feed"
msgstr ""
-#: pod/video/templates/channel/channel.html:60
-#: pod/video/templates/channel/channel.html:66
+#: pod/video/templates/channel/channel.html:65
+#: pod/video/templates/channel/channel.html:71
#: pod/video/templates/videos/videos.html:31
msgid "subscribe to the audio feed"
msgstr ""
-#: pod/video/templates/channel/channel.html:63
+#: pod/video/templates/channel/channel.html:68
msgid "Show view statistics for all videos in this channel"
msgstr ""
-#: pod/video/templates/channel/channel.html:70
+#: pod/video/templates/channel/channel.html:75
#: pod/video/templates/channel/channel_edit.html:32
#: pod/video/templates/channel/channel_edit.html:33
#: pod/video/templates/channel/theme_edit.html:32
@@ -3974,14 +3979,14 @@ msgstr ""
msgid "Edit the themes"
msgstr ""
-#: pod/video/templates/channel/channel.html:71
+#: pod/video/templates/channel/channel.html:76
#: pod/video/templates/channel/my_channels.html:20
#: pod/video/templates/channel/theme_edit.html:33
#: pod/video/templates/videos/video.html:97
msgid "Edit the channel"
msgstr ""
-#: pod/video/templates/channel/channel.html:93
+#: pod/video/templates/channel/channel.html:98
#: pod/video/templates/videos/my_videos.html:9
#: pod/video/templates/videos/my_videos.html:18
#: pod/video/templates/videos/videos.html:6
@@ -3995,7 +4000,7 @@ msgid_plural "%(counter)s videos found"
msgstr[0] ""
msgstr[1] ""
-#: pod/video/templates/channel/channel.html:103
+#: pod/video/templates/channel/channel.html:135
msgid "Themes of "
msgstr ""
@@ -4311,6 +4316,12 @@ msgstr ""
msgid "QR code for this link"
msgstr ""
+#: pod/video/templates/videos/video.html:140
+msgid ""
+"This video is chaptered. Click the chapter button on the video player to view them."
+msgstr ""
+
#: pod/video/templates/videos/video_collaborate.html:20
msgid "Collaborate"
msgstr ""
@@ -4525,120 +4536,120 @@ msgid ""
"available on %(site_title)s."
msgstr ""
-#: pod/video/views.py:192 pod/video/views.py:232
+#: pod/video/views.py:246 pod/video/views.py:286
msgid "You cannot edit this channel."
msgstr ""
-#: pod/video/views.py:209 pod/video/views.py:660
+#: pod/video/views.py:263 pod/video/views.py:713
msgid "The changes have been saved."
msgstr ""
-#: pod/video/views.py:540
+#: pod/video/views.py:593
msgid "You don't have access to this playlist."
msgstr ""
-#: pod/video/views.py:601
+#: pod/video/views.py:654
msgid "You cannot watch this video."
msgstr ""
-#: pod/video/views.py:633
+#: pod/video/views.py:686
msgid "You cannot edit this video."
msgstr ""
-#: pod/video/views.py:710
+#: pod/video/views.py:763
msgid "You cannot delete this video."
msgstr ""
-#: pod/video/views.py:720
+#: pod/video/views.py:773
msgid "The video has been deleted."
msgstr ""
-#: pod/video/views.py:836
+#: pod/video/views.py:889
#, python-format
msgid "You cannot %s this note or comment."
msgstr ""
-#: pod/video/views.py:859
+#: pod/video/views.py:912
msgid "You cannot see this note or comment."
msgstr ""
-#: pod/video/views.py:1095 pod/video/views.py:1109 pod/video/views.py:1132
+#: pod/video/views.py:1148 pod/video/views.py:1162 pod/video/views.py:1185
msgid "The comment has been saved."
msgstr ""
-#: pod/video/views.py:1122 pod/video/views.py:1147
+#: pod/video/views.py:1175 pod/video/views.py:1200
msgid "The note has been saved."
msgstr ""
-#: pod/video/views.py:1187
+#: pod/video/views.py:1240
msgid "The note has been deleted."
msgstr ""
-#: pod/video/views.py:1195
+#: pod/video/views.py:1248
msgid "The comment has been deleted."
msgstr ""
-#: pod/video/views.py:1241 pod/video/views.py:1244 pod/video/views.py:1250
+#: pod/video/views.py:1294 pod/video/views.py:1297 pod/video/views.py:1303
msgid "None"
msgstr ""
-#: pod/video/views.py:1263
+#: pod/video/views.py:1316
msgid "ID"
msgstr ""
-#: pod/video/views.py:1263
+#: pod/video/views.py:1316
msgid "Status"
msgstr ""
-#: pod/video/views.py:1264
+#: pod/video/views.py:1317
msgid "Parent note id"
msgstr ""
-#: pod/video/views.py:1264
+#: pod/video/views.py:1317
msgid "Parent comment id"
msgstr ""
-#: pod/video/views.py:1265
+#: pod/video/views.py:1318
msgid "Created on"
msgstr ""
-#: pod/video/views.py:1265
+#: pod/video/views.py:1318
msgid "Modified on"
msgstr ""
-#: pod/video/views.py:1266
+#: pod/video/views.py:1319
msgid "Note timestamp"
msgstr ""
-#: pod/video/views.py:1293 pod/video/views.py:1321
+#: pod/video/views.py:1346 pod/video/views.py:1374
msgid "You cannot access to this view."
msgstr ""
-#: pod/video/views.py:1441
+#: pod/video/views.py:1494
msgid "Pod video view statistics"
msgstr ""
-#: pod/video/views.py:1447
+#: pod/video/views.py:1500
#, python-format
msgid "Video viewing statistics for %s"
msgstr ""
-#: pod/video/views.py:1450
+#: pod/video/views.py:1503
#, python-format
msgid "Video viewing statistics for the channel %s"
msgstr ""
-#: pod/video/views.py:1453
+#: pod/video/views.py:1506
#, python-format
msgid "Video viewing statistics for the theme %s"
msgstr ""
-#: pod/video/views.py:1487
+#: pod/video/views.py:1546
#, python-format
msgid "You do not have access rights to this video: %s "
msgstr ""
-#: pod/video/views.py:1502
+#: pod/video/views.py:1562
#, python-format
msgid "The following video does not exist : %s"
msgstr ""
diff --git a/pod/main/static/js/main.js b/pod/main/static/js/main.js
index 4963860cdf..3334bca3dc 100644
--- a/pod/main/static/js/main.js
+++ b/pod/main/static/js/main.js
@@ -105,7 +105,7 @@ $(document).on('change', "#displaytime", function(e) {
});
/*** USE TO SHOW THEME FROM CHANNELS ***/
-var get_list = function(tab, level, tab_selected, tag_type, li_class, attrs, add_link, current, channel) {
+var get_list = function(tab, level, tab_selected, tag_type, li_class, attrs, add_link, current, channel, show_only_parent_themes=false) {
level = level || 0;
tab_selected = tab_selected || [];
tag_type = tag_type || "option";
@@ -126,9 +126,9 @@ var get_list = function(tab, level, tab_selected, tag_type, li_class, attrs, add
else list_class+='"';
list += '<'+tag_type+' '+selected+' '+list_class+' '+attrs+' value="'+i+'" id="theme_'+i+'">'+prefix+" "+title+''+tag_type+'>';
var child = val.child;
- var count = Object.keys(child).length;
- if(count>0) {
- list += get_list(val.child, level+=1, tab_selected, tag_type, li_class, attrs, add_link, current, channel);
+ var count = Object.keys(child).length;
+ if(count>0 && !show_only_parent_themes) {
+ list += get_list(child, level+=1, tab_selected, tag_type, li_class, attrs, add_link, current, channel);
}
});
return list;
@@ -137,7 +137,7 @@ var get_list = function(tab, level, tab_selected, tag_type, li_class, attrs, add
/*** CHANNELS IN NAVBAR ***/
$('.collapsibleThemes').on('show.bs.collapse', function () {
- var str = get_list(listTheme["channel_"+$(this).data('id')], 0, [], tag_type="li", li_class="list-inline-item badge badge-primary-pod badge-pill", attrs='', add_link=true, current="", channel="");
+ var str = get_list(listTheme["channel_"+$(this).data('id')], 0, [], tag_type="li", li_class="list-inline-item badge badge-primary-pod badge-pill", attrs='', add_link=true, current="", channel="", show_only_parent_themes=show_only_parent_themes);
$(this).html('