source: spip-zone/_plugins_/spipmotion/trunk/inc/spipmotion_recuperer_logo.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: 5.8 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
14/**
15 * Fonction de récupération de vignette depuis un document video
16 * On utilise un script bash pour cela spipmotion_vignette.sh
17 *
18 * @param int $id_document
19 *              L'id numérique du document
20 * @param int $frame
21 *              La frame à capturer
22 */
23function inc_spipmotion_recuperer_logo($id_document,$seconde=2){
24        spip_log("SPIPMOTION : recuperation d un logo du document $id_document","spipmotion");
25        /**
26         * Pas d'id_document, on retourne false
27         */
28        if(!intval($id_document)){
29                spip_log('SPIPMOTION Erreur : pas de bon id_document fourni pour la génération de vignette','spipmotion'._LOG_CRITIQUE);
30                return false;
31        }
32       
33        include_spip('inc/autoriser');
34        if(!autoriser('modifier','document',$id_document)){
35                spip_log('SPIPMOTION Erreur : tentative de récupération de logo sans autorisation de modification du document','spipmotion'._LOG_CRITIQUE);
36                return false;
37        }
38        /**
39         * Le script de génération de vignette n'est pas là, on retourne false
40         */
41        if($GLOBALS['meta']['spipmotion_spipmotion_vignette_sh_casse'] == 'oui'){
42                spip_log('SPIPMOTION Erreur : le script de génération de vignette n\'est pas disponible','spipmotion'._LOG_CRITIQUE);
43                return false;
44        }
45        include_spip('inc/documents');
46        include_spip('inc/filtres_images_mini');
47        $retour = 0;
48        $document = sql_fetsel("docs.hasvideo,docs.id_document,docs.fichier,docs.duree,docs.id_vignette,docs.mode", "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));
49        $vignette_existante = sql_getfetsel('id_document','spip_documents','id_document='.intval($document['id_vignette']));
50        if(!$vignette_existante)
51                $vignette_existante = 'new';
52        $chemin_court = $document['fichier'];
53        $chemin = get_spip_doc($chemin_court);
54       
55        if($document['hasvideo'] == 'oui'){
56                $vignette = false;
57                if($GLOBALS['spipmotion_metas']['spipmotion_safe_mode'] == 'oui'){
58                        $spipmotion_sh = $GLOBALS['spipmotion_metas']['spipmotion_safe_mode_exec_dir'].'/spipmotion_vignette.sh'; 
59                }else{
60                        $spipmotion_sh = find_in_path('script_bash/spipmotion_vignette.sh');
61                }
62                $string_temp = "$id-$type-$id_document";
63                $query = md5($string_temp);
64                $dossier_temp = _DIR_VAR;
65                $fichier_temp = "$dossier_temp$query.jpg";
66                while(!$vignette && ($seconde < $document['duree'])){
67                        $cmd_vignette = $spipmotion_sh.' --e '.$chemin.' --s '.$fichier_temp.' --ss '.$seconde;
68                        $lancement_vignette = exec($cmd_vignette,$retour_vignette,$retour_int);
69                        if($retour_int >= 126){
70                                $erreur = _T('spipmotion:erreur_script_spipmotion_non_executable');
71                                spip_log("SPIPMOTION Erreur : $erreur",'spipmotion'._LOG_CRITIQUE);
72                                return false;
73                        }
74                       
75                        if($retour_int == 0){
76                                $vignette = true;
77                                if(!file_exists($fichier_temp) OR (filesize($fichier_temp) == 0)){
78                                        spip_log("SPIPMOTION Erreur : le fichier $fichier_temp n'existe pas",'spipmotion'._LOG_CRITIQUE);
79                                        return false;
80                                }else{
81                                        $img_finale = $fichier_temp;
82                                        $mode = 'vignette';
83                                        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
84                                        include_spip('action/editer_document');
85                                        if(defined('_DIR_PLUGIN_FONCTIONS_IMAGES')){
86                                                include_spip('fonctions_images_fonctions');
87                                                /**
88                                                 * Si on se retrouve avec 10 images monochromes d'affilée,
89                                                 * on tente de récupérer la vignette du document original
90                                                 */
91                                                if($retour>10){
92                                                        if($document['mode'] != 'conversion'){
93                                                                $original = sql_fetsel('id_document,id_vignette','spip_documents','id_document='.intval($document['id_document']));
94                                                        }
95                                                        else{
96                                                                $id_original = sql_getfetsel('doc.id_document','spip_documents as doc LEFT JOIN spip_documents_liens as lien ON doc.id_document=lien.id_document','lien.objet="document" AND lien.id_document='.intval($id_document));
97                                                                $original = sql_fetsel('id_document,id_vignette','spip_documents','id_document='.intval($id_original));
98                                                        }
99                                                        if(intval($original['id_vignette']) > 0){
100                                                                $vignette = sql_getfetsel('fichier','spip_documents','id_document='.intval($original['id_vignette']));
101                                                                $vignette = get_spip_doc($vignette);
102                                                                $x = $ajouter_documents($vignette_existante,
103                                                                                                array(array('tmp_name'=>$img_finale,'name'=> $img_finale)),
104                                                                                        '', 0, 'vignette');
105                                                                $x = reset($x);
106                                                                if(intval($x)){
107                                                                        $vignette = true;
108                                                                        $id_vignette = $x;
109                                                                        if($document['id_vignette'] != $x)
110                                                                                document_modifier($id_document, array('id_vignette'=>$x));
111                                                                }
112                                                            return $x;
113                                                        }
114                                                        return false;
115                                                }else if(!filtrer('image_monochrome',$fichier_temp)){
116                                                                unlink($img_finale);
117                                                                $frame = $frame+50;
118                                                                $retour++;
119                                                        }else if(file_exists($img_finale)){
120                                                                $x = $ajouter_documents($vignette_existante,
121                                                                                                        array(array('tmp_name'=>$img_finale,'name'=> $img_finale)),
122                                                                                                '', 0, 'vignette');
123                                                                $x = reset($x);
124                                                                if(intval($x)){
125                                                                        $vignette = true;
126                                                                        $id_vignette = $x;
127                                                                        if($document['id_vignette'] != $x)
128                                                                                document_modifier($id_document, array('id_vignette'=>$x));
129                                                                }
130                                                                unlink($img_finale);
131                                                        }else{
132                                                                return false;
133                                                        }
134                                                }else{
135                                                        if(file_exists($img_finale)){
136                                                                $x = $ajouter_documents($vignette_existante,
137                                                                                                        array(array('tmp_name'=>$img_finale,'name'=> $img_finale)),
138                                                                                                '', 0, 'vignette');
139                                                                $x = reset($x);
140                                                                if(intval($x)){
141                                                                        $vignette = true;
142                                                                        $id_vignette = $x;
143                                                                        if($document['id_vignette'] != $x)
144                                                                                document_modifier($id_document, array('id_vignette'=>$x));
145                                                                }
146                                                        }
147                                                }
148                                        }
149                                }
150                        else{
151                                return false;   
152                        }
153                }
154        }
155        return $x;
156}
157?>
Note: See TracBrowser for help on using the repository browser.