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

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

Eviter des notices PHP

Encore une occurence à id_orig

Amélioriations des squelettes privés

File size: 9.7 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                         * -* récupération des informations
76                         * -* récupération d'une vignette
77                         * Les fichiers sonores sont gérés par le plugin getID3 pour cela
78                         */
79                        if(($GLOBALS['meta']['spipmotion_casse'] != 'oui') && in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
80                                /**
81                                 * Récupération des informations de la vidéo
82                                 */
83                                $recuperer_infos = charger_fonction('spipmotion_recuperer_infos','inc');
84                                $infos = $recuperer_infos($id_document);
85
86                                /**
87                                 * Récupération d'un logo de la vidéo
88                                 */
89                                $recuperer_logo = charger_fonction("spipmotion_recuperer_logo","inc");
90                                $logo = $recuperer_logo($id_document);
91
92                                /**
93                                 * On l'ajoute dans la file d'attente d'encodage si nécessaire
94                                 * Si et seulement si on a l'option d'activée dans la conf
95                                 */
96                                if((lire_config('spipmotion/encodage_auto') == 'on') && ($mode != 'conversion')){
97                                        include_spip('action/spipmotion_ajouter_file_encodage');
98                                        spipmotion_genere_file($id_document,$document['objet'],$document['id_objet']);
99                                        $encodage_direct = charger_fonction('spipmotion_encodage_direct','inc');
100                                        $encodage_direct();
101                                }
102                                $invalider = true;
103                        }
104                        /**
105                         * On invalide le cache de cet élément si nécessaire
106                         */
107                        if($invalider){
108                                include_spip('inc/invalideur');
109                                suivre_invalideur("id='id_$type/$id'");
110                        }
111                }
112        }else if($flux['args']['operation'] == 'supprimer_documents'){
113                sql_delete('spip_spipmotion_attentes','id_document = '.$flux['args']['id_objet'].' AND encode!='.sql_quote('oui'));
114        }
115        return $flux;
116}
117
118/**
119 * Insertion dans le pipeline insert_head_css (SPIP)
120 * On ajoute la css de spipmotion dans le public
121 *
122 * @param string $flux
123 *              Le contenu du head
124 * @return string $flux
125 *              Le head modifié
126 */
127function spipmotion_insert_head_css($flux){
128        $flux .= '
129<link rel="stylesheet" href="'.direction_css(find_in_path('spipmotion.css', 'css/', false)).'" type="text/css" media="all" />
130';
131        return $flux;
132}
133
134/**
135 * Insertion dans le pipeline header_prive (SPIP)
136 * On ajoute la css de spipmotion dans le privé
137 *
138 * @param string $flux
139 *              Le contenu du head
140 * @return string $flux
141 *              Le head modifié
142 */
143function spipmotion_header_prive($flux){
144        $flux .= '
145<link rel="stylesheet" href="'.direction_css(find_in_path('spipmotion.css', 'css/', false)).'" type="text/css" media="all" />
146';
147        return $flux;
148}
149
150/**
151 * Insertion dans le pipeline jquery_plugins (SPIP)
152 * On ajoute deux javascript dans le head
153 *
154 * @param array $plugins
155 *              L'array des js insérés
156 * @return array $plugins
157 *              L'array des js insérés modifié
158 */
159function spipmotion_jquery_plugins($plugins){
160        if(!in_array(_DIR_LIB_FLOT.'/jquery.flot.js',$plugins)){
161                $plugins[] = _DIR_LIB_FLOT.'/jquery.flot.js';
162        }
163        $plugins[] = 'javascript/spipmotion_flot_extras.js';
164        return $plugins;
165}
166
167/**
168 * Insertion dans le pipeline jqueryui_plugin (plugin jQuery UI)
169 *
170 * On ajoute le chargement des js pour les tabs (utilisés dans la conf)
171 *
172 * @param array $plugins
173 *              Un tableau des scripts déjà demandé au chargement
174 * @retune array $plugins
175 *              Le tableau complété avec les scripts que l'on souhaite
176 */
177function spipmotion_jqueryui_plugins($plugins){
178        $plugins[] = "jquery.ui.tabs";
179        return $plugins;
180}
181
182function spipmotion_post_spipmotion_encodage($flux){
183        if($flux['args']['reussite'] == 'oui'){
184                $origine = sql_fetsel('extension,fichier','spip_documents','id_document='.intval($flux['args']['id_document_orig']));
185                if(in_array($origine['extension'],array('mp3','flac','ogg','oga'))){
186                        $extension_nouveau = sql_getfetsel('extension','spip_documents','id_document='.intval($flux['args']['id_document']));
187                        if(in_array($extension_nouveau,lire_config('getid3_write',array()))){
188                                include_spip('inc/documents');
189                                $recuperer_id3 = charger_fonction('recuperer_id3','inc');
190                                $infos_write = array(
191                                        'title' => 0,
192                                        'artist' => 0,
193                                        'year' => 0,
194                                        'date'=>0,
195                                        'album' => 0,
196                                        'genre' => 0,
197                                        'comment' => 0,
198                                        'tracknumber' => 0
199                                );
200                                $infos_origine = $recuperer_id3(get_spip_doc($origine['fichier']));
201                               
202                                if($extension_nouveau == 'mp3'){
203                                        $images = array();
204                                        foreach($infos_origine as $info_origine => $info){
205                                                if(preg_match('/cover/',$info_origine)){
206                                                        $images[] = $info;
207                                                }
208                                        }
209                                }
210                                $infos_encode = array_intersect_key($infos_origine,$infos_write);
211                                $ecrire_infos = charger_fonction('getid3_ecrire_infos','inc');
212                                $ecrire_infos($flux['args']['id_document'],$infos_encode,$images);
213                        }
214                }
215        }
216       
217        $encodage_direct = charger_fonction('spipmotion_encodage_direct','inc');
218        $encodage_direct();
219       
220        return $flux;
221}
222
223/**
224 * Insertion dans le pipeline formulaire_verifier (SPIP)
225 *
226 * Vérification de certaines valeurs de la configuration
227 *
228 * @param array $flux
229 *              Le contexte du pipeline
230 * @return array $flux
231 *              Le contexte du pipeline modifié
232 */
233function spipmotion_formulaire_verifier($flux){
234        if($flux['args']['form'] == 'configurer_spipmotion'){
235                foreach($_POST as $key => $val){
236                        if(preg_match('/(bitrate|height|width|frequence_audio|fps|passes|qualite_video|qualite_audio).*/',$key) && $val){
237                                if(!ctype_digit($val)){
238                                        $flux['data'][$key] = _T('spipmotion:erreur_valeur_int');
239                                }else if(preg_match('/(height|width).*/',$key) && ($val < 100)){
240                                        $flux['data'][$key] = _T('spipmotion:erreur_valeur_int_superieur',array('val'=> 100));
241                                }
242                        }
243                }
244                if(count($erreur) > 0)
245                        $flux['data']['message_erreur'] = _T('spipmotion:erreur_formulaire_configuration');
246        }
247        return $flux;
248}
249
250/**
251 * Insertion dans le pipeline formulaire_traiter (SPIP)
252 *
253 * Traitement spécifique à la validation du formulaire de configuration
254 *
255 * @param array $flux
256 *              Le contexte du pipeline
257 * @return array $flux
258 *              Le contexte du pipeline modifié
259 */
260function spipmotion_formulaire_traiter($flux){
261        if($flux['args']['form'] == 'configurer_spipmotion'){
262                $valeurs = $_POST;
263       
264                $verifier_binaires = charger_fonction('spipmotion_verifier_binaires','inc');
265                $erreurs = $verifier_binaires($valeurs);
266               
267                if(!in_array('ffmpeg',$erreurs)){
268                        /**
269                         * On récupère les informations du nouveau ffmpeg
270                         */
271                        $ffmpeg_infos = charger_fonction('spipmotion_ffmpeg_infos','inc');
272                        $ffmpeg_infos(true);
273                }
274       
275                if(count($erreurs) > 0){
276                        include_spip('inc/invalideur');
277                        suivre_invalideur('1');
278       
279                        /**
280                         * On force le rechargement de la page car on a récupéré de nouvelles infos sur ffmpeg
281                         */
282                        //$flux['data']['redirect'] = self();
283                }
284        }
285        return $flux;
286}
287
288
289/**
290 * Insertion dans le pipeline recuperer_fond (SPIP)
291 *
292 * On affiche les informations du document
293 *
294 * @param array $flux
295 *              Le contexte du pipeline
296 * @return array $flux
297 *              Le contexte du pipeline modifié
298 */
299function spipmotion_recuperer_fond($flux){
300        if ($flux['args']['fond']=='modeles/document_desc'){
301                if(isset($flux['args']['contexte']['id_document']) && ($flux['args']['contexte']['id_document'] > 0)){
302                        $extension = sql_getfetsel("extension", "spip_documents","id_document=".intval($flux['args']['contexte']['id_document']));
303                        if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
304                                $flux['data']['texte'] .= recuperer_fond('prive/squelettes/inclure/prive_infos_video', $flux['args']['contexte']);
305                        }
306                }
307        }
308        return $flux;
309}
310?>
Note: See TracBrowser for help on using the repository browser.