187 lines
5.5 KiB
PHP
187 lines
5.5 KiB
PHP
<?php
|
|
|
|
/***************************************************************************\
|
|
* SPIP, Systeme de publication pour l'internet *
|
|
* *
|
|
* Copyright (c) 2001-2019 *
|
|
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
|
|
* *
|
|
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
|
|
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
|
|
\***************************************************************************/
|
|
|
|
/**
|
|
* Gestion de l'API de modification/suppression des logos
|
|
*
|
|
* @package SPIP\Core\Logo\Edition
|
|
*/
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
return;
|
|
}
|
|
|
|
|
|
/**
|
|
* Supprimer le logo d'un objet
|
|
*
|
|
* @param string $objet
|
|
* @param int $id_objet
|
|
* @param string $etat
|
|
* `on` ou `off`
|
|
*/
|
|
function logo_supprimer($objet, $id_objet, $etat) {
|
|
$chercher_logo = charger_fonction('chercher_logo', 'inc');
|
|
$objet = objet_type($objet);
|
|
$primary = id_table_objet($objet);
|
|
include_spip('inc/chercher_logo');
|
|
|
|
// existe-t-il deja un logo ?
|
|
$logo = $chercher_logo($id_objet, $primary, $etat);
|
|
if ($logo) {
|
|
spip_unlink($logo[0]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Modifier le logo d'un objet
|
|
*
|
|
* @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($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 eventueel 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);
|
|
}
|
|
} elseif (!$erreur = check_upload_error($source['error'], '', true)) {
|
|
// Intercepter une erreur a l'envoi
|
|
// 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;
|
|
}
|
|
|
|
$size = @getimagesize($file_tmp);
|
|
$extension = !$size ? '' : ($size[2] > 3 ? '' : $GLOBALS['formats_logos'][$size[2] - 1]);
|
|
if ($extension) {
|
|
@rename($file_tmp, $file_tmp . ".$extension");
|
|
$file_tmp = $file_tmp . ".$extension";
|
|
$poids = filesize($file_tmp);
|
|
|
|
if (defined('_LOGO_MAX_WIDTH') or defined('_LOGO_MAX_HEIGHT')) {
|
|
if ((defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH)
|
|
or (defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT)
|
|
) {
|
|
$max_width = (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH) ? _LOGO_MAX_WIDTH : '*';
|
|
$max_height = (defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT) ? _LOGO_MAX_HEIGHT : '*';
|
|
|
|
// pas la peine d'embeter le redacteur avec ca si on a active le calcul des miniatures
|
|
// on met directement a la taille maxi a la volee
|
|
if (isset($GLOBALS['meta']['creer_preview']) and $GLOBALS['meta']['creer_preview'] == 'oui') {
|
|
include_spip('inc/filtres');
|
|
$img = filtrer('image_reduire', $file_tmp, $max_width, $max_height);
|
|
$img = extraire_attribut($img, 'src');
|
|
$img = supprimer_timestamp($img);
|
|
if (@file_exists($img) and $img !== $file_tmp) {
|
|
spip_unlink($file_tmp);
|
|
@rename($img, $file_tmp);
|
|
$size = @getimagesize($file_tmp);
|
|
}
|
|
}
|
|
// verifier au cas ou image_reduire a echoue
|
|
if ((defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH)
|
|
or (defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT)
|
|
) {
|
|
spip_unlink($file_tmp);
|
|
$erreur = _T(
|
|
'info_logo_max_poids',
|
|
array(
|
|
'maxi' =>
|
|
_T(
|
|
'info_largeur_vignette',
|
|
array(
|
|
'largeur_vignette' => $max_width,
|
|
'hauteur_vignette' => $max_height
|
|
)
|
|
),
|
|
'actuel' =>
|
|
_T(
|
|
'info_largeur_vignette',
|
|
array(
|
|
'largeur_vignette' => $size[0],
|
|
'hauteur_vignette' => $size[1]
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
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 . ".$extension");
|
|
}
|
|
} else {
|
|
spip_unlink($file_tmp);
|
|
$erreur = _T(
|
|
'info_logo_format_interdit',
|
|
array('formats' => join(', ', $GLOBALS['formats_logos']))
|
|
);
|
|
}
|
|
|
|
return $erreur;
|
|
}
|