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

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

On continue à revoir le code en profondeur...

File size: 5.6 KB
Line 
1<?php
2
3include_spip("inc/spipmotion");
4
5function spipmotion_editer_contenu_objet($flux){
6        if(is_array($flux['args']) && ($flux['args']['type']=='case_document')){
7                $id_document = $flux['args']['id'];
8                $document = sql_fetsel("docs.id_document, docs.extension, 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));
9                $extension = $document['extension'];
10                $type = $document['objet'];
11                $id = $document['id_objet'];
12                if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
13                        if(extension_loaded('ffmpeg')){
14                                $infos_videos = charger_fonction('spipmotion_infos_videos', 'inc');
15                                $flux['data'] .= $infos_videos($id,$id_document,$type);
16                        }
17                }
18        }
19        return $flux;
20}
21/**
22 * Pipeline Cron de SPIPmotion
23 * Vérifie la présence à intervalle régulier de vidéos à encoder dans la file d'attente
24 *
25 * @return
26 * @param array $taches_generales Un array des tâches du cron de SPIP
27 */
28function spipmotion_taches_generales_cron($taches_generales){
29        $taches_generales['spipmotion_file'] = 60 * 4; 
30        return $taches_generales;
31}
32
33/**
34 * Insertion dans le pipeline post-edition
35 * Intervient à chaque modification d'un objet de SPIP notamment lors de l'ajout d'un document
36 *
37 * @return
38 * @param object $flux
39 */
40function spipmotion_post_edition($flux){       
41        spip_log("pipeline post_edition","spipmotion");
42        $id_document = $flux['args']['id_objet'];
43       
44        /**
45         * Il n'est pas nécessaire de récupérer la vignette d'une vignette
46         */
47        $mode = sql_getfetsel('mode','spip_documents','id_document='.intval($id_document));
48        spip_log("mode = $mode","spipmotion");
49       
50        if($mode != 'vignette'){
51                if($flux['args']['operation'] == 'ajouter_document'){
52                        spip_log("operation = ajouter_docs","spipmotion");
53                        $document = sql_fetsel("docs.id_document, docs.extension,docs.fichier,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));
54                        $extension = $document['extension'];
55                       
56                        /**
57                         * Si nous sommes dans un format que SPIPmotion peut traiter,
58                         * on lui applique certains traitements
59                         */
60                        if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
61                                if (class_exists('ffmpeg_movie')) {
62                                        spip_log("id_document=$id_document - extension = ".$document['extension'],"spipmotion");
63
64                                        /**
65                                         * Récupération des informations de la vidéo
66                                         */
67                                        $recuperer_infos = charger_fonction('spipmotion_recuperer_infos','inc');
68                                        $infos = $recuperer_infos($id_document);
69
70                                        /**
71                                         * Récupération d'un logo de la vidéo
72                                         */
73                                        $recuperer_logo = charger_fonction("spipmotion_recuperer_logo","inc");
74                                        $logo = $recuperer_logo($id_document);
75
76                                        $invalider = true;
77                                }
78
79                                if(lire_config('spipmotion/encodage_auto') == 'on'){
80                                        spip_log('On est dans le mode encodage auto','spipmotion');
81
82                                        $encoder = charger_fonction('encodage','inc');
83                                       
84                                        /**
85                                         * Ajout de la vidéo dans la file d'attente d'encodage si besoin
86                                         */
87                                        if(in_array($extension,lire_config('spipmotion/fichiers_videos_encodage',array()))){
88                                                foreach(lire_config('spipmotion/fichiers_videos_sortie',array()) as $extension_sortie){
89                                                        $en_file = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN('en_cours,non')");
90                                                        if(!$en_file){
91                                                                $id_doc_attente = sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $GLOBALS['visiteur_session']['id_auteur'],'extension'=>$extension_sortie));
92                                                                spip_log("on ajoute une video dans la file d'attente","spipmotion");
93                                                                $en_cours = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","encode='en_cours'");
94                                                                if(!$en_cours){
95                                                                        $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
96                                                                        $encoder($document,$id_doc_attente);
97                                                                }
98                                                        }
99                                                        else{
100                                                                spip_log("Cette video existe deja dans la file d'attente","spipmotion");                                                       
101                                                        }
102                                                }
103                                        }
104                                       
105                                        /**
106                                         * Ajout du son dans la file d'attente d'encodage si besoin
107                                         */
108                                        else if(in_array($extension,lire_config('spipmotion/fichiers_audios_encodage',array()))){
109                                                foreach(lire_config('spipmotion/fichiers_audios_sortie',array()) as $extension_sortie){
110                                                        $en_file = sql_getfetsel("spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN('en_cours,non')");
111                                                        if(!$en_file){
112                                                                $id_doc_attente = sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $GLOBALS['visiteur_session']['id_auteur'],'extension'=>$extension_sortie));
113                                                                spip_log("on ajoute un son dans la file d'attente","spipmotion");
114                                                                $en_cours = sql_fetsel("id_spipmotion_attente","spip_spipmotion_attentes","encode='en_cours'");
115                                                                if(!$en_cours){
116                                                                        $document = sql_select('*','spip_documents','id_document='.intval($id_document));
117                                                                        $encoder($document,$id_doc_attente);
118                                                                }                                                       
119                                                        }
120                                                        else{
121                                                                spip_log("Ce son existe deja dans la file d'attente","spipmotion");                                                     
122                                                        }
123                                                }
124                                        }
125                                }
126                                if($invalider){
127                                        /**
128                                         * On invalide le cache de cet élément
129                                         */
130                                        include_spip('inc/invalideur');
131                                        suivre_invalideur("id='id_$type/$id'");
132                                }
133                        }
134                }
135        }
136        return $flux;
137}
138       
139?>
Note: See TracBrowser for help on using the repository browser.