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

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

On n'utilise plus du tout id_orig maintenant mais des documents attachés au document original

On évite de dupliquer du code dans les ajouts en file

Refaire marcher correctement les encodages et les logos

Améliorer les ajouts dans l'espace privé en n'utilisant que des squelettes

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