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

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

rha ... c'est vraiment du hack là

File size: 5.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 * Quentin Drouet (kent1)
8 * 2008-2010 - Distribué sous licence GNU/GPL
9 *
10 */
11
12/**
13 * Insertion dans le pipeline editer_contenu_objet
14 *
15 * Affiche les boutons supplémentaires de :
16 * - récupération de logo dans le cas d'une vidéo
17 * - récupération d'informations spécifiques dans le cas d'une video
18 * (Dans le cas d'un son, c'est le plugin getID3 qui s'en charge)
19 * - bouton de demande d'encodage / de réencodage du son ou de la vidéo
20 *
21 * @param array $flux Le contexte du pipeline
22 * @return $flux Le contexte du pipeline complété
23 */
24function spipmotion_editer_contenu_objet($flux){
25        if(is_array($flux['args']) && ($flux['args']['type'] == 'case_document')){
26                $id_document = $flux['args']['id'];
27                $document = sql_fetsel("docs.id_document, docs.id_orig, docs.extension,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=".sql_quote($id_document));
28                $extension = $document['extension'];
29                $type = $document['objet'];
30                $id = $document['id_objet'];
31                if($document['distant'] !== 'distant'){
32                        if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
33                                if($document['id_orig'] > 0){
34                                        $flux['data'] .= '<p>'._T('spipmotion:version_encodee_de',array('id_orig'=>$document['id_orig'])).'</p>';
35                                }
36                                if(extension_loaded('ffmpeg')){
37                                        $infos_videos = charger_fonction('spipmotion_infos_videos', 'inc');
38                                        $flux['data'] .= $infos_videos($id,$id_document,$type);
39                                }
40                        }
41                        if(in_array($extension,lire_config('spipmotion/fichiers_audios',array()))){
42                                if($document['id_orig'] > 0){
43                                        $flux['data'] .= '<p>'._T('spipmotion:version_encodee_de',array('id_orig'=>$document['id_orig'])).'</p>';
44                                }
45                                $infos_audios = charger_fonction('spipmotion_infos_audios', 'inc');
46                                $flux['data'] .= $infos_audios($id,$id_document,$type);
47                        }
48                }
49        }
50        return $flux;
51}
52/**
53 * Pipeline Cron de SPIPmotion
54 *
55 * Vérifie la présence à intervalle régulier de fichiers à encoder
56 * dans la file d'attente
57 *
58 * @return L'array des taches complété
59 * @param array $taches_generales Un array des tâches du cron de SPIP
60 */
61function spipmotion_taches_generales_cron($taches_generales){
62        $taches_generales['spipmotion_file'] = 60;
63        return $taches_generales;
64}
65
66/**
67 * Insertion dans le pipeline post-edition
68 *
69 * Intervient à chaque modification d'un objet de SPIP
70 * notamment lors de l'ajout d'un document
71 *
72 * @return $flux Le contexte de pipeline complété
73 * @param array $flux Le contexte du pipeline
74 */
75function spipmotion_post_edition($flux){
76        if(in_array($flux['args']['operation'], array('ajouter_document','document_copier_local'))){
77                $id_document = $flux['args']['id_objet'];
78
79                /**
80                 * Il n'est pas nécessaire de récupérer la vignette d'une vignette
81                 * ni ses infos.
82                 */
83                $infos_doc = sql_fetsel('fichier,mode,distant','spip_documents','id_document='.intval($id_document));
84                $mode = $infos_doc['mode'];
85                $fichier = $infos_doc['fichier'];
86
87                if(($mode != 'vignette') && ($infos_doc['distant'] == 'non')){
88                        $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));
89                        $extension = $document['extension'];
90
91                        /**
92                         * Si nous sommes dans un format vidéo que SPIPmotion peut traiter,
93                         * on lui applique certains traitements
94                         * Les fichiers sonores sont gérés par le plugin getID3 pour cela
95                         */
96                        if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
97                                if (class_exists('ffmpeg_movie')) {
98
99                                        /**
100                                         * Récupération des informations de la vidéo
101                                         */
102                                        $recuperer_infos = charger_fonction('spipmotion_recuperer_infos','inc');
103                                        $infos = $recuperer_infos($id_document);
104
105                                        /**
106                                         * Récupération d'un logo de la vidéo
107                                         */
108                                        $recuperer_logo = charger_fonction("spipmotion_recuperer_logo","inc");
109                                        $logo = $recuperer_logo($id_document);
110
111                                        $invalider = true;
112                                }
113                        }
114
115                        /**
116                         * On l'ajoute dans la file d'attente d'encodage si nécessaire
117                         */
118                        spip_log($document['id_orig'],'test');
119                        $fichier = basename(get_spip_doc($document['fichier']));
120                        $racine = str_replace('-encoded','',substr($fichier,0,-(strlen($document['extension'])+1)));
121                        spip_log('On teste sur la racine : '.$racine,'test');
122                        if(!preg_match('/-encoded/',$document['fichier']) OR !($id_doc = sql_getfetsel('id_document','spip_documents',"fichier LIKE '%$racine%' AND id_document != $id_document"))){
123                                spip_log('on l ajoute dans la file','test');
124                                include_spip('action/spipmotion_ajouter_file_encodage');
125                                spipmotion_genere_file($id_document,$document['objet'],$document['id_objet']);
126                        }else{
127                                spip_log('on ne l ajoute pas dans la file :'.$id_doc,'test');
128                        }
129
130                        /**
131                         * On invalide le cache de cet élément si nécessaire
132                         */
133                        if($invalider){
134                                include_spip('inc/invalideur');
135                                suivre_invalideur("id='id_$type/$id'");
136                        }
137                }
138        }
139        return $flux;
140}
141?>
Note: See TracBrowser for help on using the repository browser.