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