From ca8358ad6088647733eb1d0a86e01bd2314039c5 Mon Sep 17 00:00:00 2001 From: "cedric@yterium.com" <> Date: Thu, 18 Jul 2019 09:37:42 +0000 Subject: [PATCH] SVG est une image comme les autres : ajoute le support pour l'upload de SVG --- action/ajouter_documents.php | 2 +- action/tourner.php | 2 +- base/typedoc.php | 1 + inc/documents.php | 7 +++---- inc/vignette.php | 2 +- medias_administrations.php | 5 +++++ metadata/image.php | 22 ++++++++++++--------- metadata/svg.php | 37 ++++-------------------------------- paquet.xml | 4 ++-- 9 files changed, 31 insertions(+), 51 deletions(-) diff --git a/action/ajouter_documents.php b/action/ajouter_documents.php index a9ed6e58..aa129a9d 100644 --- a/action/ajouter_documents.php +++ b/action/ajouter_documents.php @@ -517,7 +517,7 @@ function verifier_taille_document_acceptable(&$infos) { if (@file_exists($img) and $img !== $infos['fichier']) { spip_unlink($infos['fichier']); @rename($img, $infos['fichier']); - $size = @getimagesize($infos['fichier']); + $size = @spip_getimagesize($infos['fichier']); $infos['largeur'] = $size[0]; $infos['hauteur'] = $size[1]; $infos['taille'] = @filesize($infos['fichier']); diff --git a/action/tourner.php b/action/tourner.php index a7533ac8..042c22ba 100644 --- a/action/tourner.php +++ b/action/tourner.php @@ -92,7 +92,7 @@ function action_tourner_post($id_document, $angle) { deplacer_fichier_upload($res, $dest); } else { $dest = $src; - $size_image = @getimagesize($dest); + $size_image = @spip_getimagesize($dest); $largeur = $size_image[0]; $hauteur = $size_image[1]; } diff --git a/base/typedoc.php b/base/typedoc.php index 6ed6b6ef..5646fdb8 100644 --- a/base/typedoc.php +++ b/base/typedoc.php @@ -24,6 +24,7 @@ $tables_images = array( // Autres images (peuvent utiliser le tag <img>) 'bmp' => 'BMP', + 'svg' => 'SVG', ); // Multimedia (peuvent utiliser le tag <embed>) diff --git a/inc/documents.php b/inc/documents.php index 9bfc5970..401ea445 100644 --- a/inc/documents.php +++ b/inc/documents.php @@ -129,11 +129,11 @@ function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $c } else { $f = charger_fonction('vignette', 'inc'); $img = $f($e, false); - $size = @getimagesize($img); + $size = @spip_getimagesize($img); $img = "<img src='$img' " . $size[3] . ' />'; } } else { - $size = @getimagesize($img); + $size = @spip_getimagesize($img); $img = "<img src='$img' " . $size[3] . ' />'; } // on appelle image_reduire independamment de la presence ou non @@ -180,8 +180,7 @@ function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $c */ function image_du_document($document, $connect = null) { if ($e = $document['extension'] - and isset($GLOBALS['meta']['formats_graphiques']) - and (strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false) + and in_array($e, formats_image_acceptables()) and (!test_espace_prive() or $GLOBALS['meta']['creer_preview'] == 'oui') and $document['fichier'] ) { diff --git a/inc/vignette.php b/inc/vignette.php index 2dd05749..555c0dba 100644 --- a/inc/vignette.php +++ b/inc/vignette.php @@ -63,7 +63,7 @@ function inc_vignette_dist($ext, $size = true, $loop = true) { } $largeur = $hauteur = 0; - if ($v and $size = @getimagesize($v)) { + if ($v and $size = @spip_getimagesize($v)) { $largeur = $size[0]; $hauteur = $size[1]; } diff --git a/medias_administrations.php b/medias_administrations.php index 8a267bca..a521b110 100644 --- a/medias_administrations.php +++ b/medias_administrations.php @@ -200,6 +200,11 @@ function medias_upgrade($nom_meta_base_version, $version_cible) { // ajout de vtt array('creer_base_types_doc') ); + + $maj['1.4.0'] = array( + // update de SVG + array('creer_base_types_doc') + ); include_spip('base/upgrade'); include_spip('base/medias'); maj_plugin($nom_meta_base_version, $version_cible, $maj); diff --git a/metadata/image.php b/metadata/image.php index 35af1af1..23786037 100644 --- a/metadata/image.php +++ b/metadata/image.php @@ -17,7 +17,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { function metadata_image_dist($fichier) { $meta = array(); - if ($size_image = @getimagesize($fichier)) { + if ($size_image = @spip_getimagesize($fichier)) { $meta['largeur'] = intval($size_image[0]); $meta['hauteur'] = intval($size_image[1]); $meta['type_image'] = decoder_type_image($size_image[2]); @@ -36,21 +36,25 @@ function metadata_image_dist($fichier) { // https://code.spip.net/@decoder_type_image function decoder_type_image($type, $strict = false) { switch ($type) { - case 1: + case IMAGETYPE_GIF: return 'gif'; - case 2: + case IMAGETYPE_JPEG: return 'jpg'; - case 3: + case IMAGETYPE_PNG: return 'png'; - case 4: + case IMAGETYPE_SWF: return $strict ? '' : 'swf'; - case 5: + case IMAGETYPE_PSD: return 'psd'; - case 6: + case IMAGETYPE_BMP: return 'bmp'; - case 7: - case 8: + case IMAGETYPE_TIFF_II: + case IMAGETYPE_TIFF_MM: return 'tif'; + case IMAGETYPE_WEBP: + return 'webp'; + case IMAGETYPE_SVG: + return $strict ? '' : 'svg'; default: return ''; } diff --git a/metadata/svg.php b/metadata/svg.php index b2914415..e2393331 100644 --- a/metadata/svg.php +++ b/metadata/svg.php @@ -34,52 +34,23 @@ include_spip('inc/autoriser'); function metadata_svg_dist($file) { $meta = array(); - $texte = spip_file_get_contents($file); - // Securite si pas autorise : virer les scripts et les references externes // sauf si on est en mode javascript 'ok' (1), cf. inc_version if ($GLOBALS['filtrer_javascript'] < 1 and !autoriser('televerser', 'script') ) { include_spip('inc/texte'); + $texte = spip_file_get_contents($file); $new = trim(safehtml($texte)); // petit bug safehtml if (substr($new, 0, 2) == ']>') { $new = ltrim(substr($new, 2)); } if ($new != $texte) { - ecrire_fichier($file, $texte = $new); - } - } - - $width = $height = 150; - if (preg_match(',<svg[^>]+>,', $texte, $s)) { - $s = $s[0]; - if (preg_match(',\WviewBox\s*=\s*.\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+),i', $s, $r)) { - $width = $r[3]; - $height = $r[4]; - } else { - // si la taille est en centimetre, estimer le pixel a 1/64 de cm - if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),i', $s, $r)) { - if ($r[2] != '%') { - $width = $r[1]; - if ($r[2] == 'cm') { - $width <<= 6; - } - } - } - if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),i', $s, $r)) { - if ($r[2] != '%') { - $height = $r[1]; - if ($r[2] == 'cm') { - $height <<= 6; - } - } - } + ecrire_fichier($file, $new); } } - $meta['largeur'] = $width; - $meta['hauteur'] = $height; - return $meta; + $metadata = charger_fonction('image', 'metadata'); + return $metadata($file); } diff --git a/paquet.xml b/paquet.xml index c157dd38..1b542d5b 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,11 +1,11 @@ <paquet prefix="medias" categorie="multimedia" - version="2.22.1" + version="2.23.0" etat="stable" compatibilite="[3.3.0-dev;3.3.*]" logo="prive/themes/spip/images/portfolio-32.png" - schema="1.3.6" + schema="1.4.0" > <nom>Medias</nom> -- GitLab