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

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

Corrections de grosses boulettes sql
Correction d'une boulette dans la déclaration des champs

On ne permet la demande de réencodage que depuis le document original sinon vive ma perte de qualité
On affiche un message indiquant que c'est une version encodée issue d'un autre document s'il y a lieu de le faire
On encode les sons dorénavant

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