From 45a98cec941b1e9e5670314adb93545e16ecae85 Mon Sep 17 00:00:00 2001 From: Ludovic CHEVALIER Date: Fri, 10 May 2019 11:15:24 +0200 Subject: [PATCH] [SPIP] ~v3.2.3-->v3.2.4 --- www/CHANGELOG.TXT | 35 ++++++- www/config/ecran_securite.php | 67 ++++++++++++-- www/ecrire/action/editer_liens.php | 9 +- www/ecrire/inc/filtres_images_lib_mini.php | 91 ++++++++++++++++--- www/ecrire/inc/filtres_mini.php | 1 + www/ecrire/inc/plugin.php | 61 +++++++++---- www/ecrire/inc/session.php | 2 +- www/ecrire/inc_version.php | 7 +- www/ecrire/paquet.xml | 2 +- www/ecrire/plugins/installer.php | 4 +- www/ecrire/req/sqlite_generique.php | 2 +- .../compresseur/inc/compresseur_minifier.php | 2 +- www/plugins-dist/compresseur/paquet.xml | 2 +- www/plugins-dist/forum/paquet.xml | 2 +- .../forum/prive/objets/liste/forums.html | 2 +- .../squelettes/contenu/controler_forum.html | 10 +- .../statistiques/engines-list.txt | 2 +- www/plugins-dist/statistiques/paquet.xml | 4 +- www/prive/formulaires/editer_auteur.php | 14 ++- www/svn.revision | 12 +-- 20 files changed, 261 insertions(+), 70 deletions(-) diff --git a/www/CHANGELOG.TXT b/www/CHANGELOG.TXT index c3839e37..c5f6a044 100644 --- a/www/CHANGELOG.TXT +++ b/www/CHANGELOG.TXT @@ -1,3 +1,36 @@ + +SPIP-Core spip-3.2.3 -> spip-3.2.4 08 avril 2019 +------------------------------------------------------------- + +r24221 | Cerdic | (mar. 12 févr. 2019) | Ecran de securite :* les id_ exceptions dans une variable et on ajoute id_parent et id_article_pdf qui posent parfois problemes* bloquer les paginations croisees dans les calendrier egalement pour les bots (sur certains squelettes genere des tonnes de requetes)* envoyer une 429 Too Many Requests plutot qu'une 503 cf https://webmasters.stackexchange.com/questions/65674/should-i-return-a-429-or-503-status-code-to-a-bot et c'est mieux pour le referencement et GoogleBot qui a tendance a penser que 503 vient d'un serveur mal gere +r24224 | Cerdic | (mar. 12 févr. 2019) | Retour a une liste complete de bots telle qu'elle etait sur la version non incremente de la zone, et on incremente +r24228 | Cerdic | (mer. 20 févr. 2019) | Fix : quand on essaye d'activer un plugin qui n'est pas compatible avec la version de SPIP, il faut remonter une erreur d'activationOn modifie pour cela les fonctions* plugin_valide_resume() pour qu'elle renvoie le prefixe du plugin accepte ou la description short du plugin refuse pour incompatibilite ou erreur* liste_plugin_valides() pour qu'elle renvoie en plus la liste des plugins invalides qu'on voulait* plugins_erreurs() pour gerer le cas xml en erreur ou incompatibilite avec la version de SPIP* plugin_message_incompatibilite() pour generer un message d'erreur approprie quand il s'agit de SPIP et pas d'un pluginAucune rupture de compat, ce ne sont que des ajouts : du code qui utilisait les anciennes signatures de fonction continue a fonctionner sans probleme(Dans l'interface on ne peut pas cocher un plugin non compatible avec la version de SPIP, mais en spip-cli on peut le faire et ca echouait silencieusement) +r24229 | Cerdic | (mer. 20 févr. 2019) | oups, il faut un array ici (complete aba087b3a) +r24234 | marcimat | (jeu. 21 févr. 2019) | Coquille ici (déjà corrigée en dev.) +r24235 | marcimat | (jeu. 21 févr. 2019) | Reports de r24105 et r24233 :- Ticket #3962 : générer des jpgs progressifs- Ticket #4177 : Lorsqu’une image est déjà présente (dans IMG/) avec une extension ne correspondant pas réellement à son contenu, la librairie GD récente de traitement d’image génère une erreur fatale.On évite ce petit souci en vérifiant le contenu de l’image (via le mime type retourné par getimagesize). +r24237 | Cerdic | (ven. 22 févr. 2019) | Fix la langue de mail d'envoi des identifiants : il faut prendre celle de l'auteur ou a defaut celle du site, mais pas celle de l'admin +r24257 | Cerdic | (mer. 13 mars 2019) | Attention au cas ou * en second argument de l'appel de la fonction objet_trouver_lien(), ce qui se produit malheureusement dans la fonction objet_dupliquer_liens() +r24258 | Cerdic | (mer. 13 mars 2019) | respecter les arguments et dans objet_dupliquer_liens(), y compris quand ca concerne un lien qui part de l'objet source +r24271 | marcimat | (lun. 08 avril 2019) | Report de r24140 : Ticket #4204 : 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) +r24275 | Cerdic | (lun. 08 avril 2019) | utiliser var_export qui fait le job plus surement +r24276 | Cerdic | (lun. 08 avril 2019) | sanitizer var_memotri avant de l'utiliser (G0uz) +r24277 | Cerdic | (lun. 08 avril 2019) | v1.3.11 (securiser var_memotri) + + +SPIP-plugins-dist spip-3.2.3 -> spip-3.2.4 08 avril 2019 +------------------------------------------------------------- + +r113589 | e.longuemare | (jeu. 24 janv. 2019) | Regroupement des référants : correction pour matcher Twitter avec les urls courtes de tyoe t.co et non Qwant - report de r113588 +r113735 | cedric | (lun. 04 févr. 2019) | Report de r113734 : oups en voulant conserver les commentaires important commencant par un \! on avait introduit un bug sur les commentaires vides +r113878 | cedric | (mar. 12 févr. 2019) | Report de r113877 : Fix https://core.spip.net/issues/4282 casse par r87494 qui avait renomme par erreur la boucle _forum en _forums (JLuc) +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 + + + SPIP-Core spip-3.2.2 -> spip-3.2.3 21 janvier 2019 ------------------------------------------------------------- Oups : problème de génération du zip @@ -122,4 +155,4 @@ r112456 | b_b | (ven. 16 nov. 2018) | version 1.8.3 : report de r112455 r113162 | Francky | (dim. 30 déc. 2018) | Mise à jour de la lib getid en version 1.9.16, nous étions en 1.9.14https://github.com/JamesHeinrich/getID3/blob/master/changelog.txt r113165 | Francky | (dim. 30 déc. 2018) | Oubli de faire un z+1 pour la peine r113345 | Francky | (mer. 09 janv. 2019) | Le futur, c'est aussi maintenant ici :-) -r113382 | Francky | (sam. 12 janv. 2019) | restait un bonne année à faire en spip 3.2 \ No newline at end of file +r113382 | Francky | (sam. 12 janv. 2019) | restait un bonne année à faire en spip 3.2 diff --git a/www/config/ecran_securite.php b/www/config/ecran_securite.php index d33df610..d6c6ceae 100644 --- a/www/config/ecran_securite.php +++ b/www/config/ecran_securite.php @@ -5,7 +5,7 @@ * ------------------ */ -define('_ECRAN_SECURITE', '1.3.8'); // 2018-10-31 +define('_ECRAN_SECURITE', '1.3.11'); // 2019-04-08 /* * Documentation : http://www.spip.net/fr_article4200.html @@ -39,6 +39,9 @@ if (!defined('_IS_BOT')){ 'bot', 'slurp', 'crawler', + 'crwlr', + 'java', + 'monitoring', 'spider', 'webvac', 'yandex', @@ -49,17 +52,22 @@ if (!defined('_IS_BOT')){ 'a6-indexer', 'aboundex', 'accoona', + 'acrylicapps', 'addthis', 'adressendeutschland', 'alexa', 'altavista', 'analyticsseo', + 'antennapod', + 'arachnys', 'archive', + 'argclrint', 'aspseek', 'baidu', 'begunadvertising', - 'bingpreview', + 'bing', 'bloglines', + 'buck', 'browsershots', 'bubing', 'butterfly', @@ -71,9 +79,13 @@ if (!defined('_IS_BOT')){ 'crowsnest', 'dataminr', 'daumoa', + 'dlvr\.it', 'dlweb', + 'drupal', 'ec2linkfinder', + 'eset\.com', 'estyle', + 'exalead', 'ezooms', 'facebookexternalhit', 'facebookplatform', @@ -85,6 +97,7 @@ if (!defined('_IS_BOT')){ 'flipboardproxy', 'genieo', 'google', + 'go-http-client', 'grapeshot', 'hatena-useragent', 'head', @@ -95,46 +108,69 @@ if (!defined('_IS_BOT')){ 'iltrovatore-setaccio', 'immediatenet', 'ina', + 'inoreader', 'infegyatlas', 'infohelfer', 'instapaper', 'jabse', 'james', + 'jersey', 'kumkie', 'linkdex', 'linkfluence', 'linkwalker', 'litefinder', 'loadimpactpageanalyzer', + 'ltx71', 'luminate', 'lycos', 'lycosa', 'mediapartners-google', 'msai', + 'myapp', + 'nativehost', 'najdi', 'netcraftsurveyagent', 'netestate', 'netseer', + 'netnewswire', + 'newspaper', + 'newsblur', 'nuhk', + 'nuzzel', + 'okhttp', + 'otmedia', 'owlin', + 'owncloud', 'panscient', + 'paper\.li', 'parsijoo', + 'protopage', 'plukkie', 'proximic', + 'pubsub', + 'python', 'qirina', + 'qoshe', 'qualidator', + 'qwantify', 'rambler', 'readability', + 'ruby', 'sbsearch', + 'scoop\.it', 'scooter', + 'scoutjet', 'scrapy', 'scrubby', 'scrubbybloglines', 'shareaholic', 'shopwiki', + 'simplepie', 'sistrix', 'sitechecker', 'siteexplorer', + 'snapshot', 'sogou', 'special_archiver', 'speedy', @@ -146,24 +182,31 @@ if (!defined('_IS_BOT')){ 'superdownloads', 'svenska-webbsido', 'teoma', + 'the knowledge AI', 'thumbshots', 'tineye', + 'traackr', 'trendiction', + 'trendsmap', 'tweetedtimes', 'tweetmeme', + 'universalfeedparser', 'uaslinkchecker', 'undrip', 'unwindfetchor', + 'upday', 'vedma', 'vkshare', 'vm', 'wch', 'webalta', 'webcookies', + 'webparser', 'webthumbnail', 'wesee', 'wise-guys', 'woko', + 'wordpress', 'wotbox', 'y!j-bri', 'y!j-bro', @@ -172,6 +215,7 @@ if (!defined('_IS_BOT')){ 'yahoo', 'yahoo!', 'yahooysmcm', + 'ymobactus', 'yats', 'yeti', 'zeerch' @@ -184,7 +228,8 @@ if (!defined('_IS_BOT_FRIEND')){ isset($_SERVER['HTTP_USER_AGENT']) and preg_match(',' . implode ('|', array( 'facebookexternalhit', - 'flipboardproxy' + 'flipboardproxy', + 'wordpress' )) . ',i', (string)$_SERVER['HTTP_USER_AGENT']) ); @@ -197,17 +242,18 @@ if (!defined('_IS_BOT_FRIEND')){ * (sauf pour id_table, qui n'est pas numérique jusqu'à [5743]) * (id_base est une variable de la config des widgets de WordPress) */ +$_exceptions = array('id_table','id_base','id_parent','id_article_pdf'); foreach ($_GET as $var => $val) if ($_GET[$var] and strncmp($var, "id_", 3) == 0 - and !in_array($var, array('id_table', 'id_base'))) + and !in_array($var, $_exceptions)) $_GET[$var] = is_array($_GET[$var])?@array_map('intval', $_GET[$var]):intval($_GET[$var]); foreach ($_POST as $var => $val) if ($_POST[$var] and strncmp($var, "id_", 3) == 0 - and !in_array($var, array('id_table', 'id_base'))) + and !in_array($var, $_exceptions)) $_POST[$var] = is_array($_POST[$var])?@array_map('intval', $_POST[$var]):intval($_POST[$var]); foreach ($GLOBALS as $var => $val) if ($GLOBALS[$var] and strncmp($var, "id_", 3) == 0 - and !in_array($var, array('id_table', 'id_base'))) + and !in_array($var, $_exceptions)) $GLOBALS[$var] = is_array($GLOBALS[$var])?@array_map('intval', $GLOBALS[$var]):intval($GLOBALS[$var]); /* @@ -321,6 +367,8 @@ if (isset($_REQUEST['GLOBALS'])) if (_IS_BOT and ( (isset($_REQUEST['echelle']) and isset($_REQUEST['partie_cal']) and isset($_REQUEST['type'])) or (strpos((string)$_SERVER['REQUEST_URI'], 'debut_') and preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI'])) + or (isset($_REQUEST['calendrier_annee']) and strpos((string)$_SERVER['REQUEST_URI'], 'debut_') ) + or (isset($_REQUEST['calendrier_annee']) and preg_match(',[?&]calendrier_annee=.*&calendrier_annee=,', (string)$_SERVER['REQUEST_URI'])) ) ) $ecran_securite_raison = "robot agenda/double pagination"; @@ -443,7 +491,7 @@ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) /* * Réinjection des clés en html dans l'admin r19561 */ -if (strpos($_SERVER['REQUEST_URI'], "ecrire/") !== false){ +if (strpos($_SERVER['REQUEST_URI'], "ecrire/") !== false or isset($_REQUEST['var_memotri'])){ $zzzz = implode("", array_keys($_REQUEST)); if (strlen($zzzz) != strcspn($zzzz, '<>"\'')) $ecran_securite_raison = 'Cle incorrecte en $_REQUEST'; @@ -520,11 +568,12 @@ if ( and $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite and rand(0, $load * $load) > _ECRAN_SECURITE_LOAD * _ECRAN_SECURITE_LOAD ) { - header("HTTP/1.0 503 Service Unavailable"); + //https://webmasters.stackexchange.com/questions/65674/should-i-return-a-429-or-503-status-code-to-a-bot + header("HTTP/1.0 429 Too Many Requests"); header("Retry-After: 300"); header("Expires: Wed, 11 Jan 1984 05:00:00 GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-Type: text/html"); - die("Status 503: Site temporarily unavailable

Status 503

Site temporarily unavailable (load average $load)

"); + die("Status 429: Too Many Requests

Status 429

Too Many Requests (try again soon)

"); } diff --git a/www/ecrire/action/editer_liens.php b/www/ecrire/action/editer_liens.php index 3b33fbd6..623ce8c9 100644 --- a/www/ecrire/action/editer_liens.php +++ b/www/ecrire/action/editer_liens.php @@ -247,7 +247,12 @@ function objet_dupliquer_liens($objet, $id_source, $id_cible, $types = null, $ex foreach ($liens as $lien) { $n++; if ($infos['type'] == $objet) { - objet_associer(array($objet => $id_cible), array($lien['objet'] => $lien[$lien['objet']]), $lien); + if ( + (is_null($types) or in_array($lien['objet'], $types)) + and (is_null($exclure_types) or !in_array($lien['objet'], $exclure_types)) + ) { + objet_associer(array($objet => $id_cible), array($lien['objet'] => $lien[$lien['objet']]), $lien); + } } else { objet_associer(array($infos['type'] => $lien[$infos['type']]), array($objet => $id_cible), $lien); } @@ -802,7 +807,7 @@ function lien_find($objet_source, $primary, $table_lien, $id, $objets, $cond = n // ajouter les entrees objet_source et objet cible par convenance foreach ($liens as $l) { $l[$objet_source] = $l[$primary]; - $l[$objet] = $l['id_objet']; + $l[$l['objet']] = $l['id_objet']; $trouve[] = $l; } } diff --git a/www/ecrire/inc/filtres_images_lib_mini.php b/www/ecrire/inc/filtres_images_lib_mini.php index c2c52519..d93acc1e 100644 --- a/www/ecrire/inc/filtres_images_lib_mini.php +++ b/www/ecrire/inc/filtres_images_lib_mini.php @@ -180,15 +180,11 @@ function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cr $fichier = $source; } - $terminaison = $terminaison_dest = ""; - if (preg_match(",\.(gif|jpe?g|png)($|[?]),i", $fichier, $regs)) { - $terminaison = strtolower($regs[1]); - $terminaison_dest = $terminaison; - - if ($terminaison == "gif") { - $terminaison_dest = "png"; - } + $terminaison_dest = ""; + if ($terminaison = _image_trouver_extension($fichier)) { + $terminaison_dest = ($terminaison == 'gif') ? 'png' : $terminaison; } + if ($forcer_format !== false) { $terminaison_dest = $forcer_format; } @@ -197,11 +193,6 @@ function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cr return false; } - $term_fonction = $terminaison; - if ($term_fonction == "jpg") { - $term_fonction = "jpeg"; - } - $nom_fichier = substr($fichier, 0, strlen($fichier) - (strlen($terminaison) + 1)); $fichier_dest = $nom_fichier; if (($find_in_path and $f = find_in_path($fichier) and $fichier = $f) @@ -314,7 +305,7 @@ function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cr "images" . _LOG_DEBUG); } - // TODO: si une image png est nommee .jpg, le reconnaitre avec le bon $f + $term_fonction = _image_trouver_extension_pertinente($fichier); $ret["fonction_imagecreatefrom"] = "_imagecreatefrom" . $term_fonction; $ret["fichier"] = $fichier; $ret["fonction_image"] = "_image_image" . $terminaison_dest; @@ -357,6 +348,74 @@ function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cr return $ret; } +/** + * Retourne la terminaison d’un fichier image + * @param string $path + * @return string + */ +function _image_trouver_extension($path) { + if (preg_match(",\.(gif|jpe?g|png)($|[?]),i", $path, $regs)) { + $terminaison = strtolower($regs[1]); + return $terminaison; + } + return ''; +} + +/** + * Tente de trouver le véritable type d’une image, + * même si une image est d’extension .jpg alors que son contenu est autre chose (gif ou png) + * + * @param string $path + * @return string Extension, dans le format attendu par les fonctions 'gd' ('jpeg' pour les .jpg par exemple) + */ +function _image_trouver_extension_pertinente($path) { + $path = supprimer_timestamp($path); + $terminaison = _image_trouver_extension($path); + if ($terminaison == 'jpg') { + $terminaison = 'jpeg'; + } + + if (!file_exists($path)) { + return $terminaison; + } + + if (!$info = @getimagesize($path)) { + return $terminaison; + } + + $mime = image_type_to_mime_type($info[2]); + + switch (strtolower($mime)) { + case 'image/png': + case 'image/x-png': + $_terminaison = 'png'; + break; + + case 'image/jpg': + case 'image/jpeg': + case 'image/pjpeg': + $_terminaison = 'jpeg'; + break; + + case 'image/gif': + $_terminaison = 'gif'; + break; + + case 'image/webp': + case 'image/x-webp': + $_terminaison = 'webp'; + break; + + default: + $_terminaison = ''; + } + if ($_terminaison !== $terminaison) { + spip_log("Mauvaise extension du fichier : $path . Son type mime est : $mime", "images." . _LOG_INFO_IMPORTANTE); + $terminaison = $_terminaison; + } + return $terminaison; +} + /** * Crée une image depuis un fichier ou une URL * @@ -517,6 +576,10 @@ function _image_imagejpg($img, $fichier, $qualite = _IMG_GD_QUALITE) { return false; } $tmp = $fichier . ".tmp"; + + // Enable interlancing + imageinterlace($img, true); + $ret = imagejpeg($img, $tmp, $qualite); if (file_exists($tmp)) { diff --git a/www/ecrire/inc/filtres_mini.php b/www/ecrire/inc/filtres_mini.php index fff71429..5872d59a 100644 --- a/www/ecrire/inc/filtres_mini.php +++ b/www/ecrire/inc/filtres_mini.php @@ -84,6 +84,7 @@ function suivre_lien($url, $lien) { # lien relatif, il faut verifier l'url de base # commencer par virer la chaine de get de l'url de base + $dir = '/'; if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) { $debut = $regs[1]; $dir = !strlen($regs[2]) ? '/' : $regs[2]; diff --git a/www/ecrire/inc/plugin.php b/www/ecrire/inc/plugin.php index 3c122ffe..417cb9f3 100644 --- a/www/ecrire/inc/plugin.php +++ b/www/ecrire/inc/plugin.php @@ -269,6 +269,7 @@ function liste_plugin_valides($liste_plug, $force = false) { ) ); + $invalides = array(); foreach ($liste_ext as $plug) { if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) { plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST'); @@ -276,7 +277,10 @@ function liste_plugin_valides($liste_plug, $force = false) { } foreach ($liste_plug as $plug) { if (isset($infos['_DIR_PLUGINS'][$plug])) { - plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS'); + $r = plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS'); + if (is_array($r)) { + $invalides = array_merge($invalides, $r); + } } } @@ -284,14 +288,20 @@ function liste_plugin_valides($liste_plug, $force = false) { $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL); foreach ($liste_plug as $plug) { if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) { - plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL'); + $r = plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL'); + if (is_array($r)) { + $invalides = array_merge($invalides, $r); + } } } } plugin_fixer_procure($liste_non_classee, $infos); - return array($infos, $liste_non_classee); + // les plugins qui sont dans $liste_non_classee ne sont pas invalides (on a trouve un autre version valide) + $invalides = array_diff_key($invalides, $liste_non_classee); + + return array($infos, $liste_non_classee, $invalides); } /** @@ -306,27 +316,34 @@ function liste_plugin_valides($liste_plug, $force = false) { * @param string $plug * @param array $infos * @param string $dir_type + * @return string|array + * string prefixe dans $liste si on a accepte le plugin + * array description short si on ne le retient pas (pour memorisation dans une table des erreurs) */ function plugin_valide_resume(&$liste, $plug, $infos, $dir_type) { $i = $infos[$dir_type][$plug]; + $p = strtoupper($i['prefix']); + $short_desc = array( + 'nom' => $i['nom'], + 'etat' => $i['etat'], + 'version' => $i['version'], + 'dir' => $plug, + 'dir_type' => $dir_type + ); if (isset($i['erreur']) and $i['erreur']) { - return; + $short_desc['erreur'] = $i['erreur']; + return array($p=>$short_desc); } if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) { - return; + return array($p=>$short_desc); } - $p = strtoupper($i['prefix']); if (!isset($liste[$p]) or spip_version_compare($i['version'], $liste[$p]['version'], '>') ) { - $liste[$p] = array( - 'nom' => $i['nom'], - 'etat' => $i['etat'], - 'version' => $i['version'], - 'dir' => $plug, - 'dir_type' => $dir_type - ); + $liste[$p] = $short_desc; } + // ok le plugin etait deja dans la liste ou on a choisi une version plus recente + return $p; } /** @@ -534,7 +551,13 @@ function plugins_erreurs($liste_non_classee, $liste, $infos, $msg = array()) { $plug = constant($dir_type) . $plug; if (!isset($msg[$p])) { - if (!$msg[$p] = plugin_necessite($k['necessite'], $liste, 'necessite')) { + if (isset($resume['erreur']) and $resume['erreur']) { + $msg[$p] = array($resume['erreur']); + } + elseif (!plugin_version_compatible($k['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) { + $msg[$p] = array(plugin_message_incompatibilite($k['compatibilite'], $GLOBALS['spip_version_branche'], 'SPIP', 'necessite')); + } + elseif (!$msg[$p] = plugin_necessite($k['necessite'], $liste, 'necessite')) { $msg[$p] = plugin_necessite($k['utilise'], $liste, 'utilise'); } } else { @@ -663,7 +686,9 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) { // prendre en compte les erreurs de dépendances à PHP // ou à une extension PHP avec des messages d'erreurs dédiés. $type = 'plugin'; - if ($nom === 'PHP') { + if ($nom === 'SPIP') { + $type = 'spip'; + } elseif ($nom === 'PHP') { $type = 'php'; } elseif (strncmp($nom, 'PHP:', 4) === 0) { $type = 'extension_php'; @@ -807,11 +832,11 @@ function ecrire_plugin_actifs($plugin, $pipe_recherche = false, $operation = 'ra // pour ne pas rater l'ajout ou la suppression d'un fichier fonctions/options/administrations // pourra etre evite quand on ne supportera plus les plugin.xml // en deplacant la detection de ces fichiers dans la compilation ci dessous - list($infos, $liste) = liste_plugin_valides($plugin, true); + list($infos, $liste, $invalides) = liste_plugin_valides($plugin, true); // trouver l'ordre d'activation list($plugin_valides, $ordre, $reste) = plugin_trier($infos, $liste); - if ($reste) { - plugins_erreurs($reste, $liste, $infos); + if ($invalides or $reste) { + plugins_erreurs(array_merge($invalides, $reste), $liste, $infos); } // Ignorer les plugins necessitant une lib absente diff --git a/www/ecrire/inc/session.php b/www/ecrire/inc/session.php index d637db27..0ad5c9e6 100644 --- a/www/ecrire/inc/session.php +++ b/www/ecrire/inc/session.php @@ -624,7 +624,7 @@ function ecrire_fichier_session($fichier, $auteur) { // enregistrer les autres donnees du visiteur $texte = "<" . "?php\n"; foreach ($auteur as $var => $val) { - $texte .= '$GLOBALS[\'visiteur_session\'][\'' . $var . '\'] = ' + $texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = ' . var_export($val, true) . ";\n"; } $texte .= "?" . ">\n"; diff --git a/www/ecrire/inc_version.php b/www/ecrire/inc_version.php index 16a24979..f6de654e 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.3"; +$spip_version_branche = "3.2.4"; // 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"); @@ -499,7 +499,10 @@ if (isset($_REQUEST['var_memotri']) if (!function_exists('session_set')) { include_spip('inc/session'); } - session_set($t, _request($t)); + $t = preg_replace(",\W,","_", $t); + if ($v = _request($t)) { + session_set($t, $v); + } } /** diff --git a/www/ecrire/paquet.xml b/www/ecrire/paquet.xml index c9bfbcad..1df17ef1 100644 --- a/www/ecrire/paquet.xml +++ b/www/ecrire/paquet.xml @@ -1,7 +1,7 @@ #MODELE{auteur_nom,id_auteur}][(#ID_AUTEUR|non)#AUTEUR] [(#DATE_HEURE|affdate_jourcourt)] [(#AUTORISER{modererforum,#OBJET,#ID_OBJET}|?{ - #ID_FORUM, + #ID_FORUM, #ID_FORUM })] diff --git a/www/plugins-dist/forum/prive/squelettes/contenu/controler_forum.html b/www/plugins-dist/forum/prive/squelettes/contenu/controler_forum.html index d4ac3d43..91c89265 100644 --- a/www/plugins-dist/forum/prive/squelettes/contenu/controler_forum.html +++ b/www/plugins-dist/forum/prive/squelettes/contenu/controler_forum.html @@ -66,22 +66,22 @@ #FORMULAIRE_RECHERCHE_ECRIRE{#GET{self},ajax} [

<:resultats_recherche:> « (#ENV{recherche}) »

] - +

[(#GRAND_TOTAL|singulier_ou_pluriel{forum:info_1_message_forum,forum:info_nb_messages_forum}|sinon{<:forum:aucun_message_forum:>})]

[

(#PAGINATION{prive})

]
    - +
  • [(#INCLURE{fond=prive/modeles/forum, id_forum, self})]
  • - +
[

(#PAGINATION{prive})

] -
+

<:forum:aucun_message_forum:>

- + diff --git a/www/plugins-dist/statistiques/engines-list.txt b/www/plugins-dist/statistiques/engines-list.txt index 85254aed..dd4487f7 100644 --- a/www/plugins-dist/statistiques/engines-list.txt +++ b/www/plugins-dist/statistiques/engines-list.txt @@ -40,7 +40,7 @@ facebook\.com [Twitter] rien= -t\.co +^t\.co twitter\.com [Mastodon] diff --git a/www/plugins-dist/statistiques/paquet.xml b/www/plugins-dist/statistiques/paquet.xml index 18da9b3d..92070fd5 100644 --- a/www/plugins-dist/statistiques/paquet.xml +++ b/www/plugins-dist/statistiques/paquet.xml @@ -1,7 +1,7 @@ - \ No newline at end of file +
diff --git a/www/prive/formulaires/editer_auteur.php b/www/prive/formulaires/editer_auteur.php index 4101f0a4..bd4efd2c 100644 --- a/www/prive/formulaires/editer_auteur.php +++ b/www/prive/formulaires/editer_auteur.php @@ -434,9 +434,21 @@ function auteur_regenerer_identifiants($id_auteur, $notifier=true, $contexte = a ); // on merge avec les champs fournit en appel, qui sont passes au modele de notification donc $contexte = array_merge($contexte, $c); + // si pas de langue explicitement demandee, prendre celle de l'auteur si on la connait, ou a defaut celle du site + // plutot que celle de l'admin qui vient de cliquer sur le bouton + if (!isset($contexte['lang']) or !$contexte['lang']) { + if (isset($row['lang']) and $row['lang']) { + $contexte['lang'] = $row['lang']; + } + else { + $contexte['lang'] = $GLOBALS['meta']['langue_site']; + } + } + lang_select($contexte['lang']); $message = recuperer_fond($fond, $contexte); include_spip("inc/notifications"); notifications_envoyer_mails($row['email'],$message); + lang_select(); return $row['email']; } @@ -446,4 +458,4 @@ function auteur_regenerer_identifiants($id_auteur, $notifier=true, $contexte = a } return ''; -} \ No newline at end of file +} diff --git a/www/svn.revision b/www/svn.revision index 63358a16..87e6d25b 100644 --- a/www/svn.revision +++ b/www/svn.revision @@ -1,10 +1,10 @@ -Origine: svn://trac.rezo.net/spip/tags/spip-3.2.3 -Revision: 24211 -Dernier commit: 2019-01-21 15:10:02 +0100 +Origine: svn://trac.rezo.net/spip/tags/spip-3.2.4 +Revision: 24285 +Dernier commit: 2019-04-08 14:28:14 +0200 -svn://trac.rezo.net/spip/tags/spip-3.2.3 -24211 -2019-01-21 15:10:02 +0100 +svn://trac.rezo.net/spip/tags/spip-3.2.4 +24285 +2019-04-08 14:28:14 +0200 \ No newline at end of file -- 2.20.1