From 70d2fd1b679fb3cc4679daf5b2317a8537f09984 Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <>
Date: Mon, 8 May 2017 09:24:36 +0000
Subject: [PATCH] Ajout du champ duree : entier en nombre de secondes, dans
 unite Ajout d'une fonction metadata/audio pour renseigner les infos de duree,
 titre, credits des sons

---
 .gitattributes             |  1 +
 base/medias.php            |  9 ++++---
 medias_administrations.php |  4 +++
 metadata/audio.php         | 54 ++++++++++++++++++++++++++++++++++++++
 paquet.xml                 |  2 +-
 5 files changed, 66 insertions(+), 4 deletions(-)
 create mode 100644 metadata/audio.php

diff --git a/.gitattributes b/.gitattributes
index b83a29e3..e700efe4 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -257,6 +257,7 @@ lib/mejs/renderers/vimeo.min.js -text
 /medias_fonctions.php -text
 /medias_ieconfig.php -text
 /medias_pipelines.php -text
+metadata/audio.php -text
 metadata/html.php -text
 metadata/image.php -text
 metadata/svg.php -text
diff --git a/base/medias.php b/base/medias.php
index 8ac1626d..48c628af 100644
--- a/base/medias.php
+++ b/base/medias.php
@@ -148,6 +148,7 @@ function medias_declarer_tables_objets_sql($tables) {
 			'taille' => 'bigint',
 			'largeur' => 'integer',
 			'hauteur' => 'integer',
+			'duree' => 'integer',
 			'media' => "varchar(10) DEFAULT 'file' NOT NULL",
 			'mode' => "varchar(10) DEFAULT 'document' NOT NULL",
 			'distant' => "VARCHAR(3) DEFAULT 'non'",
@@ -190,6 +191,7 @@ function medias_declarer_tables_objets_sql($tables) {
 			'taille',
 			'largeur',
 			'hauteur',
+			'duree',
 			'mode',
 			'credits',
 			'fichier',
@@ -202,12 +204,13 @@ function medias_declarer_tables_objets_sql($tables) {
 			'id_vignette',
 			'titre',
 			'descriptif',
-			'hauteur',
-			'largeur',
-			'fichier',
 			'taille',
+			'largeur',
+			'hauteur',
+			'duree',
 			'mode',
 			'credits',
+			'fichier',
 			'distant'
 		),
 		'modeles' => array('document', 'doc', 'img', 'emb', 'image', 'video', 'text', 'audio', 'application'),
diff --git a/medias_administrations.php b/medias_administrations.php
index 093e3594..d7dba546 100644
--- a/medias_administrations.php
+++ b/medias_administrations.php
@@ -186,6 +186,10 @@ function medias_upgrade($nom_meta_base_version, $version_cible) {
 		array('medias_maj_date_publication_documents'),
 		array('medias_check_statuts', true)
 	);
+	$maj['1.3.5'] = array(
+		// ajout de duree
+		array('maj_tables', 'spip_documents'),
+	);
 	include_spip('base/upgrade');
 	include_spip('base/medias');
 	maj_plugin($nom_meta_base_version, $version_cible, $maj);
diff --git a/metadata/audio.php b/metadata/audio.php
new file mode 100644
index 00000000..3553f3f6
--- /dev/null
+++ b/metadata/audio.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * GetID3
+ * Gestion des métadonnées de fichiers sonores et vidéos directement dans SPIP
+ *
+ * Auteurs :
+ * kent1 (http://www.kent1.info - kent1@arscenic.info), BoOz
+ * 2008-2016 - Distribué sous licence GNU/GPL
+ *
+ * @package SPIP\GetID3\Metadatas
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+
+/**
+ * Fonction de récupération des métadonnées sur les fichiers audio
+ * appelée à l'insertion en base dans le plugin medias (inc/renseigner_document)
+ *
+ * @param string $file
+ *    Le chemin du fichier à analyser
+ * @return array $metas
+ *    Le tableau comprenant les différentes metas à mettre en base
+ */
+function metadata_audio($file) {
+	$meta = array();
+
+	include_spip('lib/getid3/getid3');
+	$getID3 = new getID3;
+	$getID3->setOption(array('tempdir' => _DIR_TMP));
+
+	// Scan file - should parse correctly if file is not corrupted
+	$file_info = $getID3->analyze($file);
+
+	header('Content-Type: text/plain');
+	if (isset($file_info['id3v2']['comments']['title'])) {
+		$meta['titre'] = ucfirst(trim(implode(' ',$file_info['id3v2']['comments']['title'])));
+	}
+	if (isset($file_info['id3v2']['comments']['artist'])) {
+		$meta['credits'] = implode(', ',$file_info['id3v2']['comments']['artist']);
+		if (isset($file_info['id3v2']['comments']['album'])) {
+			$meta['credits'] .= '/'.trim(implode(' ',$file_info['id3v2']['comments']['album']));
+		}
+		if (isset($file_info['id3v2']['comments']['year'])) {
+			$meta['credits'] .= ' ('.trim(implode(' ',$file_info['id3v2']['comments']['year'])).')';
+		}
+	}
+	if (isset($file_info['playtime_seconds'])) {
+		$meta['duree'] = round($file_info['playtime_seconds'], 0);
+	}
+
+	return $meta;
+}
diff --git a/paquet.xml b/paquet.xml
index 0bdeea82..c49f0ae0 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -5,7 +5,7 @@
 	etat="stable"
 	compatibilite="[3.2.0-dev;3.2.*]"
 	logo="prive/themes/spip/images/portfolio-32.png"
-	schema="1.3.4"
+	schema="1.3.5"
 >
 
 	<nom>Medias</nom>
-- 
GitLab