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

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

SPIP ne pose pas de problèmes avec des fichiers de plus de 2Go sauf qu'il ne calcule pas bien leur taille ... ce petit patch pour cela... comme dans le core depuis 5 minutes

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($taille == '2147483647'){
69                $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.