Server : Apache System : Linux ks5.tuic.fr 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 User : pragmatice ( 1003) PHP Version : 8.2.24 Disable Function : NONE Directory : /home/pragmatice/public_html/lesite/prive/formulaires/ |
<?php /***************************************************************************\ * SPIP, Système de publication pour l'internet * * * * Copyright © avec tendresse depuis 2001 * * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribué sous licence GNU/GPL. * * Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire d'édition de logo * * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP. * * - En dehors d'une boucle, ce formulaire modifie le logo du site. * - Dans une boucle, il modifie le logo de la table selectionnée. * * Pensez juste que l'appel de `#LOGO_{TYPE}` s'appuie sur le nom de la clé primaire et non sur le * nom de l'objet réel. Par exemple on ecrira `#LOGO_GROUPE` (et non `#LOGO_GROUPEMOTS`) pour afficher * un logo issu du formulaire mis dans une boucle `GROUPES_MOTS` * * - il est possible de lui passer les paramètres objet et id : `#FORMULAIRE_EDITER_LOGO{article,1}` * - il est possible de spécifier une URL de redirection apres traitement : * `#FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE}` * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } global $logo_libelles; // utilise pour le logo du site, donc doit rester ici $logo_libelles['site'] = _T('logo_site'); $logo_libelles['racine'] = _T('logo_standard_rubrique'); /** * Chargement du formulaire d'édition de logo * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return array Variables d'environnement pour le fond */ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = []) { // pas dans une boucle ? formulaire pour le logo du site // dans ce cas, il faut chercher un 'siteon0.ext' if (!$objet) { $objet = 'site'; } $objet = objet_type($objet); $_id_objet = id_table_objet($objet); if (!is_array($options)) { $options = unserialize($options); } $options = spip_sanitize_from_request($options, '*'); if (!isset($options['titre'])) { $balise_img = chercher_filtre('balise_img'); $img = $balise_img(chemin_image('image-24.png'), '', 'cadre-icone'); $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']); $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine'); if (isset($libelles[$libelle])) { $libelle = $libelles[$libelle]; } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) { $libelle = _T($libelle); } else { $libelle = _L('Logo'); } switch ($objet) { case 'article': $libelle .= ' ' . aider('logoart'); break; case 'breve': $libelle .= ' ' . aider('breveslogo'); break; case 'rubrique': $libelle .= ' ' . aider('rublogo'); break; default: break; } $options['titre'] = $img . $libelle; } if (!isset($options['editable'])) { include_spip('inc/autoriser'); $options['editable'] = autoriser('iconifier', $objet, $id_objet); } $res = [ 'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), 'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), 'objet' => $objet, 'id_objet' => $id_objet, '_options' => $options, '_show_upload_off' => '', ]; // rechercher le logo de l'objet // la fonction prend un parametre '_id_objet' etrange : // le nom de la cle primaire (et non le nom de la table) // ou directement le nom du raccourcis a chercher $chercher_logo = charger_fonction('chercher_logo', 'inc'); $etats = $res['logo_survol'] ? ['on', 'off'] : ['on']; foreach ($etats as $etat) { $logo = $chercher_logo($id_objet, $_id_objet, $etat); if ($logo) { $res['logo_' . $etat] = $logo[0]; } } // pas de logo_on -> pas de formulaire pour le survol if (!isset($res['logo_on'])) { $res['logo_survol'] = ''; } elseif (!isset($res['logo_off']) and _request('logo_up')) { $res['_show_upload_off'] = ' '; } // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire if ( !$res['editable'] and !isset($res['logo_off']) and !isset($res['logo_on']) ) { return false; } return $res; } /** * Identifier le formulaire en faisant abstraction des parametres qui * ne representent pas l'objet edite * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return string Hash du formulaire */ function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = []) { return serialize([$objet, $id_objet]); } /** * Verification avant traitement du formulaire d'édition de logo * * On verifie que l'upload s'est bien passe et * que le document recu est une image (d'apres son extension) * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return array Erreurs du formulaire */ function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = []) { $erreurs = []; // verifier les extensions $sources = formulaire_editer_logo_get_sources(); include_spip('action/editer_logo'); $extensions_possibles = $GLOBALS['formats_logos']; if (in_array('jpg', $extensions_possibles)) { $extensions_possibles[] = 'jpeg'; } foreach ($sources as $etat => $file) { // seulement si une reception correcte a eu lieu if ($file and $file['error'] == 0) { if ( !in_array( strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), $extensions_possibles ) ) { $erreurs['logo_' . $etat] = _L('Extension non reconnue'); } } elseif ($file and $file['error'] != 0 and isset($file['msg'])) { $erreurs['message_erreur'] = $file['msg']; } } return $erreurs; } /** * Traitement de l'upload d'un logo * * Il est affecte au site si la balise n'est pas dans une boucle, * sinon a l'objet concerne par la boucle ou indiquee par les parametres d'appel * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return array Retour des traitements */ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = []) { $res = ['editable' => ' ']; // pas dans une boucle ? formulaire pour le logo du site // dans ce cas, il faut chercher un 'siteon0.ext' if (!$objet) { $objet = 'site'; } include_spip('action/editer_logo'); // effectuer la suppression si demandee d'un logo $on = _request('supprimer_logo_on'); if ($on or _request('supprimer_logo_off')) { logo_supprimer($objet, $id_objet, $on ? 'on' : 'off'); $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle set_request('logo_up', ' '); } // sinon supprimer ancien logo puis copier le nouveau else { $sources = formulaire_editer_logo_get_sources(); foreach ($sources as $etat => $file) { if ($file and $file['error'] == 0) { if ($err = logo_modifier($objet, $id_objet, $etat, $file)) { $res['message_erreur'] = $err; } else { $res['message_ok'] = ''; } // pas besoin de message : la validation est visuelle set_request('logo_up', ' '); } } } // Invalider les caches de l'objet include_spip('inc/invalideur'); suivre_invalideur("id='$objet/$id_objet'"); if ($retour) { $res['redirect'] = $retour; } return $res; } /** * Extraction des sources des fichiers uploadés correspondant aux 2 logos (normal + survol) * si leur upload s'est bien passé * * @return array * Sources des fichiers dans les clés `on` ou `off` */ function formulaire_editer_logo_get_sources() { if (!$_FILES) { $_FILES = $GLOBALS['HTTP_POST_FILES'] ?? []; } if (!is_array($_FILES)) { return []; } include_spip('inc/documents'); $sources = []; foreach (['on', 'off'] as $etat) { $logo = 'logo_' . $etat; if (isset($_FILES[$logo])) { if ($_FILES[$logo]['error'] == 0) { $sources[$etat] = $_FILES[$logo]; } elseif ($_FILES[$logo]['error'] != 0) { $msg = check_upload_error($_FILES[$logo]['error'], false, true); if ($msg and is_string($msg)) { $sources[$etat] = $_FILES[$logo]; $sources[$etat]['msg'] = $msg; } } } } return $sources; }