You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.2 KiB
178 lines
5.2 KiB
<?php |
|
/** |
|
* GetID3 |
|
* Gestion des métadonnées de fichiers sonores directement dans SPIP |
|
* |
|
* Auteurs : |
|
* kent1 (http://www.kent1.info - kent1@arscenic.info), BoOz |
|
* 2008-2013 - Distribué sous licence GNU/GPL |
|
* |
|
* @package SPIP\GetID3\Pipelines |
|
*/ |
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) { |
|
return; |
|
} |
|
|
|
/** |
|
* Insertion dans le pipeline post_edition (SPIP) |
|
* |
|
* Récupération d'informations sur le document lors de son insertion en base |
|
* |
|
* @param array $flux |
|
* Le contexte du pipeline |
|
* @return array $flux |
|
* Le contexte du pipeline ($flux) modifié |
|
*/ |
|
function getid3_post_edition($flux) { |
|
if (in_array($flux['args']['operation'], array('ajouter_document', 'modifier'))) { |
|
static $getid3_done = false; |
|
if (!$getid3_done) { |
|
$id_document = $flux['args']['id_objet']; |
|
$son_modif_id3 = array('mp3','ogg','oga','flac'); |
|
$conf_id3 = lire_config('getid3/reecriture_tags', array()); |
|
$files = array(); |
|
$document = sql_fetsel('mode,fichier', 'spip_documents', 'id_document='.intval($id_document)); |
|
if ($flux['args']['operation'] == 'ajouter_document') { |
|
$getid3_done = true; |
|
/** |
|
* L'ajout est une vignette |
|
* Insertion de la vignette automatiquement dans le mp3 si changement |
|
*/ |
|
if ($document['mode'] == 'vignette' |
|
&& ($document_orig = sql_fetsel('distant,extension,fichier', 'spip_documents', 'id_vignette='.intval($id_document))) |
|
&& ($document_orig['distant'] != 'oui') |
|
&& in_array($document_orig['extension'], $son_modif_id3) |
|
) { |
|
include_spip('inc/documents'); |
|
|
|
$fichier_orig = get_spip_doc($document_orig['fichier']); |
|
$recuperer_id3 = charger_fonction('recuperer_id3', 'inc'); |
|
$valeurs = $recuperer_id3($fichier_orig); |
|
|
|
$files[] = get_spip_doc($document['fichier']); |
|
|
|
foreach ($valeurs as $valeur => $info) { |
|
if (preg_match('/cover/', $valeur) && (count($files) == 0)) { |
|
$files[] = $info; |
|
} else { |
|
$valeurs[$valeur] = filtrer_entites($info); |
|
} |
|
} |
|
|
|
/** |
|
* On écrit les tags |
|
*/ |
|
$ecrire_id3 = charger_fonction('getid3_ecrire_infos', 'inc'); |
|
$ecrire_id3($document_orig['id_document'], $valeurs, $files); |
|
} |
|
} |
|
/** |
|
* Mise à jour des tags des mp3 si besoin |
|
*/ |
|
if ($flux['args']['action'] == 'modifier') { |
|
$getid3_done = true; |
|
|
|
if (in_any($extension, $son_modif_id3)) { |
|
$update = false; |
|
foreach ($flux['data'] as $key => $value) { |
|
if (in_array($key, $conf_id3)) { |
|
$update = true; |
|
} |
|
} |
|
if (is_numeric($flux['data']['id_vignette'])) { |
|
$update = true; |
|
} |
|
if ($update) { |
|
$files = null; |
|
|
|
/** |
|
* On récupère tout d'abord les anciens tags |
|
*/ |
|
include_spip('inc/documents'); |
|
$fichier = get_spip_doc($document['fichier']); |
|
$recuperer_id3 = charger_fonction('recuperer_id3', 'inc'); |
|
$valeurs = $recuperer_id3($fichier); |
|
|
|
if (is_numeric($flux['data']['id_vignette'])) { |
|
$files[] = get_spip_doc(sql_getfetsel('fichier', 'spip_documents', 'id_document='.intval($flux['data']['id_vignette']))); |
|
} |
|
|
|
foreach ($valeurs as $valeur => $info) { |
|
if (preg_match('/cover/', $valeur) && (count($files) == 0)) { |
|
$files[] = $info; |
|
} else { |
|
$valeurs[$valeur] = $info; |
|
} |
|
} |
|
|
|
if (isset($flux['data']['titre']) && in_array('titre', $conf_id3)) { |
|
$valeurs['title'] = $flux['data']['titre']; |
|
} |
|
|
|
if (isset($flux['data']['descriptif']) && in_array('descriptif', $conf_id3)) { |
|
$valeurs['comment'] = $flux['data']['descriptif']; |
|
} |
|
|
|
/** |
|
* On écrit les tags |
|
*/ |
|
$ecrire_id3 = charger_fonction('getid3_ecrire_infos', 'inc'); |
|
$ecrire_id3($id_document, $valeurs, $files); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $flux; |
|
} |
|
|
|
/** |
|
* Insertion dans le pipeline post_edition (plugin medias) |
|
* |
|
* Ajouter le lien vers la récupération et la modif des id3 |
|
* |
|
* @param array $flux |
|
* Le contexte du pipeline |
|
* @return array $flux |
|
* Le contexte du pipeline modifié |
|
*/ |
|
function getid3_document_desc_actions($flux) { |
|
$flux['data'] .= recuperer_fond('prive/squelettes/inclure/metadatas_document_desc_action', $flux['args']); |
|
return $flux; |
|
} |
|
|
|
/** |
|
* Pipeline Cron de GetID3 |
|
* |
|
* Vérifie chaque jour que les logiciels nécessaires sont présents |
|
* |
|
* @return L'array des taches complété |
|
* @param array $taches_generales Un array des tâches du cron de SPIP |
|
*/ |
|
function getid3_taches_generales_cron($taches_generales) { |
|
$taches_generales['getid3_taches_generales'] = 24*60*60; |
|
return $taches_generales; |
|
} |
|
|
|
/** |
|
* Insertion dans le pipeline recuperer_fond (SPIP) |
|
* |
|
* On affiche les informations du document |
|
* |
|
* @param array $flux |
|
* Le contexte du pipeline |
|
* @return array $flux |
|
* Le contexte du pipeline modifié |
|
*/ |
|
function getid3_recuperer_fond($flux) { |
|
if ($flux['args']['fond'] == 'modeles/document_desc') { |
|
if (isset($flux['args']['contexte']['id_document']) && ($flux['args']['contexte']['id_document'] > 0)) { |
|
$media = sql_getfetsel('media', 'spip_documents', 'id_document='.intval($flux['args']['contexte']['id_document'])); |
|
if (in_array($media, array('audio','video'))) { |
|
$flux['data']['texte'] .= recuperer_fond('prive/squelettes/inclure/prive_infos_media', $flux['args']['contexte']); |
|
} |
|
} |
|
} |
|
return $flux; |
|
}
|
|
|