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

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

On va éviter de casser la table des types de documents à l'upgrade, de toute manière le plugin medias gère ces documents maintenant

On utilise la popin comme pour la modification des infos de doc pour éditer les id3 des fichiers sons

Améliorations du formulaire

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' target='_blank' class='editbox'>$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.