source: spip-zone/_plugins_/mediatheque/inc/renseigner_document.php @ 52467

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

ah ben justement les modifs par rapport au core sont oubliées ... donc oups

File size: 4.7 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2009                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/ajouter_documents'); // a enlever apres nettoyage du core
16
17/**
18 * recuperer les infos distantes d'une url,
19 * et renseigner pour une insertion en base
20 * utilise une variable static car appellee plusieurs fois au cours du meme hit
21 * (verification puis traitement)
22 *
23 * @param unknown_type $source
24 */
25function renseigner_source_distante($source){
26        static $infos = array();
27        if (isset($infos[$source]))
28                return $infos[$source];
29       
30        include_spip('inc/distant');
31        if ($a = recuperer_infos_distantes($source)) {
32
33                # NB: dans les bonnes conditions (fichier autorise et pas trop gros)
34                # $a['fichier'] est une copie locale du fichier
35                unset($a['body']);
36
37                $a['distant'] = 'oui';
38                $a['mode'] = 'document';
39                $a['fichier'] = set_spip_doc($source);
40                $infos[$source] = $a;
41                return $infos[$source];
42        }
43
44        return _T('medias:erreur_chemin_distant',array('nom'=>$source));
45}
46
47/**
48 * Renseigner les informations de taille et dimenssion d'une image
49 *
50 * @param <type> $fichier
51 * @param <type> $ext
52 * @return <type>
53 */
54function renseigner_taille_dimension_image($fichier,$ext){
55        $infos = array();
56       
57        $infos['type_image'] = false;
58
59        // Quelques infos sur le fichier
60        if (
61            !$fichier
62         OR !@file_exists($fichier)
63         OR !$infos['taille'] = @intval(filesize($fichier))) {
64                spip_log ("Echec copie du fichier $fichier");
65                return _T('medias:erreur_copie_fichier',array('nom'=> $fichier));
66        }
67
68        if($infos['taille'] == '2147483647'){
69                $infos['taille'] = sprintf("%u", filesize($fichier));
70        }
71       
72        // VIDEOS : Prevoir traitement specifique ?
73        // (http://www.getid3.org/ peut-etre)
74        if ($ext == "mov") {
75                $infos['largeur'] = 0;
76                $infos['hauteur'] = 0;
77        }
78       
79        // SVG : recuperer les dimensions et supprimer les scripts
80        elseif ($ext == "svg") {
81                list($infos['largeur'],$infos['hauteur'])= traite_svg($fichier);
82        }
83       
84        // image ?
85        else {
86               
87                // Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
88                $size_image = @getimagesize($fichier);
89                $infos['largeur'] = intval($size_image[0]);
90                $infos['hauteur'] = intval($size_image[1]);
91                $infos['type_image'] = decoder_type_image($size_image[2]);
92        }
93
94        return $infos;
95}
96
97if (!function_exists('traite_svg')){
98/**
99 * Determiner les dimensions d'un svg, et enlever ses scripts si necessaire
100 *
101 * @param string $file
102 * @return array
103 */
104// http://doc.spip.org/@traite_svg
105function traite_svg($file)
106{
107        $texte = spip_file_get_contents($file);
108
109        // Securite si pas admin : virer les scripts et les references externes
110        // sauf si on est en mode javascript 'ok' (1), cf. inc_version
111        if ($GLOBALS['filtrer_javascript'] < 1
112        AND $GLOBALS['visiteur_session']['statut'] != '0minirezo') {
113                include_spip('inc/texte');
114                $new = trim(safehtml($texte));
115                // petit bug safehtml
116                if (substr($new,0,2) == ']>') $new = ltrim(substr($new,2));
117                if ($new != $texte) ecrire_fichier($file, $texte = $new);
118        }
119
120        $width = $height = 150;
121        if (preg_match(',<svg[^>]+>,', $texte, $s)) {
122                $s = $s[0];
123                if (preg_match(',\WviewBox\s*=\s*.\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+),i', $s, $r)){
124                        $width = $r[3];
125                        $height = $r[4];
126                } else {
127        // si la taille est en centimetre, estimer le pixel a 1/64 de cm
128                if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
129                        if ($r[2] != '%') {
130                                $width = $r[1];
131                                if ($r[2] == 'cm') $width <<=6;
132                        }       
133                }
134                if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
135                        if ($r[2] != '%') {
136                                $height = $r[1];
137                                if ($r[2] == 'cm') $height <<=6;
138                        }
139                }
140           }
141        }
142        return array($width, $height);
143}
144}
145
146if (!function_exists('decoder_type_image')){
147/**
148 * Convertit le type numerique retourne par getimagesize() en extension fichier
149 *
150 * @param int $type
151 * @param bool $strict
152 * @return string
153 */
154// http://doc.spip.org/@decoder_type_image
155function decoder_type_image($type, $strict = false) {
156        switch ($type) {
157                case 1:
158                        return "gif";
159                case 2:
160                        return "jpg";
161                case 3:
162                        return "png";
163                case 4:
164                        return $strict ? "" : "swf";
165                case 5:
166                        return "psd";
167                case 6:
168                        return "bmp";
169                case 7:
170                case 8:
171                        return "tif";
172                default:
173                        return "";
174        }
175}
176}
177
178?>
Note: See TracBrowser for help on using the repository browser.