Changements entre 2.1.26 et 2.1.27

Fichiers du core

49 fichiers impactés :
-  CHANGELOG.txt
-  ecrire/action/editer_article.php
-  ecrire/balise/url_.php
-  ecrire/base/dump.php
-  ecrire/configuration/reducteur.php
-  ecrire/exec/articles_forum.php
-  ecrire/exec/controle_forum.php
-  ecrire/inc_version.php
-  ecrire/inc/article_select.php
-  ecrire/inc/auth.php
-  ecrire/inc/autoriser.php
-  ecrire/inc/bandeau.php
-  ecrire/inc/charger_plugin.php
-  ecrire/inc/charsets.php
-  ecrire/inc/distant.php
-  ecrire/inc/envoyer_mail.php
-  ecrire/inc/filtres_images_lib_mini.php
-  ecrire/inc/filtres.php
-  ecrire/inc/forum.php
-  ecrire/inc/instituer_auteur.php
-  ecrire/inc/lang_liste.php
-  ecrire/inc/lien.php
-  ecrire/inc/meta.php
-  ecrire/inc/modifier.php
-  ecrire/inc/plugin.php
-  ecrire/inc/rubriques.php
-  ecrire/inc/session.php
-  ecrire/inc/texte.php
-  ecrire/inc/utils.php
-  ecrire/plugins/afficher_plugin.php
-  ecrire/public/aiguiller.php
-  ecrire/public/assembler.php
-  ecrire/public/balises.php
-  ecrire/public/boucles.php
-  ecrire/public/cacher.php
-  ecrire/public/compiler.php
-  ecrire/public/composer.php
-  ecrire/public/phraser_html.php
-  ecrire/public/references.php
-  ecrire/req/mysql.php
-  prive/javascript/layer.js
-  prive/rss_fonctions.php
-  prive/rss/forums_interne.html
-  prive/rss/forums_prop.html
-  prive/rss/forums_public.html
-  prive/rss/forums_spam.html
-  prive/rss/forums_vide.html
-  prive/rss/forums.html
-  squelettes-dist/robots.txt.html

7 tickets fermés :
#2904, #3187, #3203, #3221, #3233, #3260, #3264

révision 21269
prive/rss_fonctions.php
prive/rss/forums_interne.html
prive/rss/forums_vide.html
prive/rss/forums_public.html
prive/rss/forums.html
prive/rss/forums_prop.html
prive/rss/forums_spam.html

on trainait une erreur dans ces flux depuis 5 ans, du coup en réparant je me rends compte qu’il manquait un include pour que le filtre |generer_url_forum_parent fonctionne.
Ferme le ticket #3187

révisions 21324, 21326
ecrire/balise/url_.php

Contrairement à ce qu’il affirmait, r14473 n’évacuait pas les entités XML dans les #URL_ avec étoile, mais provoquait une erreur de compilation.

révision 21325
ecrire/inc/lien.php

Correction de http://article.gmane.org/gmane.comp.web.spip.devel/65118 : une URL dans un tableau à la SPIP fusionnait à tort la ligne suivante parce que le signe "|" était retiré en amont comme faisant partie de l’auto-lien à produire. On rajoute ce signe comme caractère ne pouvant terminer une URL.

révision 21539
ecrire/inc/autoriser.php

le filtrage /auteur du statut de previsu introduit par r21500 n’etait pas pris en compte dans autoriser_previsualiser_dist() ce qui ne rendait plus visible le lien de prévisu sur les articles en cours de redaction.

révisions 21327, 21328, 21329
ecrire/inc/distant.php
ecrire/public/aiguiller.php

La meta ’adresse_site’ n’étant pas totalement fiable, on blinde le refus de redirection et on informe de ce qu’il fait dans le log.

révision 21335
ecrire/inc/filtres.php

La fonction recup_date interprétait tous les formats sauf l’ICS contrairement aux apparences.

révisions 21371, 21372, 21373, 21376, 21377
ecrire/inc/filtres.php
ecrire/public/references.php

Nouveau filtre |set :
|setx va enregistrer la valeur dans x et vider, et |setx,continue enregistre et affiche la valeur
Nouveau filtre |debug :
logue la valeur qu’on lui passe dans debug.log, et l’affiche en direct si on est webmestre ; le parametre eventuel permet de savoir ce qu’on debug
[(#TRUC|debugavant|calcul|debugapres|calculs...)] affichera explicitement ’avant’ et ’apres’

révision 21383
ecrire/action/editer_article.php

réparer le fait qu’on passe un article en statut proposé lorsqu’un auteur tente de le déplacer dans une rubrique sur laquelle il n’a pas les droits
Ferme le ticket #3221

révision 21393
ecrire/public/assembler.php
ecrire/public/cacher.php

Depuis toujours, SPIP ne respectait pas le RFC de HTTP/1.1 qui stipule qu’une requête HEAD doit retourner les mêmes en-têtes HTTP que la requête GET sur la même ressource : dans le cas d’une requête HEAD, SPIP considère qu’il ne faut pas perdre de temps avec le calcul du corps et ne renvoyait rien du tout, ce qui conduit PHP à rajouter d’autorité le Content-Type par défaut, "text/hmtl". C’est particulièrement gênant lorsqu’on lui soumet l’URL d’un flux RSS pour vérifier que c’en est bien un : la réponse est erronément négative.
Curieusement, SPIP consulte quand même le cache pour savoir si la page existe, pour finalement ignorer cette recherche dans le cas de HEAD. On profite de ce calcul pour à présent retourner les en-têtes HTTP qui se trouvent en cache, même s’il est périmé. Pour le cas où le cache est vide, on limite l’irrespect du RFC en envoyant un statut "204 No Content", suggérant qu’on a rien à dire, mais ça n’empêchera l’envoi d’un Content-Type arbitraire. Ca montre au passage que l’absence de typologie sur les squelettes est vraiment un problème.

révision 21407
ecrire/inc/distant.php

utiliser _COPIE_LOCALE_MAX_SIZE si on ne veut pas tronquer des images distantes.

révision 21408
ecrire/public/phraser_html.php

Un warning légitime dans le cas d’un squelette mal écrit ; on évacue.

révision 21423
ecrire/inc/filtres.php
ecrire/public/balises.php

Lorsqu’on passe un tableau comme premier argument de la balise #INCLURE (par #ARRAY, #ENV ou autre), on provoque des Warning PHP car le compilateur produit un appel direct à Find_in_path qui suppose que son argument est une chaîne. L’idée qu’on puisse inclure en bloc une liste de fichiers était déjà présente dans la fonction "charge_script" introduire par r9342, mais qui ne semble plus utilisée. Moyennant une petite adaptation pour ne pas casser une compatibilité pourtant improbable, on utilise cette fonction dans le code produit pour la balise #INCLURE, qui accepte donc maintenant un tableau comme premier argument, et concatène alors les fichiers mentionnés plutôt que de déclencher un Warning.

révisions 21430, 21581
ecrire/configuration/reducteur.php
ecrire/inc/filtres_images_lib_mini.php

Corriger l’utilisation de la librairie graphique Imagick en PHP5. on accepte évidemment également la version php4 d’imagick.

révision 21437
ecrire/public/composer.php

On supprime les modèles avant l’appel de propre qui ajoutait le titre du doc dans un strong.
On utilise pour ce faire la fonction supprimer_img qui malgré son nom supprimer les modèles img, doc et emb.
Les autres modèles ne sont pas concernés et peuvent encore générer ce type d’erreur. Nénamoins il est prévu d’étendre la fonction supprimer_img.

révision 21449
ecrire/inc/auth.php
ecrire/inc/article_select.php

corriger l’utilisation de l’autorisation liée à la constante _STATUT_AUTEUR_RUBRIQUE.
Ferme le ticket #2904

révision 21489
ecrire/inc/rubriques.php
ecrire/public/cacher.php

ne pas dévoiler du contenu post-daté par erreur.
La mise à jour de la date du prochain article post-datés se faisait à 2 endroits :
-  lorsqu’on vérifiait la validité d’un cache existant
-  en fin de hit
En conséquence, si on demandait un article A post-daté futur qui n’avait aucun cache alors qu’un autre article B post-daté venait d’être publié, la mise à jour de la date du prochain article post-datés ne se faisait qu’en fin de hit, donc après avoir affiché l’article A, ce qui est une erreur.
On apporte les corrections suivantes :
-  dans la fonction cache_valide() on vérifie systématiquement si il faut mettre date_prochain_postdate a jour, même si on a pas de cache valide, puisque la meta va conditionner ce qu’on va mettre dans le cache, justement
-  on appelle calculer_prochain_postdate() avec le $check=true pour publier éventuellement les rubriques concernées
-  dans la fonction calculer_prochain_postdate() on met systématiquement à jour la meta derniere_modif si jamais on modifie date_prochain_postdate

Ferme le ticket #3203

révision 21538
ecrire/inc/charger_plugin.php

Changement de spip-contrib en contrib.spip dans le gestionnaire de plug
Ferme le ticket #3264

révision 21547
ecrire/exec/controle_forum.php
ecrire/inc/forum.php

Lorsque r11911 a ajouté la visualisation des docs joints à un message de forum dans le script "controle_forum", il ne l’a pas fait pour sa version réduite au forum d’un seul article, "articles_forum", ce qui fait qu’on peut valider un message de forum sans s’apercevoir qu’il y a un doc joint.
On isole dans une fonction le code introduit pour qu’il profite au deux cas. En prime, cette fonction admet un argument optionnel indiquant si l’accès au document est autorisé (True par défaut). S’il ne l’est pas, le nom du fichier est affiché, mais n’est plus un lien vers son URL.

révision 21551
ecrire/inc/bandeau.php

Quand on supprimait tous les boutons du bandeau de l’espace privé on obtenait une division par 0. On l’évite à présent, mais on simplifie aussi ce bout code qui autrement faisait une division par 1 et une boucle inutile.

révision 21572
ecrire/req/mysql.php

Tenir compte dans les déclarations de tables SQL des index avec une longueur explicite : ne pas faire échouer l’analyse de la déclaration, et ignorer la longueur dont SPIP n’a que faire.
Ferme le ticket #3260

révision 21782
ecrire/inc/instituer_auteur.php

Lorsqu’on crée un auteur pour être ajouté à ceux d’un article, l’index "id_auteur" vaut "oui" alors que la fonction "autoriser" s’attend à un nombre ou un tableau pour son 4e argument, d’où un "illegal Offset" apparaissant systématiquement.

révision 21818
ecrire/inc/session.php

La globale "visiteur_session" doit être initialisée au tableau vide et non à la chaîne vide, sinon on se prend un avertissemnent "Illegal string offset" dans les squelettes l’utilisant sur un visiteur non authentifié.

révision 21824
ecrire/public/compiler.php

Lorsqu’on utilise le critère doublon en mode nié, il n’y a pas de mémorisation à faire, et donc le code qui la prépare dans le cas normal n’a pas à être inséré car il ne sert à rien. Optimisation epsilonesque en soi, mais qui ouvre la voie à la détection de corps de boucles vide non vues sinon.

révision 21825
ecrire/public/boucles.php

Contrairement à ce qu’affirme la documentation de SPIP sur le critère Tout, celui-ci n’était pas disponible pour la boucle ARTICLES, probablement parce la description qui en est donnée le rend redondant avec le critère "statut=publie". Du coup on l’introduit avec la même sémantique que pour les rubriques : aucune restriction.

révision 21881
ecrire/inc/plugin.php
ecrire/inc/meta.php

Erreur de stratégie dans l’activation des plugins. Ce n’est pas parce que le serveur SQL est indisponible, et donc ne permet pas de sauver la meta "plugin", qu’il faut renoncer à activer ceux-ci. Cette stratégie empêche un plugin de surcharger les premières étapes de l’installation, et peut avoir des effets pervers si le serveur est indisponible provisoirement (par exemple des accès restreints qui ne seraient plus activés).
Après nettoyage du code, il apparaît que la raison pour laquelle on abandonnait tout si le serveur SQL était indisponible était que la fonction effacer_meta, disymétriquement à ecrire_meta, ne se protégait pas de cette situation au lieu de faire le travail a minima (affectation de la globale PHP quand même et retour à l’appelant). On aligne donc cette fonction sur ecrire_meta, ce qui permet de créer les fichiers tmp/*plug* etc en faisant sauter le test de disponibilité du serveur dans inc/plugin.

révision 21893
ecrire/plugins/afficher_plugin.php

Depuis le début semble-t-il, le panneau des plugins activés appelait "image_reduire" dérogatoirement, ce qui empêchait d’afficher les icones en l’absence de GD et consorts.

révisions 21735, 21885, 21887
prive/javascript/layer.js

bugfix sur le selecteur ajax de rubriques quand la page contient plusieurs input id_parent
Ferme le ticket #3233

révision 21901
ecrire/inc/distant.php

Erreur dans l’authentification quand on va cherchre un document distant en https: le codage Base64 soit s’appliquer aux identifiants bruts, non à leur version urlencodée qui n’est nécessaire qu’en cas de Proxy authentifiant. Evidemment le bug ne se voyait que pour un identifiant contenant au moins 1 caractère traité par urlencode.

révision 21752
ecrire/base/dump.php

Un bug serieux sur la sauvegarde : lors de l’insertion on ne comptait pas sur la table destination mais sur la table source, ce qui entrainait systematiquement une double insertion (une fois en multi puis une fois un par un)
Pouvait provoquer une erreur avec abandon qui manquait de log et n’etait pas signale dans le status. On corrige donc les conséquences d’une telle erreur.

révision 21903
ecrire/inc/lang_liste.php

nissart mistralien

révisions 21941, 21942, 21943, 21944
ecrire/req/mysql.php
ecrire/inc/utils.php
ecrire/inc/charsets.php
ecrire/inc/texte.php
ecrire/inc/modifier.php

gestion des emoji avec MySQL ================
le charset ’utf8’ de MySQL ne contient pas l’ensemble de l’UTF-8, mais seulement les caractères codés sur 1, 2, ou 3 bytes ; pour contourner ce problème, on pourrait adopter le charset ’utf8mb4’, mais c’est difficile à faire, et ça implique de revoir la structure de la base (notamment les VARCHAR 255 ne passent plus, car 255*4 > 1000)
la solution adoptée ici est d’échapper les caractères de 4 bytes sous leur forme unicode ; on le fait au niveau de req/mysql car ce problème touche mysql seulement
pour activer ce fonctionnement, il faut pour l’instant ajouter dans mes_options la ligne suivante : define(’_MYSQL_NOPLANES’, true) ;

révision 21952
ecrire/req/mysql.php

Limiter l’impact d’un GoneAway Mysql lors de longues requetes PHP
-  Si un traitement de page est long et implique plusieurs requetes SQL, Mysql peut retourner une erreur 2006 (Gone Away) pour la requete en cours et pour toutes les autres qui vont suivre dans le même processus
-  Pour limiter l’impact d’un tel blocage, on relance une connexion Mysql vierge
Parmi les cas d’usages on peut noter ceux qui traitent en masse les données du site pour une indexation annexe

révision 21956
squelettes-dist/robots.txt.html

autoriser la lecture des css pour l’évalution du site en "mobile friendly" - https://google.com/webmasters/tools/mobile-friendly/

révision 21987
ecrire/inc/envoyer_mail.php

pas mal de bugs dans les mails quand on veut faire soi-meme son from et son message-id

révision 21994
squelettes-dist/robots.txt.html

un crawl-delay à 1s pour éviter de se faire plomber par les bots crawlers

révision 22002
ecrire/exec/articles_forum.php

Rajouter le parametre id_rubrique dans l’URL du suivi du forum public d’un article, sinon le lien fabriqué par la page RSS forums_public a id_rubrique=0 dans sa query-string et on atterrit sur la page donnant tous les messages du site, pas ceux du seul secteur.

révisions 22100, 22101
CHANGELOG.txt
ecrire/inc_version.php

SPIP 2.1.27

Auteur Committo, Ergo Sum., denisb Publié le : Mis à jour : 15/08/21