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

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

On n'utilise plus du tout id_orig maintenant mais des documents attachés au document original

On évite de dupliquer du code dans les ajouts en file

Refaire marcher correctement les encodages et les logos

Améliorer les ajouts dans l'espace privé en n'utilisant que des squelettes

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('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.