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

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

Premier tour de compatibilité SPIP 3.0 :

-* paquet.xml et ses fichiers de langue
-* getid3_administrations
-* on met à jour les entêtes de fichier PHP

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