source: spip-zone/_plugins_/spipmotion/trunk/spipmotion_pipelines.php @ 62717

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

On renomme ces 2 inc en spipmotion_truc pour être cohérent

File size: 10.1 KB
Line 
1<?php
2/**
3 * SPIPmotion
4 * Gestion de l'encodage et des métadonnées de vidéos directement dans spip
5 *
6 * Auteurs :
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 * 2008-2012 - Distribué sous licence GNU/GPL
9 *
10 */
11
12if (!defined("_ECRIRE_INC_VERSION")) return;
13
14/**
15 * Insertion dans le pipeline document_desc_actions (Mediathèque)
16 *
17 * Affiche les boutons supplémentaires de :
18 * - récupération de logo dans le cas d'une vidéo
19 * - récupération d'informations spécifiques dans le cas d'une video
20 * (Dans le cas d'un son, c'est le plugin getID3 qui s'en charge)
21 * - bouton de demande d'encodage / de réencodage du son ou de la vidéo
22 *
23 * @param array $flux Le contexte du pipeline
24 * @return $flux Le contexte du pipeline complété
25 */
26function spipmotion_document_desc_actions($flux){
27        $flux['data'] .= recuperer_fond('prive/squelettes/inclure/spipmotion_document_desc_action',$flux['args']);
28        return $flux;
29}
30
31/**
32 * Pipeline Cron de SPIPmotion (SPIP)
33 *
34 * Vérifie la présence à intervalle régulier de fichiers à encoder
35 * dans la file d'attente
36 *
37 * @return L'array des taches complété
38 * @param array $taches_generales Un array des tâches du cron de SPIP
39 */
40function spipmotion_taches_generales_cron($taches_generales){
41        $taches_generales['spipmotion_file'] = 3*60;
42        $taches_generales['spipmotion_taches_generales'] = 24*60*60;
43        return $taches_generales;
44}
45
46/**
47 * Insertion dans le pipeline post-edition
48 *
49 * Intervient à chaque modification d'un objet de SPIP
50 * notamment lors de l'ajout d'un document
51 *
52 * @return $flux Le contexte de pipeline complété
53 * @param array $flux Le contexte du pipeline
54 */
55function spipmotion_post_edition($flux){
56        if(in_array($flux['args']['operation'], array('ajouter_document','document_copier_local'))){
57                include_spip('inc/config');
58                $id_document = $flux['args']['id_objet'];
59
60                /**
61                 * Il n'est pas nécessaire de récupérer la vignette d'une vignette
62                 * ni ses infos.
63                 */
64                $infos_doc = sql_fetsel('fichier,mode,distant','spip_documents','id_document='.intval($id_document));
65                $mode = $infos_doc['mode'];
66                $fichier = $infos_doc['fichier'];
67
68                if(($mode != 'vignette') && ($infos_doc['distant'] == 'non')){
69                        $document = sql_fetsel("docs.id_document, docs.extension,docs.fichier,docs.id_orig,docs.mode,docs.distant, L.vu, 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));
70                        $extension = $document['extension'];
71
72                        /**
73                         * Si nous sommes dans un format vidéo que SPIPmotion peut traiter,
74                         * on lui applique certains traitements
75                         * Les fichiers sonores sont gérés par le plugin getID3 pour cela
76                         */
77
78                        if(($GLOBALS['meta']['spipmotion_casse'] != 'oui') && in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
79                                /**
80                                 * Récupération des informations de la vidéo
81                                 */
82                                $recuperer_infos = charger_fonction('spipmotion_recuperer_infos','inc');
83                                $infos = $recuperer_infos($id_document);
84
85                                /**
86                                 * Récupération d'un logo de la vidéo
87                                 */
88                                $recuperer_logo = charger_fonction("spipmotion_recuperer_logo","inc");
89                                $logo = $recuperer_logo($id_document);
90
91                                /**
92                                 * On l'ajoute dans la file d'attente d'encodage si nécessaire
93                                 * Si et seulement si on a l'option d'activée dans la conf
94                                 */
95                                if(lire_config('spipmotion/encodage_auto') == 'on'){
96                                        $fichier = basename(get_spip_doc($document['fichier']));
97                                        $racine = preg_replace('/-encoded-(\d)/','',substr($fichier,0,-(strlen($document['extension'])+1)));
98                                        $racine = preg_replace('/-encoded-(\d+)/','',$racine);
99                                        $racine = preg_replace('/-encoded/','',$racine);
100                                        $id_doc = sql_getfetsel('id_document','spip_documents',"fichier LIKE '%$racine%' AND id_document != $id_document AND id_orig=0");
101                                        if(($GLOBALS['meta']['spipmotion_casse'] != 'oui') && !preg_match('/-encoded/',$document['fichier']) OR !$id_doc){
102                                                include_spip('action/spipmotion_ajouter_file_encodage');
103                                                spipmotion_genere_file($id_document,$document['objet'],$document['id_objet']);
104                                                $encodage_direct = charger_fonction('spipmotion_encodage_direct','inc');
105                                                $encodage_direct();
106                                        }
107                                }
108                                $invalider = true;
109                        }
110                        /**
111                         * On invalide le cache de cet élément si nécessaire
112                         */
113                        if($invalider){
114                                include_spip('inc/invalideur');
115                                suivre_invalideur("id='id_$type/$id'");
116                        }
117                }
118        }else if($flux['args']['operation'] == 'supprimer_documents'){
119                sql_delete('spip_spipmotion_attentes','id_document = '.$flux['args']['id_objet'].' AND encode!='.sql_quote('oui'));
120        }
121        return $flux;
122}
123
124/**
125 * Insertion dans le pipeline insert_head_css (SPIP)
126 * On ajoute la css de spipmotion dans le public
127 *
128 * @param string $flux
129 *              Le contenu du head
130 * @return string $flux
131 *              Le head modifié
132 */
133function spipmotion_insert_head_css($flux){
134        $flux .= '
135<link rel="stylesheet" href="'.direction_css(find_in_path('spipmotion.css', 'css/', false)).'" type="text/css" media="all" />
136';
137        return $flux;
138}
139
140/**
141 * Insertion dans le pipeline header_prive (SPIP)
142 * On ajoute la css de spipmotion dans le privé
143 *
144 * @param string $flux
145 *              Le contenu du head
146 * @return string $flux
147 *              Le head modifié
148 */
149function spipmotion_header_prive($flux){
150        $flux .= '
151<link rel="stylesheet" href="'.direction_css(find_in_path('spipmotion.css', 'css/', false)).'" type="text/css" media="all" />
152';
153        return $flux;
154}
155
156/**
157 * Insertion dans le pipeline jquery_plugins (SPIP)
158 * On ajoute deux javascript dans le head
159 *
160 * @param array $plugins
161 *              L'array des js insérés
162 * @return array $plugins
163 *              L'array des js insérés modifié
164 */
165function spipmotion_jquery_plugins($plugins){
166        if(!in_array(_DIR_LIB_FLOT.'/jquery.flot.js',$plugins)){
167                $plugins[] = _DIR_LIB_FLOT.'/jquery.flot.js';
168        }
169        $plugins[] = 'javascript/spipmotion_flot_extras.js';
170        return $plugins;
171}
172
173/**
174 * Insertion dans le pipeline jqueryui_plugin (plugin jQuery UI)
175 *
176 * On ajoute le chargement des js pour les tabs (utilisés dans la conf)
177 *
178 * @param array $plugins
179 *              Un tableau des scripts déjà demandé au chargement
180 * @retune array $plugins
181 *              Le tableau complété avec les scripts que l'on souhaite
182 */
183function spipmotion_jqueryui_plugins($plugins){
184        $plugins[] = "jquery.ui.tabs";
185        return $plugins;
186}
187
188function spipmotion_post_spipmotion_encodage($flux){
189        if($flux['args']['reussite'] == 'oui'){
190                $origine = sql_fetsel('extension,fichier','spip_documents','id_document='.intval($flux['args']['id_document_orig']));
191                if(in_array($origine['extension'],array('mp3','flac','ogg','oga'))){
192                        $extension_nouveau = sql_getfetsel('extension','spip_documents','id_document='.intval($flux['args']['id_document']));
193                        if(in_array($extension_nouveau,lire_config('getid3_write',array()))){
194                                include_spip('inc/documents');
195                                $recuperer_id3 = charger_fonction('recuperer_id3','inc');
196                                $infos_write = array(
197                                        'title' => 0,
198                                        'artist' => 0,
199                                        'year' => 0,
200                                        'date'=>0,
201                                        'album' => 0,
202                                        'genre' => 0,
203                                        'comment' => 0,
204                                        'tracknumber' => 0
205                                );
206                                $infos_origine = $recuperer_id3(get_spip_doc($origine['fichier']));
207                               
208                                if($extension_nouveau == 'mp3'){
209                                        $images = array();
210                                        foreach($infos_origine as $info_origine => $info){
211                                                if(preg_match('/cover/',$info_origine)){
212                                                        $images[] = $info;
213                                                }
214                                        }
215                                }
216                                $infos_encode = array_intersect_key($infos_origine,$infos_write);
217                                $ecrire_infos = charger_fonction('getid3_ecrire_infos','inc');
218                                $ecrire_infos($flux['args']['id_document'],$infos_encode,$images);
219                        }
220                }
221        }
222       
223        $encodage_direct = charger_fonction('spipmotion_encodage_direct','inc');
224        $encodage_direct();
225       
226        return $flux;
227}
228
229/**
230 * Insertion dans le pipeline formulaire_verifier (SPIP)
231 *
232 * Vérification de certaines valeurs de la configuration
233 *
234 * @param array $flux
235 *              Le contexte du pipeline
236 * @return array $flux
237 *              Le contexte du pipeline modifié
238 */
239function spipmotion_formulaire_verifier($flux){
240        if($flux['args']['form'] == 'configurer_spipmotion'){
241                foreach($_POST as $key => $val){
242                        if(preg_match('/(bitrate|height|width|frequence_audio|fps|passes|qualite_video|qualite_audio).*/',$key) && $val){
243                                if(!ctype_digit($val)){
244                                        $flux['data'][$key] = _T('spipmotion:erreur_valeur_int');
245                                }else if(preg_match('/(height|width).*/',$key) && ($val < 100)){
246                                        $flux['data'][$key] = _T('spipmotion:erreur_valeur_int_superieur',array('val'=> 100));
247                                }
248                        }
249                }
250                if(count($erreur) > 0)
251                        $flux['data']['message_erreur'] = _T('spipmotion:erreur_formulaire_configuration');
252        }
253        return $flux;
254}
255
256/**
257 * Insertion dans le pipeline formulaire_traiter (SPIP)
258 *
259 * Traitement spécifique à la validation du formulaire de configuration
260 *
261 * @param array $flux
262 *              Le contexte du pipeline
263 * @return array $flux
264 *              Le contexte du pipeline modifié
265 */
266function spipmotion_formulaire_traiter($flux){
267        if($flux['args']['form'] == 'configurer_spipmotion'){
268                $valeurs = $_POST;
269       
270                $verifier_binaires = charger_fonction('spipmotion_verifier_binaires','inc');
271                $erreurs = $verifier_binaires($valeurs);
272               
273                if(!in_array('ffmpeg',$erreurs)){
274                        /**
275                         * On récupère les informations du nouveau ffmpeg
276                         */
277                        $ffmpeg_infos = charger_fonction('spipmotion_ffmpeg_infos','inc');
278                        $ffmpeg_infos(true);
279                }
280       
281                if(count($erreurs) > 0){
282                        include_spip('inc/invalideur');
283                        suivre_invalideur('1');
284       
285                        /**
286                         * On force le rechargement de la page car on a récupéré de nouvelles infos sur ffmpeg
287                         */
288                        $flux['data']['redirect'] = self();
289                }
290        }
291        return $flux;
292}
293
294
295/**
296 * Insertion dans le pipeline recuperer_fond (SPIP)
297 *
298 * On affiche les informations du document
299 *
300 * @param array $flux
301 *              Le contexte du pipeline
302 * @return array $flux
303 *              Le contexte du pipeline modifié
304 */
305function spipmotion_recuperer_fond($flux){
306        if ($flux['args']['fond']=='modeles/document_desc'){
307                if(isset($flux['args']['contexte']['id_document']) && ($flux['args']['contexte']['id_document'] > 0)){
308                        $extension = sql_getfetsel("extension", "spip_documents","id_document=".intval($flux['args']['contexte']['id_document']));
309                        if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
310                                $flux['data']['texte'] .= recuperer_fond('prive/squelettes/inclure/prive_infos_video', $flux['args']['contexte']);
311                        }
312                }
313        }
314        return $flux;
315}
316?>
Note: See TracBrowser for help on using the repository browser.