From 62c0d913327fb32493270c8d6a58b813f74c14de Mon Sep 17 00:00:00 2001 From: Ludovic CHEVALIER Date: Fri, 20 Sep 2019 10:27:29 +0200 Subject: [PATCH] [SPIP] ~v3.2.4-->v3.2.5 --- www/CHANGELOG.TXT | 39 ++++++++ www/config/ecran_securite.php | 18 +++- www/ecrire/balise/formulaire_admin.php | 14 ++- www/ecrire/inc/filtres.php | 48 +++++++++- www/ecrire/inc/headers.php | 4 + www/ecrire/inc/meta.php | 2 +- www/ecrire/inc/securiser_action.php | 18 ++-- www/ecrire/inc/session.php | 2 +- www/ecrire/inc/utils.php | 18 +++- www/ecrire/inc_version.php | 9 +- www/ecrire/index.php | 32 ++++--- www/ecrire/lang/spip_fr.php | 2 +- www/ecrire/paquet.xml | 2 +- www/ecrire/plugins/afficher_plugin.php | 2 +- www/ecrire/public/iterateur.php | 4 +- .../compresseur/lib/csstidy/README.md | 2 + .../compresseur/lib/csstidy/class.csstidy.php | 6 +- www/plugins-dist/compresseur/paquet.xml | 2 +- www/plugins-dist/dump/inc/dump.php | 11 ++- www/plugins-dist/dump/paquet.xml | 2 +- www/plugins-dist/mots/paquet.xml | 2 +- .../liste/mots_associer-select-unseul.html | 2 +- .../objets/liste/mots_associer-select.html | 2 +- www/plugins-dist/sites/inc/syndic.php | 5 + www/plugins-dist/sites/paquet.xml | 2 +- www/plugins-dist/svp/inc/svp_actionner.php | 22 +++-- www/plugins-dist/svp/inc/svp_outiller.php | 6 +- .../svp/inc/where_compatible_spip.php | 82 ++++++++++------- www/plugins-dist/svp/paquet.xml | 2 +- www/plugins-dist/svp/svp_fonctions.php | 91 ++++++++++++------- www/plugins-dist/urls_etendues/paquet.xml | 2 +- .../prive/objets/editer/url.html | 2 +- www/prive/formulaires/login.php | 7 +- www/prive/themes/spip/bando.css.html | 3 + www/squelettes-dist/contact.html | 4 +- .../formulaires/ecrire_auteur.php | 12 ++- .../formulaires/mot_de_passe.php | 24 ++++- www/squelettes-dist/paquet.xml | 2 +- www/svn.revision | 12 +-- 39 files changed, 369 insertions(+), 152 deletions(-) diff --git a/www/CHANGELOG.TXT b/www/CHANGELOG.TXT index c5f6a044..8a396e62 100644 --- a/www/CHANGELOG.TXT +++ b/www/CHANGELOG.TXT @@ -1,4 +1,43 @@ +SPIP-Core spip-3.2.4 -> spip-3.2.5 16 septembre 2019 +------------------------------------------------------------- +r24283 | ben | (lun. 08 avril 2019) | SPIP 3.2.4 +r24289 | Cerdic | (lun. 08 avril 2019) | Permettre de personaliser le _HEADER_VARY, ce qui peut etre necessaire pour le reverse proxy en amont du frontal +r24306 | Cerdic | (jeu. 09 mai 2019) | Support des images SVG : |balise_img ne cherche pas a calculer une width/height dans ce cas et |balise_svg permet d'inserer le SVG inline avec ou sans alt selon les bonnes pratiques de http://www.accede-web.com/notices/html-css-javascript/6-images-icones/6-2-svg-images-vectorielles/ +r24314 | Cerdic | (ven. 31 mai 2019) | Fix : la class filtre_inactif etait inactive si en premiere position de l'attribut class +r24319 | marcimat| (mer. 12 juin 2019) | Report de 52d55876e : Petite notice PHP en moins parfois avec une boucle data. +r24322 | marcimat| (jeu. 04 juil. 2019) | Report de r24321 : Ticket #4351 : utiliser de préférence l’email pour préremplir le formulaire de login lorsque c’est possible. +r24325 | marcimat| (mar. 16 juil. 2019) | [report de 5749e10f0b] (Warning en PHP 7.2) Éviter une notice PHP lorsque deux plugins de même préfixes sont affichés (sans SVP). +r24380 | Cerdic | (lun. 26 août 2019) | Rewording sur le message de succes eventuel apres envoi d'un email de reset mot de passe +r24381 | Cerdic | (lun. 26 août 2019) | ne rien laisser passer dans var_erreur, c'est encore plus sur et de toute facon on attends pas de HTML ici (Boulouiz Youssouf) +r24382 | Cerdic | (lun. 26 août 2019) | Fix menu 2 col pour ne pas avoir un lien coupe en 2 par le changement de colonne +r24392 | cedric | (dim. 15 sept. 2019) | perf issue : eviter d'inclure plein de fichier quand on appelle _T() sans argument +r24397 | cedric | (lun. 16 sept. 2019) | sanitizer les URLs de redirection au cas ou (beaucoup de conditions pour arriver la et que ce soit effectivement nocif, mais bon) +r24398 | cedric | (lun. 16 sept. 2019) | centraliser les tests identiques c'est plus simple a mainteanir +r24399 | cedric | (lun. 16 sept. 2019) | Mise a jour de l'ecran de securite + +SPIP-plugins-dist spip-3.2.4 -> spip-3.2.5 16 septembre 2019 +------------------------------------------------------------- + +r113884 | cedric | (mar. 12 févr. 2019) | Report de r113883 : une indirection manquante signalee dans https://core.spip.net/issues/4282 (JLuc) +r114014 | cedric | (ven. 22 févr. 2019) | Report de r114013 : Envoyer des mails en from d'un inconnu c'est de l'usurpation d'identite et ca peut vous conduire au commissariat, en plus d'etre vu comme un SPAM par beaucoup de fournisseur de mail. On laisse donc le from par defaut du site, mais un mets un Reply-To a l'envoyeur et l'email de l'envoyeur suppose (mais pas verifie) en signature du message. C'est plus robuste et moins sujet a litige +r114612 | bruno | (ven. 22 mars 2019) | report à l'arrache de r114572 pour sauver les stats de tonton sur plugin.spip :) +r114613 | eric | (ven. 22 mars 2019) | Il manquait la mise à jour de la fonction svp_compter qui était dans un commit précédent à celui qui a été mergé. +r114666 | bruno | (jeu. 28 mars 2019) | version 2.1.8 : report de r114665ne pas afficher le lien "Modifier" au survol si pas autorisé fix #4307 +r114855 | marcimat | (lun. 08 avril 2019) | Report de r112276 : Fix #4205 : À l’installation, il n’y a pas encore de fichier de sauvegarde des actions SVP. Du coup, il pouvait y avoir un petit bug en tentant de les lire.(Francky). +r114856 | marcimat | (lun. 08 avril 2019) | Report de r112275 : Ticket #4205 : Compatibilité PHP 7.3. La librairie PCRE passe en v2, et est moins tolérante.Le caractère -, indiqué dans un bloc de caractères `[ - ]`, pour ne pas être pris pour une déclaration d’intervalle (comme `[a-z]`), doit être soit échappé avec \ soit être en tête ou en fin de la structure.(Francky) +r114857 | marcimat | (lun. 08 avril 2019) | Petite version suite aux reports r114855 et r114856 +r115009 | rasta | (mer. 17 avril 2019) | Report dans la dernière stable de [115008] : Cela fait plus de 8 ans que SPIP dit au gens de se connecter avec leur email dans la notif d'inscription. Et là dans le formulaire de changement de mot de passe, on continuait de leur afficher leur login, dont ils n'avaient jamais entendu parler… On corrige ça, en leur rappelant en priorité l'email s'il existe, et seulement sinon le login. +r115011 | rasta | (mer. 17 avril 2019) | Backport [115010] : Correction de la correction : dire aux gens d'utiliser leur login aussi si leur email est déjà utilisé par quelqu'un d'autre, que ce soit dans un champ email ou login (Cédric). +r115017 | rasta | (jeu. 18 avril 2019) | Backport de [115016] : Stupéfaction : dans le where de notre API SQL, lorsque c'est un tableau, ça joint les critères avec un AND mais SANS les sécuriser avec des parenthèses svn st! Du coup si dans un élément on a des OR ça pète tout. Faut mettre les parenthèses soi-même. +r115053 | real3t | (ven. 26 avril 2019) | Report en 3.2 de r113960 (fixes #4160) : Application du patch proposé ici : ​https://core.spip.net/issues/4160#change-14773 : Les rangs (numéros de titre) des mots clefs ne sont pas affichés dans les listes déroulantes permettant de les affecter à des articles, rubriques... et autres objets.Retour de la fonctionnalité présente en SPIP 2.1 et perdue en 3.0 +r115213 | jluc | (ven. 03 mai 2019) | report de 115189 pour SPIP 3.2 (#4325 détection sqlite) +r115621 | rasta | (mer. 12 juin 2019) | roh il manquait un morceau dans le backport en 3.2 +r115800 | bruno | (jeu. 27 juin 2019) | report de r115799 +r116219 | eric | (dim. 04 août 2019) | Report de 116217.Ajout de l'id du commit GIT pour le flux atom Github +r116220 | eric | (dim. 04 août 2019) | Oups oubli de up de z +r117846 | cedric | (sam. 14 sept. 2019) | Update CSSTidy v1.6.5 (compat PHP 7.3) + SPIP-Core spip-3.2.3 -> spip-3.2.4 08 avril 2019 ------------------------------------------------------------- diff --git a/www/config/ecran_securite.php b/www/config/ecran_securite.php index d6c6ceae..773f2030 100644 --- a/www/config/ecran_securite.php +++ b/www/config/ecran_securite.php @@ -5,7 +5,7 @@ * ------------------ */ -define('_ECRAN_SECURITE', '1.3.11'); // 2019-04-08 +define('_ECRAN_SECURITE', '1.3.12'); // 2019-09-16 /* * Documentation : http://www.spip.net/fr_article4200.html @@ -474,6 +474,13 @@ if (isset($_REQUEST['reinstall']) and $_REQUEST['reinstall'] == 'oui') $ecran_securite_raison = 'reinstall=oui'; +/* + * Pas d'action pendant l'install + */ +if (isset($_REQUEST['exec']) and $_REQUEST['exec'] === 'install' and isset($_REQUEST['action'])) { + $ecran_securite_raison = 'install&action impossibles'; +} + /* * Échappement xss referer */ @@ -488,6 +495,15 @@ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) $_SERVER['HTTP_X_FORWARDED_HOST'] = strtr($_SERVER['HTTP_X_FORWARDED_HOST'], "<>?\"\{\}\$'` \r\n", '____________'); +/* + * Pas d'erreur dans l'erreur + */ +if (isset($_REQUEST['var_erreur']) and isset($_REQUEST['page']) and $_REQUEST['page'] === 'login') { + if (strlen($_REQUEST['var_erreur']) !== strcspn($_REQUEST['var_erreur'], '<>')) + $ecran_securite_raison = 'var_erreur incorrecte'; +} + + /* * Réinjection des clés en html dans l'admin r19561 */ diff --git a/www/ecrire/balise/formulaire_admin.php b/www/ecrire/balise/formulaire_admin.php index f4bbfb41..32b330a0 100644 --- a/www/ecrire/balise/formulaire_admin.php +++ b/www/ecrire/balise/formulaire_admin.php @@ -79,14 +79,14 @@ function balise_FORMULAIRE_ADMIN_stat($args, $context_compil) { * Classe CSS éventuelle * @param string|array $debug * Informations sur la page contenant une erreur de compilation - * @return array + * @return array|string * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_FORMULAIRE_ADMIN_dyn($float = '', $debug = '') { static $dejafait = false; - if (!@$_COOKIE['spip_admin']) { + if (empty($_COOKIE['spip_admin'])) { return ''; } @@ -251,8 +251,14 @@ function admin_preview($type, $id, $desc = null) { * Code de langue **/ function admin_lang() { - $alang = sql_getfetsel('lang', 'spip_auteurs', - "login=" . sql_quote(preg_replace(',^@,', '', @$_COOKIE['spip_admin']))); + $alang = ''; + if (!empty($_COOKIE['spip_admin'])) { + $email_or_login = preg_replace(',^@,', '', $_COOKIE['spip_admin']); + $alang = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email_or_login)); + if (!$alang) { + $alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote($email_or_login)); + } + } if (!$alang) { return ''; } diff --git a/www/ecrire/inc/filtres.php b/www/ecrire/inc/filtres.php index 2d5594b6..34bd4de4 100644 --- a/www/ecrire/inc/filtres.php +++ b/www/ecrire/inc/filtres.php @@ -438,7 +438,7 @@ function image_filtrer($args) { foreach ($tags as $tag) { $class = extraire_attribut($tag[3], 'class'); if (!$class or - (strpos($class, 'filtre_inactif') == false + (strpos($class, 'filtre_inactif') === false // compat historique a virer en 3.2 and strpos($class, 'no_image_filtrer') === false) ) { @@ -3366,7 +3366,7 @@ function http_img_pack($img, $alt, $atts = '', $title = '', $options = array()) if (!isset($options['chemin_image']) or $options['chemin_image'] == true) { $img = chemin_image($img); } - if (stripos($atts, 'width') === false) { + if (stripos($atts, 'width') === false && !preg_match(',\.svg$,', $img)) { // utiliser directement l'info de taille presente dans le nom if ((!isset($options['utiliser_suffixe_size']) or $options['utiliser_suffixe_size'] == true) and preg_match(',-([0-9]+)[.](png|gif)$,', $img, $regs) @@ -3416,6 +3416,50 @@ function filtre_balise_img_dist($img, $alt = "", $class = "") { } +/** + * Inserer un svg inline + * http://www.accede-web.com/notices/html-css-javascript/6-images-icones/6-2-svg-images-vectorielles/ + * + * pour l'inserer avec une balise , utiliser le filtre |balise_img + * + * @param string $img + * @param string $alt + * @param string $class + * @return string + */ +function filtre_balise_svg_dist($img, $alt = "", $class = "") { + if (!$file = find_in_path($img) + or !$svg = file_get_contents($file)) { + return ''; + } + + if (!preg_match(",]*>,UimsS", $svg, $match)) { + return ''; + } + $balise_svg = $match[0]; + $balise_svg_source = $balise_svg; + // IE est toujours mon ami + $balise_svg = inserer_attribut($balise_svg, 'focusable', 'false'); + if ($class) { + $balise_svg = inserer_attribut($balise_svg, 'class', $class); + } + if ($alt){ + $balise_svg = inserer_attribut($balise_svg, 'role', 'img'); + $id = "img-svg-title-" . substr(md5("$file:$svg:$alt"),0,4); + $balise_svg = inserer_attribut($balise_svg, 'aria-labelledby', $id); + $title = "" . entites_html($alt)."\n"; + $balise_svg .= $title; + } + else { + $balise_svg = inserer_attribut($balise_svg, 'aria-hidden', 'true'); + } + $svg = str_replace($balise_svg_source, $balise_svg, $svg); + + return $svg; +} + + + /** * Affiche chaque valeur d'un tableau associatif en utilisant un modèle * diff --git a/www/ecrire/inc/headers.php b/www/ecrire/inc/headers.php index 9eba21e6..0146614a 100644 --- a/www/ecrire/inc/headers.php +++ b/www/ecrire/inc/headers.php @@ -59,6 +59,10 @@ function redirige_par_entete($url, $equiv = '', $status = 302) { // ne pas laisser passer n'importe quoi dans l'url $url = str_replace(array('<', '"'), array('<', '"'), $url); + $url = str_replace(array("\r", "\n", ' '), array('%0D', '%0A', '%20'), $url); + while (strpos($url, '%0A') !== false) { + $url = str_replace('%0A', '', $url); + } // interdire les url inline avec des pseudo-protocoles : if ( (preg_match(",data:,i", $url) and preg_match("/base64\s*,/i", $url)) diff --git a/www/ecrire/inc/meta.php b/www/ecrire/inc/meta.php index 55d3a323..ee271992 100644 --- a/www/ecrire/inc/meta.php +++ b/www/ecrire/inc/meta.php @@ -32,7 +32,7 @@ function inc_meta_dist($table = 'meta') { // en cas d'install ne pas faire confiance au meta_cache eventuel $cache = cache_meta($table); - if ((_request('exec') !== 'install' or !test_espace_prive()) + if ((!$exec = _request('exec') or !autoriser_sans_cookie($exec)) and $new = jeune_fichier($cache, _META_CACHE_TIME) and lire_fichier_securise($cache, $meta) and $meta = @unserialize($meta) diff --git a/www/ecrire/inc/securiser_action.php b/www/ecrire/inc/securiser_action.php index 6d7a9c86..52e8ff1c 100644 --- a/www/ecrire/inc/securiser_action.php +++ b/www/ecrire/inc/securiser_action.php @@ -184,14 +184,16 @@ function caracteriser_auteur($id_auteur = null) { function _action_auteur($action, $id_auteur, $pass, $alea) { static $sha = array(); if (!isset($sha[$id_auteur . $pass . $alea])) { - if (!isset($GLOBALS['meta'][$alea]) and _request('exec') !== 'install') { - include_spip('inc/acces'); - charger_aleas(); - if (empty($GLOBALS['meta'][$alea])) { - include_spip('inc/minipres'); - echo minipres(); - spip_log("$alea indisponible"); - exit; + if (!isset($GLOBALS['meta'][$alea])) { + if (!$exec = _request('exec') or !autoriser_sans_cookie($exec)){ + include_spip('inc/acces'); + charger_aleas(); + if (empty($GLOBALS['meta'][$alea])){ + include_spip('inc/minipres'); + echo minipres(); + spip_log("$alea indisponible"); + exit; + } } } include_spip('auth/sha256.inc'); diff --git a/www/ecrire/inc/session.php b/www/ecrire/inc/session.php index 0ad5c9e6..a7596502 100644 --- a/www/ecrire/inc/session.php +++ b/www/ecrire/inc/session.php @@ -214,7 +214,7 @@ function ajouter_session($auteur) { include_spip('inc/autoriser'); } if (autoriser('ecrire','','',$auteur) and _DUREE_COOKIE_ADMIN) { - spip_setcookie('spip_admin', '@' . $auteur['login'], time() + max(_DUREE_COOKIE_ADMIN, $duree)); + spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), time() + max(_DUREE_COOKIE_ADMIN, $duree)); } // sinon le supprimer ... else { spip_setcookie('spip_admin', '', 1); diff --git a/www/ecrire/inc/utils.php b/www/ecrire/inc/utils.php index 0a5bac29..22c0c327 100644 --- a/www/ecrire/inc/utils.php +++ b/www/ecrire/inc/utils.php @@ -836,7 +836,7 @@ function _L($text, $args = array(), $options = array()) { $options = $defaut_options; } - if (is_array($args)) { + if (is_array($args) and count($args)) { if (!function_exists('interdire_scripts')) { include_spip('inc/texte'); } @@ -1641,14 +1641,24 @@ function find_all_in_path($dir, $pattern, $recurs = false) { /** * Prédicat sur les scripts de ecrire qui n'authentifient pas par cookie + * et beneficient d'une exception + * * @param string $nom + * @param bool $strict * @return bool */ -function autoriser_sans_cookie($nom) { +function autoriser_sans_cookie($nom, $strict = false) { static $autsanscookie = array('install', 'base_repair'); - $nom = preg_replace('/.php[3]?$/', '', basename($nom)); - return in_array($nom, $autsanscookie); + if (in_array($nom, $autsanscookie)) { + if (test_espace_prive()){ + include_spip('base/connect_sql'); + if (!$strict or !spip_connect()){ + return true; + } + } + } + return false; } /** diff --git a/www/ecrire/inc_version.php b/www/ecrire/inc_version.php index f6de654e..41ef1c3d 100644 --- a/www/ecrire/inc_version.php +++ b/www/ecrire/inc_version.php @@ -372,7 +372,7 @@ $liste_des_authentifications = array( // pour specifier les versions de SPIP necessaires // il faut s'en tenir a un nombre de decimales fixe // ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2 -$spip_version_branche = "3.2.4"; +$spip_version_branche = "3.2.5"; // cette version dev accepte tous les plugins compatible avec la version ci-dessous // a supprimer en phase beta/rc/release #define('_DEV_VERSION_SPIP_COMPAT',"3.1.3"); @@ -515,7 +515,12 @@ if (!defined('_HEADER_COMPOSED_BY')) { define('_HEADER_COMPOSED_BY', "Composed-By: SPIP"); } if (!headers_sent() and _HEADER_COMPOSED_BY) { - header("Vary: Cookie, Accept-Encoding"); + if (!defined('_HEADER_VARY')) { + define('_HEADER_VARY', "Vary: Cookie, Accept-Encoding"); + } + if (_HEADER_VARY) { + header(_HEADER_VARY); + } if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) { include_spip('inc/filtres_mini'); header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net + " . url_absolue(_DIR_VAR . "config.txt")); diff --git a/www/ecrire/index.php b/www/ecrire/index.php index 6d8b1ae0..81281f2f 100644 --- a/www/ecrire/index.php +++ b/www/ecrire/index.php @@ -41,7 +41,7 @@ $reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec // Les scripts d'insallation n'authentifient pas, forcement, // alors il faut blinder les variables d'URL // -if (autoriser_sans_cookie($exec)) { +if (autoriser_sans_cookie($exec, false)) { if (!isset($reinstall)) { $reinstall = 'non'; } @@ -65,20 +65,22 @@ $forcer_lang = true; if (_request('action') or _request('var_ajax') or _request('formulaire_action')) { - // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires - include_spip('public/aiguiller'); - if ( - // cas des appels actions ?action=xxx - traiter_appels_actions() - or - // cas des hits ajax sur les inclusions ajax - traiter_appels_inclusions_ajax() - or - // cas des formulaires charger/verifier/traiter - traiter_formulaires_dynamiques() - ) { - exit; - } // le hit est fini ! + if (!autoriser_sans_cookie($exec)){ + // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires + include_spip('public/aiguiller'); + if ( + // cas des appels actions ?action=xxx + traiter_appels_actions() + or + // cas des hits ajax sur les inclusions ajax + traiter_appels_inclusions_ajax() + or + // cas des formulaires charger/verifier/traiter + traiter_formulaires_dynamiques() + ){ + exit; + } // le hit est fini ! + } } // securiser les redirect du back-office if (_request('redirect')) { diff --git a/www/ecrire/lang/spip_fr.php b/www/ecrire/lang/spip_fr.php index 6d8ceb6a..a65ccd19 100644 --- a/www/ecrire/lang/spip_fr.php +++ b/www/ecrire/lang/spip_fr.php @@ -606,7 +606,7 @@ et vous reconnecter au site. 'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.', 'pass_quitter_fenetre' => 'Quitter cette fenêtre', 'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».', - 'pass_recevoir_mail' => 'Vous allez recevoir un email vous indiquant comment retrouver votre accès au site.', + 'pass_recevoir_mail' => 'Un lien de réinitialisation de votre mot de passe vous a été envoyé sur votre adresse email (si celle-ci est valide).', 'pass_retour_public' => 'Retour sur le site public', 'pass_rien_a_faire_ici' => 'Rien à faire ici.', 'pass_vousinscrire' => 'Vous inscrire sur ce site', diff --git a/www/ecrire/paquet.xml b/www/ecrire/paquet.xml index 1df17ef1..6e81f739 100644 --- a/www/ecrire/paquet.xml +++ b/www/ecrire/paquet.xml @@ -1,7 +1,7 @@ command['where']) { - $menage = false; foreach ($where as $k => $v) { if (is_array($v)) { if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) { @@ -256,7 +255,6 @@ class IterDecorator extends FilterIterator { } if ((!$op) or ($op == 1) or ($op == '0=0')) { unset($where[$k]); - $menage = true; } // traiter {cle IN a,b} ou {valeur !IN a,b} // prendre en compte le cas particulier de sous-requetes @@ -271,7 +269,7 @@ class IterDecorator extends FilterIterator { if (preg_match(',^\(\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\)(?:\s+(AND|OR)\s+\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\))*\)$,', $op, $regs)) { $this->ajouter_filtre($regs[1], 'IN', strlen($req) ? $req : $regs[3], $regs[2]); - unset($op); + unset($op, $where[$k]); } } foreach ($where as $k => $v) { diff --git a/www/plugins-dist/compresseur/lib/csstidy/README.md b/www/plugins-dist/compresseur/lib/csstidy/README.md index 45ca70a9..31d06757 100644 --- a/www/plugins-dist/compresseur/lib/csstidy/README.md +++ b/www/plugins-dist/compresseur/lib/csstidy/README.md @@ -2,6 +2,8 @@ CSSTidy is a CSS minifier +* v1.6.5 : + fix warnings with PHP 7.3 * v1.6.4 : preserve important comments (starting with !) in the minification /*! Credits/Licence */ * v1.6.3 : diff --git a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php index 3520279b..d29068a0 100644 --- a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php +++ b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php @@ -95,7 +95,7 @@ require('class.csstidy_optimise.php'); * An online version should be available here: http://cdburnerxp.se/cssparse/css_optimiser.php * @package csstidy * @author Florian Schmitz (floele at gmail dot com) 2005-2006 - * @version 1.6.4 + * @version 1.6.5 */ class csstidy { @@ -148,7 +148,7 @@ class csstidy { * @var string * @access private */ - public $version = '1.6.4'; + public $version = '1.6.5'; /** * Stores the settings * @var array @@ -888,7 +888,7 @@ class csstidy { $this->str_char[] = $string{$i} === '(' ? ')' : $string{$i}; $this->from[] = 'instr'; $this->quoted_string[] = ($_str_char === ')' && $string{$i} !== '(' && trim($_cur_string)==='(')?$_quoted_string:!($string{$i} === '('); - continue; + continue 2; } if ($_str_char !== ")" && ($string{$i} === "\n" || $string{$i} === "\r") && !($string{$i - 1} === '\\' && !$this->escaped($string, $i - 1))) { diff --git a/www/plugins-dist/compresseur/paquet.xml b/www/plugins-dist/compresseur/paquet.xml index ae94115d..f01829e9 100644 --- a/www/plugins-dist/compresseur/paquet.xml +++ b/www/plugins-dist/compresseur/paquet.xml @@ -1,7 +1,7 @@   #SET{value,mot-#ID_MOT-#OBJET-#ID_OBJET} - + diff --git a/www/plugins-dist/mots/prive/objets/liste/mots_associer-select.html b/www/plugins-dist/mots/prive/objets/liste/mots_associer-select.html index 2f395f8e..e660e5ff 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots_associer-select.html +++ b/www/plugins-dist/mots/prive/objets/liste/mots_associer-select.html @@ -6,7 +6,7 @@ #SET{value,mot-#ID_MOT-#OBJET-#ID_OBJET} - + diff --git a/www/plugins-dist/sites/inc/syndic.php b/www/plugins-dist/sites/inc/syndic.php index 727c3084..c1d4d780 100644 --- a/www/plugins-dist/sites/inc/syndic.php +++ b/www/plugins-dist/sites/inc/syndic.php @@ -277,6 +277,11 @@ function analyser_backend($rss, $url_syndic = '') { trim(extraire_attribut($match[1], 'url'))); } + // GitHub : Identification du commit + if (preg_match(',[^/]+/(\w+),Uims', $item, $regs)) { + $data['id_commit'] = $regs[1]; + } + // tags # a partir de "", (del.icio.us) # ou (flickr) diff --git a/www/plugins-dist/sites/paquet.xml b/www/plugins-dist/sites/paquet.xml index 18756cab..c74302a4 100644 --- a/www/plugins-dist/sites/paquet.xml +++ b/www/plugins-dist/sites/paquet.xml @@ -1,7 +1,7 @@ decideur->est_presente_lib($nom)) { @@ -887,13 +888,18 @@ class Actionneur { * @see Actionneur::sauver_actions() **/ public function get_actions() { - lire_fichier(_DIR_TMP . 'stp_actions.txt', $contenu); - $infos = unserialize($contenu); - $this->end = $infos['todo']; - $this->work = $infos['work']; - $this->done = $infos['done']; - $this->err = $infos['err']; - $this->lock = $infos['lock']; + if ( + lire_fichier(_DIR_TMP . 'stp_actions.txt', $contenu) + and $contenu + and $infos = unserialize($contenu) + and is_array($infos) + ) { + $this->end = $infos['todo']; + $this->work = $infos['work']; + $this->done = $infos['done']; + $this->err = $infos['err']; + $this->lock = $infos['lock']; + } } /** @@ -902,7 +908,7 @@ class Actionneur { * Remet tout à zéro pour pouvoir repartir d'un bon pied. **/ public function nettoyer_actions() { - $this->todo = array(); + $this->end = array(); $this->done = array(); $this->work = array(); $this->err = array(); diff --git a/www/plugins-dist/svp/inc/svp_outiller.php b/www/plugins-dist/svp/inc/svp_outiller.php index 88ac0d04..9f74f5f7 100644 --- a/www/plugins-dist/svp/inc/svp_outiller.php +++ b/www/plugins-dist/svp/inc/svp_outiller.php @@ -266,9 +266,9 @@ function compiler_branches_spip($intervalle) { $bornes['max']['incluse'] = true; } // On les nettoie des suffixes d'etat - $borne_inf = strtolower(preg_replace(',([0-9])[\s-.]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1', + $borne_inf = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1', $bornes['min']['valeur'])); - $borne_sup = strtolower(preg_replace(',([0-9])[\s-.]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1', + $borne_sup = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1', $bornes['max']['valeur'])); // On determine les branches inf et sup issues du phrasage de l'intervalle @@ -487,7 +487,7 @@ function normaliser_version($version = '') { $version_normalisee = ''; - if (preg_match(',([0-9.]+)[\s-.]?(dev|alpha|a|beta|b|rc|pl|p)?,i', $version, $matches)) { + if (preg_match(',([0-9.]+)[\s.-]?(dev|alpha|a|beta|b|rc|pl|p)?,i', $version, $matches)) { if (isset($matches[1]) and $matches[1]) { $v = explode('.', $matches[1]); $vn = array(); diff --git a/www/plugins-dist/svp/inc/where_compatible_spip.php b/www/plugins-dist/svp/inc/where_compatible_spip.php index ebd2f7f2..b5dab252 100644 --- a/www/plugins-dist/svp/inc/where_compatible_spip.php +++ b/www/plugins-dist/svp/inc/where_compatible_spip.php @@ -14,15 +14,14 @@ if (!defined("_ECRIRE_INC_VERSION")) { /** * Construit le WHERE d'une requête SQL de selection des plugins ou paquets - * compatibles avec une version ou une branche de spip. + * compatibles avec une version, une branche de spip ou une liste de branches. * * Cette fonction est appelée par le critère {compatible_spip} * - * @used-by svp_compter() * @used-by critere_compatible_spip_dist() * * @param string $version - * Numéro de version de SPIP, tel que 2.0.8 + * Numéro de version de SPIP, tel que 2.0.8 ou de branche tel que 3.1 ou une liste de branche '3.1,3.2' * @param string $table * Table d'application ou son alias SQL * @param string $op @@ -30,37 +29,56 @@ if (!defined("_ECRIRE_INC_VERSION")) { * @return string * Expression where de la requête SQL */ -function inc_where_compatible_spip($version = '', $table, $op) { +function inc_where_compatible_spip($version, $table, $op) { - // le critere s'applique a une VERSION (1.9.2, 2.0.8, ...) - if (count(explode('.', $version)) == 3) { - $min = 'SUBSTRING_INDEX(' . $table . '.compatibilite_spip, \';\', 1)'; - $max = 'SUBSTRING_INDEX(' . $table . '.compatibilite_spip, \';\', -1)'; + // En cas d'erreur sur le critère on annule l'effet du critère. + $where = '1=1'; - $where = 'CASE WHEN ' . $min . ' = \'\' - OR ' . $min . ' = \'[\' - THEN \'1.9.0\' <= \'' . $version . '\' - ELSE TRIM(LEADING \'[\' FROM ' . $min . ') <= \'' . $version . '\' - END -AND - CASE WHEN ' . $max . ' = \'\' - OR ' . $max . ' = \']\' - THEN \'99.99.99\' >= \'' . $version . '\' - WHEN ' . $max . ' = \')\' - OR ' . $max . ' = \'[\' - THEN \'99.99.99\' > \'' . $version . '\' - WHEN RIGHT(' . $max . ', 1) = \')\' - OR RIGHT(' . $max . ', 1) = \'[\' - THEN LEFT(' . $max . ', LENGTH(' . $max . ') - 1) > \'' . $version . '\' - ELSE LEFT(' . $max . ', LENGTH(' . $max . ') - 1) >= \'' . $version . '\' - END'; - } // le critere s'applique a une BRANCHE (1.9, 2.0, ...) - elseif (count(explode('.', $version)) == 2) { - $where = 'LOCATE(\'' . $version . '\', ' . $table . '.branches_spip) ' . $op . ' 0'; - } // le critere est vide ou mal specifie - else { - $where = '1=1'; - } + // On verifie en premier si on a affaire à une liste de branches ou à une version/branche unique. + if (strpos($version, ',') === false) { + // Le critère concerne une version ou une branche unique. + if (count(explode('.', $version)) == 3) { + // le critere s'applique a une version x.y.z (1.9.2, 2.0.8, ...) + $min = 'SUBSTRING_INDEX(' . $table . '.compatibilite_spip, \';\', 1)'; + $max = 'SUBSTRING_INDEX(' . $table . '.compatibilite_spip, \';\', -1)'; + $where = 'CASE WHEN ' . $min . ' = \'\' + OR ' . $min . ' = \'[\' + THEN \'1.9.0\' <= \'' . $version . '\' + ELSE TRIM(LEADING \'[\' FROM ' . $min . ') <= \'' . $version . '\' + END + AND + CASE WHEN ' . $max . ' = \'\' + OR ' . $max . ' = \']\' + THEN \'99.99.99\' >= \'' . $version . '\' + WHEN ' . $max . ' = \')\' + OR ' . $max . ' = \'[\' + THEN \'99.99.99\' > \'' . $version . '\' + WHEN RIGHT(' . $max . ', 1) = \')\' + OR RIGHT(' . $max . ', 1) = \'[\' + THEN LEFT(' . $max . ', LENGTH(' . $max . ') - 1) > \'' . $version . '\' + ELSE LEFT(' . $max . ', LENGTH(' . $max . ') - 1) >= \'' . $version . '\' + END'; + } elseif (count(explode('.', $version)) == 2) { + // le critere s'applique a une branche x.y unique (par exemple 1.9) + $where = 'LOCATE(\'' . $version . '\', ' . $table . '.branches_spip) ' . $op . ' 0'; + } + } else { + // Le critère concerne forcément une liste de branches (la liste n'est pas disponible pour une version). + $branches = explode(',', $version); + $where_liste = ''; + foreach ($branches as $_branche) { + // On vérifie qu'on est bien en présence d'une branche. + if (count(explode('.', $_branche)) == 2) { + $where_liste .= ($where_liste ? ' AND ' : '') . 'LOCATE(\'' . $_branche . '\', ' . $table . '.branches_spip) ' . $op . ' 0'; + } + } + + // Si non vide, on renvoie le where calculé. + if ($where_liste) { + $where = $where_liste; + } + } + return $where; } diff --git a/www/plugins-dist/svp/paquet.xml b/www/plugins-dist/svp/paquet.xml index 47622049..c9ded3c7 100644 --- a/www/plugins-dist/svp/paquet.xml +++ b/www/plugins-dist/svp/paquet.xml @@ -1,7 +1,7 @@ '); } - $compteurs['plugin'] = sql_count(sql_select('t2.id_plugin', $from, $where)); + $compteurs['plugin'] = sql_count(sql_select('DISTINCT t1.id_plugin', $from, $where)); } elseif ($entite == 'paquet') { + $from = array('spip_paquets AS t1'); if ($categorie) { $ids = sql_allfetsel('id_plugin', 'spip_plugins', 'categorie=' . sql_quote($categorie)); - $ids = array_map('reset', $ids); + $ids = array_column($ids, 'id_plugin'); $where[] = sql_in('t1.id_plugin', $ids); } if ($compatible_spip) { $creer_where = charger_fonction('where_compatible_spip', 'inc'); $where[] = $creer_where($compatible_spip, 't1', '>'); } - $compteurs['paquet'] = sql_countsel('spip_paquets AS t1', $where); + $compteurs['paquet'] = sql_countsel($from, $where); } elseif ($entite == 'depot') { - $champs = array( + $from = array('spip_depots AS t1'); + $select = array( 'COUNT(t1.id_depot) AS depot', 'SUM(t1.nbr_plugins) AS plugin', 'SUM(t1.nbr_paquets) AS paquet', 'SUM(t1.nbr_autres) AS autre' ); - $compteurs = sql_fetsel($champs, 'spip_depots AS t1', $where); + $compteurs = sql_fetsel($select, $from, $where); } elseif ($entite == 'categorie') { - $from = array('spip_plugins AS t2'); - $where_depot = $where[0]; - $where = array(); + $from = array('spip_plugins AS t2', 'spip_depots_plugins AS t1'); + $where[] = "t1.id_plugin=t2.id_plugin"; if ($id_depot) { - $ids = sql_allfetsel('id_plugin', 'spip_depots_plugins AS t1', $where_depot); - $ids = array_map('reset', $ids); + $ids = sql_allfetsel('id_plugin', 'spip_depots_plugins AS t1', $where); + $ids = array_column($ids, 'id_plugin'); $where[] = sql_in('t2.id_plugin', $ids); } if ($compatible_spip) { @@ -485,10 +485,13 @@ function svp_compter($entite, $id_depot = 0, $categorie = '', $compatible_spip = } if ($categorie) { $where[] = "t2.categorie=" . sql_quote($categorie); + $compteurs['categorie'] = sql_count(sql_select('DISTINCT t1.id_plugin', $from, $where)); } else { + $select = array('t2.categorie', 'count(DISTINCT t1.id_plugin) as nb'); $group_by = array('t2.categorie'); + $plugins = sql_allfetsel($select, $from, $where, $group_by); + $compteurs['categorie'] = array_column($plugins, 'nb', 'categorie'); } - $compteurs['categorie'] = sql_countsel($from, $where, $group_by); } return $compteurs; @@ -707,14 +710,14 @@ function svp_calculer_url_demo($url_demo, $url_absolue = false) { } /** - * Critère de compatibilité avec une version précise ou une branche de SPIP. - * - * Fonctionne sur les tables spip_paquets et spip_plugins + * Critère de compatibilité avec une version précise ou une branche de SPIP ou une liste de branches séparées par + * une virgule. * - * Si aucune valeur n'est explicité dans le critère, tous les enregistrements - * sont retournés. + * Fonctionne sur les tables spip_paquets et spip_plugins. + * Si aucune valeur n'est explicité dans le critère on interroge le contexte pour trouver une variable + * compatible_spip et sinon tous les objets sont retournés. * - * Le ! (NOT) fonctionne sur le critère BRANCHE + * Le ! (NOT) ne fonctionne que sur une branche ou une liste de branches SPIP. * * @critere * @example @@ -722,42 +725,62 @@ function svp_calculer_url_demo($url_demo, $url_absolue = false) { * {compatible_spip 2.0.8} ou {compatible_spip 1.9} * {compatible_spip #ENV{vers}} ou {compatible_spip #ENV{vers, 1.9.2}} * {compatible_spip #GET{vers}} ou {compatible_spip #GET{vers, 2.1}} + * {compatible_spip '2.0,2.1'} + * {!compatible_spip 2.0} + * {!compatible_spip '2.0,2.1'} + * {!compatible_spip #ENV{vers}} ou {!compatible_spip #GET{vers}} * * @param string $idb Identifiant de la boucle * @param array $boucles AST du squelette * @param Critere $crit Paramètres du critère dans cette boucle + * * @return void */ function critere_compatible_spip_dist($idb, &$boucles, $crit) { + // Initialisation de la table (spip_plugins ou spip_paquets) $boucle = &$boucles[$idb]; $table = $boucle->id_table; - // Si on utilise ! la fonction LOCATE doit retourner 0. - // -> utilise uniquement avec le critere BRANCHE + // Initialisation du numéro de critère pour utiliser plusieurs fois le critère dans la même boucle + static $i = 1; + + // La fonction LOCATE retourne soit 0 (pas trouvée) soit une valeur strictement supérieure à 0 (trouvée). + // Donc avec le modificateur not l'opérateur est un "=", sinon un ">". + // Le NOT s'utilise uniquement avec une branche SPIP (ex 2.0). $op = ($crit->not == '!') ? '=' : '>'; + // On calcule le code des critères. + // -- Initialisation avec le chargement de la fonction de calcul du critère. $boucle->hash .= ' // COMPATIBILITE SPIP $creer_where = charger_fonction(\'where_compatible_spip\', \'inc\');'; - // version/branche explicite dans l'appel du critere - if (isset($crit->param[0][0])) { - $version = calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucle->id_parent); - $boucle->hash .= ' - $where = $creer_where(' . $version . ', \'' . $table . '\', \'' . $op . '\'); - '; - } - // pas de version/branche explicite dans l'appel du critere - // on regarde si elle est dans le contexte - else { + // On traite le critère suivant que la version ou la branche est explicitement fournie ou pas. + if (!empty($crit->param)) { + // La ou les versions/branches sont explicites dans l'appel du critere. + // - on boucle sur les paramètres sachant qu'il est possible de fournir une liste séparée par une virgule + // (ex 3.2,3.1) + foreach ($crit->param as $_param) { + if (isset($_param[0])) { + $version = calculer_liste(array($_param[0]), array(), $boucles, $boucle->id_parent); + $boucle->hash .= ' + $where' . $i . ' = $creer_where(' . $version . ', \'' . $table . '\', \'' . $op . '\'); + '; + $boucle->where[] = '$where' . $i; + $i++; + } + } + } else { + // Pas de version ou de branche explicite dans l'appel du critere. + // - on regarde si elle est dans le contexte $boucle->hash .= ' $version = isset($Pile[0][\'compatible_spip\']) ? $Pile[0][\'compatible_spip\'] : \'\'; - $where = $creer_where($version, \'' . $table . '\', \'' . $op . '\'); + $where' . $i . ' = $creer_where($version, \'' . $table . '\', \'' . $op . '\'); '; + $boucle->where[] = '$where' . $i; + $i++; } - - $boucle->where[] = '$where'; } /** diff --git a/www/plugins-dist/urls_etendues/paquet.xml b/www/plugins-dist/urls_etendues/paquet.xml index 0a1c7fd0..dcaf819a 100644 --- a/www/plugins-dist/urls_etendues/paquet.xml +++ b/www/plugins-dist/urls_etendues/paquet.xml @@ -1,7 +1,7 @@ ]<:bouton_modifier:>(#ID_OBJET|generer_url_entite{#OBJET,'','',#EVAL{true}}|url_absolue)[(#GET{auth})]] + ><:bouton_modifier:>](#ID_OBJET|generer_url_entite{#OBJET,'','',#EVAL{true}}|url_absolue)[(#GET{auth})]] [(#AUTORISER{modifier,#OBJET,#ID_OBJET})
diff --git a/www/prive/formulaires/login.php b/www/prive/formulaires/login.php index b59ed918..9ec45aca 100644 --- a/www/prive/formulaires/login.php +++ b/www/prive/formulaires/login.php @@ -66,6 +66,9 @@ function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) $login = strval(_request('var_login')); } // si on est deja identifie + if (!$login and isset($GLOBALS['visiteur_session']['email'])) { + $login = $GLOBALS['visiteur_session']['email']; + } if (!$login and isset($GLOBALS['visiteur_session']['login'])) { $login = $GLOBALS['visiteur_session']['login']; } @@ -135,8 +138,8 @@ function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) } elseif ($erreur) { // une erreur d'un SSO indique dans la redirection vers ici // mais il faut se proteger de toute tentative d'injection malveilante - include_spip('inc/texte'); - $valeurs['message_erreur'] = safehtml($erreur); + include_spip('inc/filtres'); + $valeurs['message_erreur'] = textebrut($erreur); } return $valeurs; diff --git a/www/prive/themes/spip/bando.css.html b/www/prive/themes/spip/bando.css.html index 31212ebb..bed41c42 100644 --- a/www/prive/themes/spip/bando.css.html +++ b/www/prive/themes/spip/bando.css.html @@ -32,11 +32,14 @@ #bando_haut ul.deroulant li ul.menu-2col { max-width: initial; -moz-column-count: 2; -moz-column-gap: 0; -webkit-column-count: 2; -webkit-column-gap: 0; -webkit-perspective:1; column-count: 2; column-gap: 0; } #bando_haut ul.deroulant li.actif ul, #bando_haut ul.deroulant li.actif_tempo ul { #ENV{left}:auto;} #bando_haut ul.deroulant li a { display: block; color:#444; font-weight:bold;} +#bando_haut ul.deroulant li ul.menu-2col a {display: inline-block;} #bando_haut ul.deroulant li ul li { background-color: #fff; } #bando_haut ul.deroulant li ul li a { } #bando_haut ul.deroulant li ul li a:hover, #bando_haut ul.deroulant li ul li a:focus { background-color: #[(#ENV{claire}|couleur_eclaircir|couleur_eclaircir)]; } +#bando_haut ul.deroulant li ul.menu-2col {background-color: #[(#ENV{claire}|couleur_eclaircir{.92})];} +#bando_haut ul.deroulant li.favori { background-color: #fff; } #bando_haut ul.deroulant li.non_favori { background-color: #[(#ENV{claire}|couleur_eclaircir{.92})]; } #bando_haut ul.deroulant li.favori + li.non_favori { border-top:1px solid #aaa; } diff --git a/www/squelettes-dist/contact.html b/www/squelettes-dist/contact.html index b06ca88d..d2ed7761 100644 --- a/www/squelettes-dist/contact.html +++ b/www/squelettes-dist/contact.html @@ -16,9 +16,7 @@
- +
diff --git a/www/squelettes-dist/formulaires/ecrire_auteur.php b/www/squelettes-dist/formulaires/ecrire_auteur.php index d2db1797..f9a16801 100644 --- a/www/squelettes-dist/formulaires/ecrire_auteur.php +++ b/www/squelettes-dist/formulaires/ecrire_auteur.php @@ -81,14 +81,22 @@ function formulaires_ecrire_auteur_traiter_dist($id_auteur, $id_article, $mail) . _T('info_message_2') . ' ' . $sujet; $texte = _request('texte_message_auteur'); + $texte .= "\n-- $adres"; $texte .= "\n\n-- " . _T('envoi_via_le_site') . ' ' . supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site'])) . ' (' . $GLOBALS['meta']['adresse_site'] . "/) --\n"; $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); - if ($envoyer_mail($mail, $sujet, $texte, $adres, - 'X-Originating-IP: ' . $GLOBALS['ip'])) { + $corps = array( + 'texte' => $texte, + 'repondre_a' => $adres, + 'headers' => array( + "X-Originating-IP: " . $GLOBALS['ip'], + ), + ); + + if ($envoyer_mail($mail, $sujet, $corps)) { $message = _T('form_prop_message_envoye'); return array('message_ok' => $message); diff --git a/www/squelettes-dist/formulaires/mot_de_passe.php b/www/squelettes-dist/formulaires/mot_de_passe.php index 90cc7cfc..2e0821b3 100644 --- a/www/squelettes-dist/formulaires/mot_de_passe.php +++ b/www/squelettes-dist/formulaires/mot_de_passe.php @@ -132,9 +132,29 @@ function formulaires_mot_de_passe_traiter_dist($id_auteur = null, $jeton = null) $res = array('message_erreur' => $err); } else { auteur_effacer_jeton($id_auteur); - $login = $row['login']; + + // Par défaut, on rappelle de s'identifier avec son email s'il existe + // et qu'il n'est PAS utilisé par quelqu'un d'autre + if ( + $row['email'] + and !sql_fetsel( + 'id_auteur', + 'spip_auteurs', + array( + '(email='.sql_quote($row['email']).' or login='.sql_quote($row['email']).')', + 'id_auteur != '.$id_auteur + ), + '', '', '0,1' + ) + ) { + $identifiant = $row['email']; + } + // Sinon on dit d'utiliser le login + else { + $identifiant = $row['login']; + } $res['message_ok'] = '' . _T('pass_nouveau_enregistre') . '' . - '
' . _T('pass_rappel_login', array('login' => $login)); + '
' . _T('pass_rappel_login', array('login' => $identifiant)); include_spip('inc/auth'); $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); diff --git a/www/squelettes-dist/paquet.xml b/www/squelettes-dist/paquet.xml index 1c7e73fc..c2b44b40 100644 --- a/www/squelettes-dist/paquet.xml +++ b/www/squelettes-dist/paquet.xml @@ -1,7 +1,7 @@ -Origine: svn://trac.rezo.net/spip/tags/spip-3.2.4 -Revision: 24285 -Dernier commit: 2019-04-08 14:28:14 +0200 +Origine: svn://trac.rezo.net/spip/tags/spip-3.2.5 +Revision: 24404 +Dernier commit: 2019-09-16 14:02:37 +0200 -svn://trac.rezo.net/spip/tags/spip-3.2.4 -24285 -2019-04-08 14:28:14 +0200 +svn://trac.rezo.net/spip/tags/spip-3.2.5 +24404 +2019-09-16 14:02:37 +0200 \ No newline at end of file -- 2.20.1