source: spip-zone/_plugins_/spipmotion/action/spipmotion_ajouter_file_encodage.php @ 50673

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

On est en 2011

On utilise flvtool++ si disponible sinon flvtool2

On ne met les métadonnées qu'une seule fois... à la récupération des infos de fichiers.

Incrément de version en 0.8.0 pour marquer le coup

File size: 7.5 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-2011 - Distribué sous licence GNU/GPL
9 *
10 */
11
12if (!defined("_ECRIRE_INC_VERSION")) return;
13
14include_spip('inc/charsets');   # pour le nom de fichier
15include_spip('inc/actions');
16
17/**
18 * Fonction d'ajout dans la file d'attente
19 */
20function action_spipmotion_ajouter_file_encodage_dist(){
21
22        $securiser_action = charger_fonction('securiser_action', 'inc');
23        $arg = $securiser_action();
24        if (!preg_match(",^(-?)(\d+)\W(\w+)\W?(\d*)\W?(\w*)$,", $arg, $r)){
25                spip_log("action_spipmotion_ajouter_file_encodage_dist incompris: " . $arg);
26                $redirect = urldecode(_request('redirect'));
27                return $redirect;
28        }
29        action_spipmotion_ajouter_file_encodage_post($r);
30        if(_request('redirect')){
31                $redirect = str_replace('&amp;','&',urldecode(_request('redirect')));
32        }
33        return $redirect;
34}
35
36function action_spipmotion_ajouter_file_encodage_post($r){
37        list(, $sign, $id, $type, $id_document,$format) = $r;
38
39        spipmotion_genere_file($id_document,$type,$id,$format);
40       
41        $encodage_direct = charger_fonction('spipmotion_encodage_direct','inc');
42        $encodage_direct();
43}
44
45/**
46 * Supprime les versions du document que l'on souhaite encoder
47 * - Supprime les fichiers existants et leurs insertions en base
48 * - Supprime la présence de ces documents dans la file d'attente
49 *
50 * Cette fonction n'est plus utilisée puisqu'on supprime uniquement au niveau du
51 * lancement de l'encodage
52 *
53 * @param int $id_document L'id_document original
54 * @param string $extension L'extension spécifique à supprimer
55 */
56function spipmotion_supprimer_versions($id_document,$extension=null){
57       
58        if($extension){
59                $v = sql_select("id_document,id_vignette,fichier","spip_documents","id_orig=".intval($id_document)." AND extension=".sql_quote($extension));
60        }else{
61                $v = sql_select("id_document,id_vignette,fichier","spip_documents","id_orig=".intval($id_document));
62        }
63
64        include_spip('inc/documents');
65        /**
66         * Pour chaque version du document original
67         */
68        while($version = sql_fetch($v)){
69                /**
70                 * On ajoute l'id_document dans la liste des documents
71                 * à supprimer de la base
72                 * On supprime le fichier correspondant
73                 */
74                $liste[] = $version['id_document'];
75                if (@file_exists($f = get_spip_doc($version['fichier']))) {
76                        supprimer_fichier($f);
77                }
78
79                /**
80                 * Si le document a une vignette :
81                 * - On ajoute l'id_document dans la liste à supprimer
82                 * - On supprime le fichier correspondant à la vignette
83                 */
84                if($version['id_vignette'] > 0){
85                        $liste[] = $version['id_vignette'];
86                        $fichier = sql_getfetsel('fichier','spip_documents','id_document='.$version['id_vignette']);
87                        if (@file_exists($f = get_spip_doc($fichier))) {
88                                supprimer_fichier($f);
89                        }
90                }
91
92        }
93        if(is_array($liste)){
94                $in = sql_in('id_document', $liste);
95                sql_delete("spip_documents", $in);
96                sql_delete("spip_documents_liens", $in);
97                sql_delete("spip_spipmotion_attentes", "id_document=".intval($id_document).' AND encode != '.sql_quote('oui'));
98        }
99
100        include_spip('inc/invalideur');
101        suivre_invalideur(1);
102}
103
104/**
105 * Fonction d'ajout des versions dans la file d'attente
106 *
107 * @param int $id_document l'id du document original
108 * @param unknown_type $type
109 * @param unknown_type $id
110 */
111function spipmotion_genere_file($id_document,$type,$id,$format=''){
112        $infos_doc = sql_fetsel('extension,id_orig','spip_documents','id_document='.intval($id_document));
113        $extension = $infos_doc['extension'];
114        $id_orig = $infos_doc['id_orig'];
115        $invalider = false;
116        if($id_orig == 0){
117                if($format && (
118                                (in_array($format,lire_config('spipmotion/fichiers_videos_sortie',array()))
119                                        && in_array($extension,lire_config('spipmotion/fichiers_videos_encodage',array())))
120                                OR (in_array($format,lire_config('spipmotion/fichiers_audios_sortie',array()))
121                                        && in_array($extension,lire_config('spipmotion/fichiers_audios_encodage',array())))
122                        )){
123                        $en_file = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","id_document=$id_document AND extension =".sql_quote($format)." AND encode IN ('en_cours,non,erreur')");
124                        if(!$en_file){
125                                $invalider = true;
126                                $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));
127                                $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'=>$format));
128                                spip_log("on ajoute un document dans la file d'attente : $id_doc_attente","spipmotion");
129                        }
130                        else{
131                                spip_log("Ce document existe deja dans la file d'attente","spipmotion");
132                        }
133                }else if(!$format){
134                        spip_log('on relance l encodage pour tous les formats','spipmotion');
135                        /**
136                         * Ajout de la vidéo dans la file d'attente d'encodage si besoin
137                         */
138                        if(in_array($extension,lire_config('spipmotion/fichiers_videos_encodage',array()))){
139                                spip_log("l'id_orig est $id_orig et l'id_document est $id_document","spipmotion");
140                                foreach(lire_config('spipmotion/fichiers_videos_sortie',array()) as $extension_sortie){
141                                        $en_file = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN ('en_cours,non')");
142                                        if(!$en_file){
143                                                $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));
144                                                $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));
145                                                spip_log("on ajoute une video dans la file d'attente : $id_doc_attente","spipmotion");
146                                                $invalider = true;
147                                        }
148                                        else{
149                                                spip_log("Cette video existe deja dans la file d'attente","spipmotion");
150                                        }
151                                }
152                        }
153
154                        /**
155                         * Ajout du son dans la file d'attente d'encodage si besoin
156                         */
157                        else if(in_array($extension,lire_config('spipmotion/fichiers_audios_encodage',array()))){
158                                spip_log("l'id_orig est $id_orig et l'id_document est $id_document","spipmotion");
159                                foreach(lire_config('spipmotion/fichiers_audios_sortie',array()) as $extension_sortie){
160                                        $en_file = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN ('en_cours,non')");
161                                        if(!$en_file){
162                                                $invalider = true;
163                                                $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));
164                                                $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));
165                                                spip_log("on ajoute un son dans la file d'attente : $id_doc_attente","spipmotion");
166                                        }
167                                        else{
168                                                spip_log("Ce son existe deja dans la file d'attente","spipmotion");
169                                        }
170                                }
171                        }
172                }
173                if($invalider){
174                        include_spip('inc/invalideur');
175                        suivre_invalideur(1);
176                }
177        }
178}
179?>
Note: See TracBrowser for help on using the repository browser.