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

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

On améliore nos pipelines

On ajoute une static pour éviter de repasser dans le goulot plusieurs fois.

On utilise document_modifier au lieu d'une requete sql

On ajoute quelques explications

File size: 6.5 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
12/**
13 * Insertion dans le pipeline post_edition
14 * Récupération d'informations sur le document lors de son insertion en base
15 *
16 * @param array $flux Le contexte du pipeline
17 * @return $flux le $flux modifié
18 */
19function getid3_post_edition($flux){
20        if(in_array($flux['args']['operation'],array('ajouter_document','modifier'))){
21                static $getid3_done = false;
22                if(!$getid3_done){
23                        $id_document = $flux['args']['id_objet'];
24                        $son_modif_id3 = array("mp3");
25                        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
26                        $extensions_vignettes = array("png","gif","jpg");
27                        $conf_id3 = lire_config('getid3/reecriture_tags',array());
28                        $document_orig = sql_fetsel('*','spip_documents','id_vignette='.intval($id_document));
29                        $document = sql_fetsel("*", "spip_documents","id_document=".sql_quote($id_document));
30                        $extension = $document['extension'];
31                        if($flux['args']['operation'] == 'ajouter_document'){
32                                spip_log('on ajoute le document','getid3');
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                                spip_log('on modifie le document','getid3');
79                               
80                                if(in_any($extension,$son_modif_id3)){
81                                        $update = false;
82                                        foreach($flux['data'] as $key => $value){
83                                                if(in_array($key,$conf_id3))
84                                                        $update = true;
85                                        }
86                                        if(is_numeric($flux['data']['id_vignette'])){
87                                                $update = true;
88                                        }
89                                        if($update){
90                                                $files = null;
91                                               
92                                                /**
93                                                 * On récupère tout d'abord les anciens tags
94                                                 */     
95                                                include_spip('inc/documents');
96                                                $fichier = get_spip_doc($document['fichier']);
97                                                $recuperer_id3 = charger_fonction('recuperer_id3','inc');
98                                                $valeurs = $recuperer_id3($fichier);
99                                               
100                                                if(is_numeric($flux['data']['id_vignette'])){
101                                                        $files[] = get_spip_doc(sql_getfetsel('fichier','spip_documents','id_document='.intval($flux['data']['id_vignette'])));
102                                                }
103                                                foreach($valeurs as $valeur => $info){
104                                                        if(preg_match('/cover/',$valeur) && (count($files) == 0)){
105                                                                $files[] = $info;
106                                                        }else{
107                                                                $valeurs[$valeur] = filtrer_entites($info);
108                                                        }
109                                                }
110                                               
111                                                if(isset($flux['data']['titre']) && in_array('titre',$conf_id3))
112                                                        $valeurs['title'] = $flux['data']['titre'];
113                                                       
114                                                if(isset($flux['data']['descriptif']) && in_array('descriptif',$conf_id3))
115                                                        $valeurs['comment'] = $flux['data']['descriptif'];
116                                                       
117                                                /**
118                                                 * On écrit les tags
119                                                 */
120                                                $ecrire_id3 = charger_fonction('getid3_ecrire_infos','inc');
121                                                $err = $ecrire_id3($id_document,$valeurs,$files);
122                                        }
123                                }
124                        }
125                }
126        }
127        return $flux;
128}
129
130/**
131 * Ajouter le lien vers la modifs des id3
132 *
133 * @param array $flux
134 * @return array
135 */
136function getid3_document_desc_actions($flux){
137        $infos = sql_fetsel('distant,extension','spip_documents','id_document='.intval($flux['args']['id_document']));
138        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
139        $son_modif_id3 = lire_config('getid3_write',array('mp3'));
140        $id_document = $flux['args']['id_document'];
141        if(($infos['distant'] == 'non') && in_array($infos['extension'],$son_modif_id3)){
142                $redirect = self();
143                $url = parametre_url(generer_url_ecrire('document_id3_editer','id_document='.intval($id_document)),'redirect',$redirect);
144                $texte = _T('getid3:lien_modifier_id3');
145                if($flux['args']['position'] == 'galerie'){
146                        $flux['data'] .= "[<a href='$url'>$texte</a>]";
147                }else{
148                        $flux['data'] .= "<span class='sep'> | </span><a href='$url' target='_blank' class='editbox'>$texte</a>";
149                }
150        }if(($infos['distant'] == 'non') && in_array($infos['extension'],$son_recup_id3)){
151                $texte2 = _T('getid3:lien_recuperer_infos');
152                $action2 = generer_action_auteur('getid3_infos', "0/article/$id_document", $redirect);
153                $flux['data'] .= "<span class='sep'> | </span><a href='$action2'>$texte2</a>";
154        }
155        return $flux;
156}
157
158/**
159 * Pipeline Cron de GetID3
160 *
161 * Vérifie chaque jour que les logiciels nécessaires sont présents
162 *
163 * @return L'array des taches complété
164 * @param array $taches_generales Un array des tâches du cron de SPIP
165 */
166function getid3_taches_generales_cron($taches_generales){
167        $taches_generales['getid3_taches_generales'] = 24*60*60;
168        return $taches_generales;
169}
170
171/**
172 * Insertion dans le pipeline recuperer_fond (SPIP)
173 *
174 * On affiche les informations du document
175 *
176 * @param array $flux
177 *              Le contexte du pipeline
178 * @return array $flux
179 *              Le contexte du pipeline modifié
180 */
181function getid3_recuperer_fond($flux){
182        if ($flux['args']['fond']=='modeles/document_desc'){
183                if(isset($flux['args']['contexte']['id_document']) && ($flux['args']['contexte']['id_document'] > 0)){
184                        $son_recup_id3 = array("mp3","ogg","flac","aiff","aif","wav","m4a","oga");
185                        $extension = sql_getfetsel("extension", "spip_documents","id_document=".intval($flux['args']['contexte']['id_document']));
186                        if(in_array($extension,$son_recup_id3))
187                                $flux['data']['texte'] .= recuperer_fond('prive/inclure/prive_infos_son',$flux['args']['contexte']);
188                }
189        }
190        return $flux;
191}
192?>
Note: See TracBrowser for help on using the repository browser.