-
Notifications
You must be signed in to change notification settings - Fork 4
/
logo_svg_fonctions.php
103 lines (86 loc) · 2.68 KB
/
logo_svg_fonctions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function logo_svg_largeur($fichier) {
$metadata_svg = charger_fonction('svg', 'metadata');
$size = $metadata_svg($fichier);
return $size['largeur'];
}
function logo_svg_hauteur($fichier) {
$metadata_svg = charger_fonction('svg', 'metadata');
$size = $metadata_svg($fichier);
return $size['hauteur'];
}
/**
* Modifier le logo d'un objet en acceptant le SVG
*
* @param string $objet
* @param int $id_objet
* @param string $etat
* `on` ou `off`
* @param string|array $source
* - array : sous tableau de `$_FILE` issu de l'upload
* - string : fichier source (chemin complet ou chemin relatif a `tmp/upload`)
* @return string
* Erreur, sinon ''
*/
function logo_modifier_svg($objet, $id_objet, $etat, $source) {
$chercher_logo = charger_fonction('chercher_logo', 'inc');
$objet = objet_type($objet);
$primary = id_table_objet($objet);
include_spip('inc/chercher_logo');
$type = type_du_logo($primary);
// nom du logo
$nom = $type . $etat . $id_objet;
// supprimer le logo eventuel existant
logo_supprimer($objet, $id_objet, $etat);
include_spip('inc/documents');
$erreur = '';
if (!$source) {
spip_log("spip_image_ajouter : source inconnue");
$erreur = "source inconnue";
return $erreur;
}
$file_tmp = _DIR_LOGOS . $nom . '.tmp';
$ok = false;
// fichier dans upload/
if (is_string($source)) {
if (file_exists($source)) {
$ok = @copy($source, $file_tmp);
} elseif (file_exists($f = determine_upload() . $source)) {
$ok = @copy($f, $file_tmp);
}
} // Intercepter une erreur a l'envoi
elseif (!$erreur = check_upload_error($source['error'], "", true)) {
// analyse le type de l'image (on ne fait pas confiance au nom de
// fichier envoye par le browser : pour les Macs c'est plus sur)
$ok = deplacer_fichier_upload($source['tmp_name'], $file_tmp);
}
if ($erreur) {
return $erreur;
}
if (!$ok or !file_exists($file_tmp)) {
spip_log($erreur = "probleme de copie pour $file_tmp");
return $erreur;
}
if (preg_match('/\.svg$/', is_array($source) ? $source['name'] : $source)) {
$metadata_svg = charger_fonction('svg', 'metadata');
$size = $metadata_svg($file_tmp);
if (!$erreur and defined('_LOGO_MAX_SIZE') and _LOGO_MAX_SIZE and $poids > _LOGO_MAX_SIZE * 1024) {
spip_unlink($file_tmp);
$erreur = _T('info_logo_max_poids',
array(
'maxi' => taille_en_octets(_LOGO_MAX_SIZE * 1024),
'actuel' => taille_en_octets($poids)
));
}
if (!$erreur) {
@rename($file_tmp, _DIR_LOGOS . $nom . ".svg");
}
} else {
spip_unlink($file_tmp);
$erreur = _T('info_logo_format_interdit', array('formats' => join(', ', $GLOBALS['formats_logos'])));
}
return $erreur;
}