source: spip-zone/_plugins_/getID3/trunk/getid3_pipelines.php @ 62814

Last change on this file since 62814 was 62814, checked in by kent1@…, 7 years ago

Une chaine de langue manquante

Moins de logs

De simples quotas au lieu de doubles, il parait que c'est plus rapide

File size: 6.4 KB
Line 
1<?php
2/**
3 * GetID3
4 * Gestion des métadonnées de fichiers sonores directement dans SPIP
5 *
6 * Auteurs :
7 * kent1 (http://www.kent1.info - kent1@arscenic.info), BoOz
8 * 2008-2012 - Distribué sous licence GNU/GPL
9 *
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) return;
13
14/**
15 * Insertion dans le pipeline post_edition
16 * Récupération d'informations sur le document lors de son insertion en base
17 *
18 * @param array $flux Le contexte du pipeline
19 * @return $flux le $flux modifié
20 */
21function getid3_post_edition($flux){
22        if(in_array($flux['args']['operation'],array('ajouter_document','modifier'))){
23                static $getid3_done = false;
24                if(!$getid3_done){
25                        $id_document = $flux['args']['id_objet'];
26                        $son_modif_id3 = array("mp3,ogg,oga,flac");
27                        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
28                        $extensions_vignettes = array("png","gif","jpg");
29                        $conf_id3 = lire_config('getid3/reecriture_tags',array());
30                        $document = sql_fetsel("*", "spip_documents","id_document=".sql_quote($id_document));
31                        $extension = $document['extension'];
32                        if($flux['args']['operation'] == 'ajouter_document'){
33                                $getid3_done = true;
34                                /**
35                                 * Récupération automatique des infos des fichiers sons à leur insertion
36                                 */
37                                if(in_any($extension,$son_recup_id3)){
38                                        $recuperer_infos = charger_fonction('getid3_recuperer_infos','inc');
39                                        $infos = $recuperer_infos($id_document);
40                                }
41                                /**
42                                 * L'ajout est une vignette
43                                 * Insertion de la vignette automatiquement dans le mp3 si changement
44                                 */
45                                else if(in_any($extension,$extensions_vignettes)
46                                        && ($document_orig = sql_fetsel('*','spip_documents','id_vignette='.intval($id_document)))
47                                        && ($document_orig['distant'] != 'oui')
48                                        && in_array($document_orig['extension'],$son_modif_id3)
49                                ){
50                                        include_spip('inc/documents');
51                                       
52                                        $fichier_orig = get_spip_doc($document_orig['fichier']);
53                                        $recuperer_id3 = charger_fonction('recuperer_id3','inc');
54                                        $valeurs = $recuperer_id3($fichier_orig);
55                                       
56                                        $files[] = get_spip_doc($document['fichier']);
57                                       
58                                        foreach($valeurs as $valeur => $info){
59                                                if(preg_match('/cover/',$valeur) && (count($files) == 0)){
60                                                        $files[] = $info;
61                                                }else{
62                                                        $valeurs[$valeur] = filtrer_entites($info);
63                                                }
64                                        }
65                                       
66                                        /**
67                                         * On écrit les tags
68                                         */
69                                        $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
70                                        $err = $ecrire_id3($document_orig['id_document'],$valeurs,$files);
71                                }
72                        }
73                        /**
74                         * Mise à jour des tags des mp3 si besoin
75                         */
76                        if($flux['args']['action'] == 'modifier'){
77                        $getid3_done = true;
78                               
79                                if(in_any($extension,$son_modif_id3)){
80                                        $update = false;
81                                        foreach($flux['data'] as $key => $value){
82                                                if(in_array($key,$conf_id3))
83                                                        $update = true;
84                                        }
85                                        if(is_numeric($flux['data']['id_vignette'])){
86                                                $update = true;
87                                        }
88                                        if($update){
89                                                $files = null;
90                                               
91                                                /**
92                                                 * On récupère tout d'abord les anciens tags
93                                                 */     
94                                                include_spip('inc/documents');
95                                                $fichier = get_spip_doc($document['fichier']);
96                                                $recuperer_id3 = charger_fonction('recuperer_id3','inc');
97                                                $valeurs = $recuperer_id3($fichier);
98                                               
99                                                if(is_numeric($flux['data']['id_vignette'])){
100                                                        $files[] = get_spip_doc(sql_getfetsel('fichier','spip_documents','id_document='.intval($flux['data']['id_vignette'])));
101                                                }
102                                                foreach($valeurs as $valeur => $info){
103                                                        if(preg_match('/cover/',$valeur) && (count($files) == 0)){
104                                                                $files[] = $info;
105                                                        }else{
106                                                                $valeurs[$valeur] = filtrer_entites($info);
107                                                        }
108                                                }
109                                               
110                                                if(isset($flux['data']['titre']) && in_array('titre',$conf_id3))
111                                                        $valeurs['title'] = $flux['data']['titre'];
112                                                       
113                                                if(isset($flux['data']['descriptif']) && in_array('descriptif',$conf_id3))
114                                                        $valeurs['comment'] = $flux['data']['descriptif'];
115                                                       
116                                                /**
117                                                 * On écrit les tags
118                                                 */
119                                                $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
120                                                $err = $ecrire_id3($id_document,$valeurs,$files);
121                                        }
122                                }
123                        }
124                }
125        }
126        return $flux;
127}
128
129/**
130 * Ajouter le lien vers la modifs des id3
131 *
132 * @param array $flux
133 * @return array
134 */
135function getid3_document_desc_actions($flux){
136        $infos = sql_fetsel('distant,extension','spip_documents','id_document='.intval($flux['args']['id_document']));
137        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
138        $son_modif_id3 = lire_config('getid3_write',array('mp3'));
139        $id_document = $flux['args']['id_document'];
140        if(($infos['distant'] == 'non') && in_array($infos['extension'],$son_modif_id3)){
141                $redirect = self();
142                $url = parametre_url(generer_url_ecrire('document_id3_editer','id_document='.intval($id_document)),'redirect',$redirect);
143                $texte = _T('getid3:lien_modifier_id3');
144                if($flux['args']['position'] == 'galerie'){
145                        $flux['data'] .= "[<a href='$url'>$texte</a>]";
146                }else{
147                        $flux['data'] .= "<span class='sep'> | </span><a href='$url' target='_blank' class='editbox'>$texte</a>";
148                }
149        }if(($infos['distant'] == 'non') && in_array($infos['extension'],$son_recup_id3)){
150                $texte2 = _T('getid3:lien_recuperer_infos');
151                $action2 = generer_action_auteur('getid3_infos', "0/article/$id_document", $redirect);
152                $flux['data'] .= "<span class='sep'> | </span><a href='$action2'>$texte2</a>";
153        }
154        return $flux;
155}
156
157/**
158 * Pipeline Cron de GetID3
159 *
160 * Vérifie chaque jour que les logiciels nécessaires sont présents
161 *
162 * @return L'array des taches complété
163 * @param array $taches_generales Un array des tâches du cron de SPIP
164 */
165function getid3_taches_generales_cron($taches_generales){
166        $taches_generales['getid3_taches_generales'] = 24*60*60;
167        return $taches_generales;
168}
169
170/**
171 * Insertion dans le pipeline recuperer_fond (SPIP)
172 *
173 * On affiche les informations du document
174 *
175 * @param array $flux
176 *              Le contexte du pipeline
177 * @return array $flux
178 *              Le contexte du pipeline modifié
179 */
180function getid3_recuperer_fond($flux){
181        if ($flux['args']['fond']=='modeles/document_desc'){
182                if(isset($flux['args']['contexte']['id_document']) && ($flux['args']['contexte']['id_document'] > 0)){
183                        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
184                        $extension = sql_getfetsel("extension", "spip_documents","id_document=".intval($flux['args']['contexte']['id_document']));
185                        if(in_array($extension,$son_recup_id3))
186                                $flux['data']['texte'] .= recuperer_fond('prive/inclure/prive_infos_son',$flux['args']['contexte']);
187                }
188        }
189        return $flux;
190}
191?>
Note: See TracBrowser for help on using the repository browser.