spip issueshttps://git.spip.net/spip/spip/-/issues2024-03-29T10:36:32+01:00https://git.spip.net/spip/spip/-/issues/5896#INTRODUCTION{nombre} ne coupe pas quand il y a un descriptif est-ce normal ??2024-03-29T10:36:32+01:00JO#INTRODUCTION{nombre} ne coupe pas quand il y a un descriptif est-ce normal ??Bonjour je suis en SPIP 4.2.10,
J'utilise dans mes squelettes la balise #INTRODUCTION{150} pour obtenir une introduction pas trop longue.
Ça marchait bien mais je me suis aperçu qu'en mettant un descriptif (pour une rubrique par exemple...Bonjour je suis en SPIP 4.2.10,
J'utilise dans mes squelettes la balise #INTRODUCTION{150} pour obtenir une introduction pas trop longue.
Ça marchait bien mais je me suis aperçu qu'en mettant un descriptif (pour une rubrique par exemple) la balise #INTRODUCTION{150} ne coupait rien du tout ! Est-ce un comportement normal ? Car je ne l'avais pas compris dans la doc !
Le code responsable est ici : https://git.spip.net/spip/spip/-/blob/master/ecrire/public/fonctions.php?ref_type=heads#L58
```
function filtre_introduction_dist($descriptif, $texte, $longueur, $connect, $suite = null) {
// Si un descriptif est envoye, on l'utilise directement
if (strlen($descriptif)) {
return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect);
}
...
}
```https://git.spip.net/spip/spip/-/issues/5895README: ajouter un lien vers nos règles de contribution2024-03-27T15:05:42+01:00b_bREADME: ajouter un lien vers nos règles de contributionEncore récemment des personnes proches du projet découvraient https://www.spip.net/fr_article825.html#Regles-de-contribution
Amha, comme c'est fait dans pas mal de projets, on pourrait ajouter un lien vers cette page dans la section sui...Encore récemment des personnes proches du projet découvraient https://www.spip.net/fr_article825.html#Regles-de-contribution
Amha, comme c'est fait dans pas mal de projets, on pourrait ajouter un lien vers cette page dans la section suivante du README https://git.spip.net/spip/spip/-/blob/master/README.md?ref_type=heads&plain=1#L13 (ou dans une nouvelle section "Règles de contribution").4.2https://git.spip.net/spip/spip/-/issues/5894Les documents liés à un mot-clef n'apparaissent pas dans la liste "Liés à"2024-03-27T20:05:08+01:00ManuLes documents liés à un mot-clef n'apparaissent pas dans la liste "Liés à"La page ?exec=mots liste les mots-clefs et indique le nombre et le type d'objets liés.
La page ?exec=mot&id_mot=yy (où yy est un mot-clef attribué à des **documents**) n'affiche pas la liste des documents ayant ce mot clef ("Liés à :" (...La page ?exec=mots liste les mots-clefs et indique le nombre et le type d'objets liés.
La page ?exec=mot&id_mot=yy (où yy est un mot-clef attribué à des **documents**) n'affiche pas la liste des documents ayant ce mot clef ("Liés à :" (vide)
SPIP 4.2.8https://git.spip.net/spip/spip/-/issues/5893Ne pas afficher l'encart de "proposer à la publication" si on peut deja publier2024-03-27T11:01:51+01:00MaïeulNe pas afficher l'encart de "proposer à la publication" si on peut deja publierSujet connexe à #3408.
Si on a modifié les droits pour que n'importe qui puisse publier un article, il est incohérent de lui proposer de le soumettre à publication.
La modification pour reproduire le bug se situe ici https://git.spip.n...Sujet connexe à #3408.
Si on a modifié les droits pour que n'importe qui puisse publier un article, il est incohérent de lui proposer de le soumettre à publication.
La modification pour reproduire le bug se situe ici https://git.spip.net/spip/spip/-/issues/3408#note_128102
![image](/uploads/dcab9be155653a1f18ce93e163baf833/image.png)
PR suit4.2https://git.spip.net/spip/spip/-/issues/5892A l'installation ne pas générer un `connect.php` sans indication du charset e...2024-03-26T12:45:42+01:00cy.alterncy.altern@gmail.comA l'installation ne pas générer un `connect.php` sans indication du charset en 9ème paramètreSous Apache sous Windows + MariaDB 10.8 ou 10.10, à l'installation le fichier `connect.php` est généré sans le `utf8` comme 9ème paramètre alors que c'est le charset qui sera utilisé : cela génère ensuite des enregistrements en BDD avec ...Sous Apache sous Windows + MariaDB 10.8 ou 10.10, à l'installation le fichier `connect.php` est généré sans le `utf8` comme 9ème paramètre alors que c'est le charset qui sera utilisé : cela génère ensuite des enregistrements en BDD avec les caractères spéciaux foirés.
La cause du problème est que l'appel de `spip_mysql_get_charset('utf8')` dans l'étape 3 de l'installation (https://git.spip.net/spip/spip/-/blob/master/ecrire/install/etape_3.php?ref_type=heads#L91) retourne `null` à la place de 'utf8'
Ce retour est du au résultat de la requête
```
SHOW CHARACTER SET LIKE 'utf8';
```
de https://git.spip.net/spip/spip/-/blob/master/ecrire/base/abstract_sql.php?ref_type=heads#L140
=> les "CHARACTER" UTF-8 connus en MariaDB 10.8 ou 10.10 sous Windows sont : `utf8mb3` et `utf8mb4` mais pas `utf8` "basique" (contrairement à MariaDB 10 sous Linux par ex)4.2https://git.spip.net/spip/spip/-/issues/5891htaccess - Mettre en place Cache-Control2024-03-24T21:37:42+01:00nicodnicod@lerebooteux.frhtaccess - Mettre en place Cache-ControlC'est un retour que me font des outils d'analyse de perf en ligne (yellowlab.tools, pagespeed.web.dev) : les ressources statiques (images, css...) ne disposent pas d'un cache.
La préconisation est de mettre en place des headers `Cac...C'est un retour que me font des outils d'analyse de perf en ligne (yellowlab.tools, pagespeed.web.dev) : les ressources statiques (images, css...) ne disposent pas d'un cache.
La préconisation est de mettre en place des headers `Cache-Control` par type de fichiers.
Dans le HTML5 Boilerplate il font ça comme ça :
https://github.com/h5bp/server-configs-apache/blob/f61c276fc99d21e63e941ee46841c18f1afc7a89/dist/.htaccess#L1151
Qu'en pensez vous ?4.2https://git.spip.net/spip/spip/-/issues/5890Remplacer les appels à base/serial ou base/auxiliaires2024-03-23T21:25:35+01:00JamesRezoRemplacer les appels à base/serial ou base/auxiliairesFaire les changements suivants
```diff
- include_spip('base/serial');
+ include_spip('base/objets');
+ lister_tables_objets_sql();
```
```diff
- include_spip('base/auxiliaires');
+ include_spip('base/objets');
+ lister_tables_objets_s...Faire les changements suivants
```diff
- include_spip('base/serial');
+ include_spip('base/objets');
+ lister_tables_objets_sql();
```
```diff
- include_spip('base/auxiliaires');
+ include_spip('base/objets');
+ lister_tables_objets_sql();
```
et supprimer les 2 fichiers `ecrire/base/serial.php` et `ecrire/base/auxiliaires.php`
ça permettra de supprimer 2 `@todo` vieux de 11 ans :wink:5.0https://git.spip.net/spip/spip/-/issues/5889Problème de session sur action=menu_rubriques2024-03-20T20:46:13+01:00cerdiccedric@yterium.comProblème de session sur action=menu_rubriquesEn version 5.0-dev : dans l'espace privé le menu plan reste étrangement bloqué sur "Se connecter"
![Capture_d_écran_2024-03-20_à_14.02.12](/uploads/873b9d9f2e4c4a850eb96c33ec8143ac/Capture_d_écran_2024-03-20_à_14.02.12.png)
L'URL a...En version 5.0-dev : dans l'espace privé le menu plan reste étrangement bloqué sur "Se connecter"
![Capture_d_écran_2024-03-20_à_14.02.12](/uploads/873b9d9f2e4c4a850eb96c33ec8143ac/Capture_d_écran_2024-03-20_à_14.02.12.png)
L'URL appelée est de la forme `urlpublique.org/spip.php?action=menu_rubriques&date=1687339214`
En débugguant dans l'action
```
diff --git a/ecrire/action/menu_rubriques.php b/ecrire/action/menu_rubriques.php
index 9c049d7745..671e9cc053 100644
--- a/ecrire/action/menu_rubriques.php
+++ b/ecrire/action/menu_rubriques.php
@@ -36,6 +36,7 @@ function action_menu_rubriques_dist() {
// si pas acces a ecrire, pas acces au menu
// on renvoi un 401 qui fait echouer la requete ajax silencieusement
+ var_dump($GLOBALS['visiteur_session']);
if (!autoriser('ecrire')) {
$retour =
'<ul class="deroulant__sous-menu" data-profondeur="1">' .
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index a1ecf2542f..dfd27b540d 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -344,6 +344,7 @@ function autoriser_loger_dist(string $faire, string $type, $id, array $qui, arra
* @return bool true s'il a le droit, false sinon
**/
function autoriser_ecrire_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
+ var_dump($qui);
return isset($qui['statut']) && in_array($qui['statut'], ['0minirezo', '1comite']);
}
```
On voit que la session n'est pas disponible sur cette URL
![Capture_d_écran_2024-03-20_à_14.04.35](/uploads/f2362d057490611c7f4a0f7e16a4e664/Capture_d_écran_2024-03-20_à_14.04.35.png)
A contrario si je load l'URL`urlpublique.org/ecrire/?action=menu_rubriques&date=1687339214`
cette fois on a bien une session en arrivant dans l'action, et le menu apparait normalement
![Capture_d_écran_2024-03-20_à_14.06.36](/uploads/2d2a1f0edfde8d64264c4c8dde2b3dbc/Capture_d_écran_2024-03-20_à_14.06.36.png)4.2https://git.spip.net/spip/spip/-/issues/5888Bug sur `formulaires_editer_objet_charger()` lorsque `id_parent` est égale à `0`2024-03-20T11:30:29+01:00MaïeulBug sur `formulaires_editer_objet_charger()` lorsque `id_parent` est égale à `0``formulaires_editer_objet_charger()` : si `$id_parent` passé en
paramètre est égal à 0, alors il est renvoyé en contexte, au lien d'aller chercher la bonne valeur en base.
PR suit.`formulaires_editer_objet_charger()` : si `$id_parent` passé en
paramètre est égal à 0, alors il est renvoyé en contexte, au lien d'aller chercher la bonne valeur en base.
PR suit.https://git.spip.net/spip/spip/-/issues/5887Trier auteur 'nouveau' par date de demande de validation2024-03-19T20:00:11+01:00JLucTrier auteur 'nouveau' par date de demande de validationDans la liste des auteurs de statut 'nouveau' et donc en attente de validation, ce serait utile de pouvoir trier par date de (dernière) demande d'authentification.
Dans prive/objets∕liste.visiteur.html, je vois que
- la boucle affiche ...Dans la liste des auteurs de statut 'nouveau' et donc en attente de validation, ce serait utile de pouvoir trier par date de (dernière) demande d'authentification.
Dans prive/objets∕liste.visiteur.html, je vois que
- la boucle affiche avec le critère `{tri #ENV{par,multi nom},#GET{defaut_tri}}`
- avec (au dessus) :
```
[(#SET{defaut_tri,#ARRAY{
statut,1,
multi nom,1,
site,1,
points,-1
}})
```
- dans le cas `#ENV{statut} = nouveau`, la colonne a pour thead `<:info_inscription:>` et affiche `[(#MAJ|affdate)]`.
- il n'y a pas de #TRI sur le titre de cette colonne
Et donc pour mieux faire, il faudrait un #TRI (variable selon `#ENV{statut}`) sur la thead, et peut être que dans le lien qui ouvre cette page avec `&statut=nouveau`, il faudrait aussi `&par=maj`.
...4.2https://git.spip.net/spip/spip/-/issues/5886autoriser_preferencesmenus_configurer non définit par défaut2024-03-18T09:50:46+01:00JOautoriser_preferencesmenus_configurer non définit par défautBonjour,
En SPIP 4.2.10, j'ai un bug qui n'affiche pas le formulaire '#FORMULAIRE_CONFIGURER_PREFERENCES_MENUS' pour les rédacteurs alors qu'il s'affiche bien pour les administrateurs/webmestres.
J'ai réussi à m'en sortir en ajoutant :...Bonjour,
En SPIP 4.2.10, j'ai un bug qui n'affiche pas le formulaire '#FORMULAIRE_CONFIGURER_PREFERENCES_MENUS' pour les rédacteurs alors qu'il s'affiche bien pour les administrateurs/webmestres.
J'ai réussi à m'en sortir en ajoutant :
```
// forcer l'autorisation de voir le formulaire `#FORMULAIRE_CONFIGURER_PREFERENCES_MENUS` (bug SPIP ?)
// `exec=configurer_preferences`
function autoriser_preferencesmenus_configurer($faire, $type, $id, $qui, $opt) { return true; }
```
Est-ce normal ?
Je me sui aussi rendu compte qu'un :
```
function autoriser_configurerpreferences($faire, $type, $id, $qui, $opt) { return false; }
```
n'avait aucun effet car il n'y a pas de test d'autorisation du type `[(#AUTORISER{configurer,_preferences}|sinon_interdire_acces)]` dans le squelette `/prive/squelettes/contenu/configurer_preferences.html`
Est-ce voulu ? Car du coup impossible d'interdire l'accès avec le pipeline `autoriser` il faut forcément surcharger le squelette.4.2https://git.spip.net/spip/spip/-/issues/5885Passing null to parameter #1 ($string) of type string is deprecated en PHP 8....2024-03-14T12:45:38+01:00equipementPassing null to parameter #1 ($string) of type string is deprecated en PHP 8.2 / SPIP 4.2.10Bonjour,
La fonction formulaire_recherche (déconseillée mais qui existe) génère un 'Deprecated' en PHP 8.2 / SPIP 4.2.10 :
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated
in inc\presentation_mi...Bonjour,
La fonction formulaire_recherche (déconseillée mais qui existe) génère un 'Deprecated' en PHP 8.2 / SPIP 4.2.10 :
Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated
in inc\presentation_mini.php on line 283
Extrait de \ecrire\inc\presentation_mini.php :
`function formulaire_recherche($page, $complement = '') {
$recherche = _request('recherche');
$recherche_aff = entites_html($recherche);
if (!strlen($recherche)) {
...
`
La fonction _request de SPIP retourne 'null' s'il n'y a ni GET, ni POST et la fonction strlen de PHP génère alors un 'Deprecated'.
Cordialement
Equipement4.2https://git.spip.net/spip/spip/-/issues/5884Retourner une erreur explicite si `charger_fonction_url()` ne trouve pas de f...2024-03-12T22:54:39+01:00cy.alterncy.altern@gmail.comRetourner une erreur explicite si `charger_fonction_url()` ne trouve pas de fonction de génération d'URL correspondant au type configuréSPIP 4.2 : en cas de surcharge "incomplète" de `urls/propres.php` la fonction `charger_fonction_url()` peut se retrouver dans le cas où il n'y a pas de fonction de génération d'URL correspondant au type configuré (par ex le fichier de su...SPIP 4.2 : en cas de surcharge "incomplète" de `urls/propres.php` la fonction `charger_fonction_url()` peut se retrouver dans le cas où il n'y a pas de fonction de génération d'URL correspondant au type configuré (par ex le fichier de surcharge n'a pas de fonction `urls_propres_generer_url_objet()`) et donc à la fin du `switch` de https://git.spip.net/spip/spip/-/blob/4.2/ecrire/inc/utils.php?ref_type=heads#L1812 il retourne `''` ce qui fait planter la fonction qui l'a appelée (`urls_propres2_generer_url_objet_dist()` ou `urls_libres_generer_url_objet_dist()` ou `urls_propres_qs_generer_url_objet_dist()` )
Dans ce cas, pour éviter d'avoir l'erreur peu compréhensible de la fonction qui l'a appelé (`Call to undefined function ()`), il semblerait plus logique de lever une exception plutôt que retourner `''`.4.2https://git.spip.net/spip/spip/-/issues/5883autoriser_admintech_menu_dist n'est plus valable !2024-03-14T23:10:49+01:00JOautoriser_admintech_menu_dist n'est plus valable !Dans ecrire\inc\autoriser.php
`autoriser_admintech_menu_dist` n'est plus valable, du coup le menu s'affiche même si on a pas les permissions.
Il semblerait qu'il faille renommer cette fonction par `autoriser_adminmaintenir_menu_dist` e...Dans ecrire\inc\autoriser.php
`autoriser_admintech_menu_dist` n'est plus valable, du coup le menu s'affiche même si on a pas les permissions.
Il semblerait qu'il faille renommer cette fonction par `autoriser_adminmaintenir_menu_dist` en référence à
```
<menu nom="admin_maintenir" titre="titre_admin_tech" parent="menu_administration" icone="images/base-maintenance-16.png" action="admin_tech" />
```
qu'on retrouve dans `ecrire\paquet.xml`4.2https://git.spip.net/spip/spip/-/issues/5882Le surlignement des Referers ne marche pas2024-03-11T12:40:54+01:00RealETLe surlignement des Referers ne marche pasBonjour,
J'étais en train de tester le surlignement des mots dans le texte présents dans les referers.
Et ça ne marchait pas.
J'avais bien mis dans mon mes_options :
```
// https://www.spip.net/fr_article903.html#Surligner-la-requete-da...Bonjour,
J'étais en train de tester le surlignement des mots dans le texte présents dans les referers.
Et ça ne marchait pas.
J'avais bien mis dans mon mes_options :
```
// https://www.spip.net/fr_article903.html#Surligner-la-requete-dans-les-autres-pages
if (!defined('_SURLIGNE_RECHERCHE_REFERERS')) {
define('_SURLIGNE_RECHERCHE_REFERERS',true);
}
if (isset($_REQUEST['recherche'])) {
$_GET['var_recherche'] = $_REQUEST['recherche'];
}
```
Le surlignement marchait dans la page des résultats de recherche du site.
Mais pas dans une des pages en lien depuis les résultats de recherche.
J'ai tracé `inc/surligne.php` recevait une version tronquée du referer :
`http://spipmu4 localhost/spip php page recherche&recherche images`
Il manquait : les `.` dans le nom de domaine et les `=` dans la querystring.
Forcément, après, la regexp sur `[0] => ,http:\/\/spipmu4\.localhost,i [1] => ,recherche=([^&]+),i` ne pouvait pas trouver de correcpondance.
Le fautif : `inc/pipeline.php`, fonction `f_surligne` nettoyant un peu trop `$_SERVER['HTTP_REFERER']`
* - : `$_SERVER['HTTP_REFERER'] = preg_replace(',[^\w\,/#&;:-]+,', ' ', $_SERVER['HTTP_REFERER']);`
* + : `$_SERVER['HTTP_REFERER'] = preg_replace(',[^\w\,/#&;:-=\.]+,', ' ', $_SERVER['HTTP_REFERER']);`
Testé avec SPIP 4.2.10.
Ce ticket ne peut pas concerner SPIP 5 qui a supprimé cette fonctionnalité du core : https://git.spip.net/spip/spip/-/merge_requests/57024.2https://git.spip.net/spip/spip/-/issues/5881Autorisation d'édition trop générique dans les editer_liens2024-03-08T18:43:27+01:00RastaPopoulosrastapopoulos@spip.orgAutorisation d'édition trop générique dans les editer_liensIl manque une autorisation plus fine pour dire si on permet **d'ajouter** des liens ou pas. Mais en permettant toujours de retirer ceux existants.
Dans le form editer_liens (ou l'inclusion qui l'affiche), on peut passer editable=non. Sa...Il manque une autorisation plus fine pour dire si on permet **d'ajouter** des liens ou pas. Mais en permettant toujours de retirer ceux existants.
Dans le form editer_liens (ou l'inclusion qui l'affiche), on peut passer editable=non. Sauf que du coup ça affiche ou masque *tous* les boutons du formulaire. Et même si on laisse volontairement des boutons NON conditionnés par "editable" : SPIP les masque en CSS !
Or dans quasiment tous les cas de liaisons, à commencer par ceux existants comme les Mots, on veut permettre de différencier l'ajout et le retrait.
En effet, suivant une config généralement (et c'est le cas pour les Mots), on permet d'ajouter des liens vers des objets sur un autre (ajouter des mots sur un article SI configuré pour). Quand on **désactive** cette configuration, on doit continuer d'afficher les liens existants pour comprendre ce qui se passe, mais on doit permettre de les retirer, même si on peut pas en ajouter !
C'est exactement comme pour les pétitions etc : ça ne s'affiche plus sur les articles qui n'en ont pas, mais on peut voir ET supprimer quand yen a une.
J'autorise la liaison, je peux tout faire :
![liens_mots_config_oui](/uploads/62e12b60f3bae14d579efc16053f2c70/liens_mots_config_oui.jpg)
Je n'autorise pas la liaison, ça m'affiche quand même l'existant MAIS sans pouvoir retirer !
![liens_mots_config_non](/uploads/3249aa6d9c2ac3ee507ce58e2bf78e7b/liens_mots_config_non.jpg)
Deux solutions possibles :
- soit il faut arrêter de masquer tous les boutons en CSS quand "non_editable", mêmes ceux que les devs auraient choisis volontairement de laisser accessibles quand editable=oui : c'est le plus simple, et ça laisse le choix aux devs d'afficher ou pas ce qu'on veut
- soit, à part des tests sur "editable" qui resteraient pareils, il faut ajouter un test #AUTORISER avec une nouvelle autorisation dédiée pour le bouton "Ajouter une patate"4.2https://git.spip.net/spip/spip/-/issues/5880Impossible de se déconnecter avec le Navigateur DuckDuckGo sous Android2024-03-06T20:17:14+01:00toutiImpossible de se déconnecter avec le Navigateur DuckDuckGo sous AndroidSPIP v4.2.9 sans plugin
Avec le Navigateur DuckDuckGo play.google.com/web/store/apps/details?id=com.duckduckgo.mobile.android&hl=fr
sous android, (sans modifier les paramètres par défaut) il n'est pas possible de se déconnecter.
Voici ...SPIP v4.2.9 sans plugin
Avec le Navigateur DuckDuckGo play.google.com/web/store/apps/details?id=com.duckduckgo.mobile.android&hl=fr
sous android, (sans modifier les paramètres par défaut) il n'est pas possible de se déconnecter.
Voici la discussion sur le chat ainsi que les deux fichiers de LOG
- le fichier spip-OK.log a été créé en se déconnectant depuis un navigateur écran de bureau firefox (puis expurgé)
- le fichier spip-NOTOK.log a été créé en se déconnectant depuis un mobile avec la navigateur duckduckgo (puis expurgé)
ça viendrait du coupe feu de duckduckgo qui ne prend pas le jeton de déconnexion
[spip-OK.log](/uploads/5ec9b6c43aac835359883a89258e6f80/spip-OK.log)
[spip-NOTOK.log](/uploads/26ff76c8aa4b2b6b68f57c52f2e63fb6/spip-NOTOK.log)
[duckduckgo-deconnexion-chat.txt](/uploads/65a053401d1701bee58a1a02fd0bd979/duckduckgo-deconnexion-chat.txt)4.2https://git.spip.net/spip/spip/-/issues/5879fichier non trouvé prive/themes/spip/images/loader.svg2024-03-06T20:21:45+01:00toutifichier non trouvé prive/themes/spip/images/loader.svgfichier non trouvé prive/themes/spip/images/loader.svg
SPIP V4.2.9fichier non trouvé prive/themes/spip/images/loader.svg
SPIP V4.2.94.2https://git.spip.net/spip/spip/-/issues/5878Douple appel du pipeline trig_calculer_prochain_postdate2024-03-20T11:54:41+01:00cpol0Douple appel du pipeline trig_calculer_prochain_postdateBonjour,
je rencontre (parfois) un problème de race condition sur le pipeline `trig_calculer_prochain_postdate` qui peut se voir appeler 2X de suite si par hasard 2 requêtes utilisateurs arrivent en même temps sur le serveur.
edit: je ...Bonjour,
je rencontre (parfois) un problème de race condition sur le pipeline `trig_calculer_prochain_postdate` qui peut se voir appeler 2X de suite si par hasard 2 requêtes utilisateurs arrivent en même temps sur le serveur.
edit: je suis sur spip branche 4.1
Le point d'entrée est dans la fonction `cache_valide` avec le code suivant:
```
if (
isset($GLOBALS['meta']['post_dates'])
and $GLOBALS['meta']['post_dates'] == 'non'
and isset($GLOBALS['meta']['date_prochain_postdate'])
and $now > $GLOBALS['meta']['date_prochain_postdate']
) {
spip_log('Un article post-date invalide le cache');
include_spip('inc/rubriques');
calculer_prochain_postdate(true);
}
```
Puis dans la fonction `calculer_prochain_postdate` nous avons (je simplifie):
* un ou plusieurs appels à `publier_branche_rubrique`
* le déclenchement du pipeline `trig_calculer_prochain_postdate`
* la mise à jour de `GLOBALS['meta']['date_prochain_postdate']`
Ce que j'arrive à reproduire parfois, c'est :
* une 1ère requête tombe, je suis en plein traitement dans la fonction `monplugin_trig_calculer_prochain_postdate`
* une 2ème requête tombe:
* Et là, ma meta `GLOBALS['meta']['date_prochain_postdate']` n'a pas encore été mise à jour car l'autre thread est toujours dans le traitement du pipeline
* la condition dans `cache_valide` est vraie
* on réappelle `calculer_prochain_postdate`, qui lui même va réappeler `monplugin_trig_calculer_prochain_postdate`
* j'ai donc un double appel qui me provoque un bug, même si c'est particulier à ce que fait ma fonction.
Ceci dit, je suis partagé sur l'action à mener, notamment parce que ce pipeline n'est pas documenté. Donc déjà il faudrait trancher sur: "est ce que ce comportement est problématique ou pas". Si c'est assumé que oui, ça peut être appelé _n_ fois, alors ça reviendrait à l'écrire dans la doc quelque part et que c'est à l'utilisateur du pipeline de prendre ses précautions.
Personnellement, j'aurais tendance à dire que c'est un problème car fonctionnellement parlant, on ne voit pas bien pourquoi ce pipeline pourrait être déclenché plusieurs fois à cause d'un seul et unique post-datage. C'est contre-intuitif (enfin je trouve).
Du coup, je pense qu'il faudrait calculer la nouvelle post-date AVANT d'appeler le pipeline pour éviter cette race condition. Ce faisant, on prend néanmoins le risque que si dans un plugin quelqu'un utilise `$GLOBALS['meta']['date_prochain_postdate']`, on va lui casser son code...
Une dernière option qui ménage la chèvre et le choux serait de mettre un mutex sur `calculer_prochain_postdate`. Si le mutex est pris par un thread, il ne peut pas l''être par un second et dans ce cas là on passe notre tour et on laisse le 1er thread finir son exécution.
Mais je ne connais pas vraiment ce qui se passe pour les autres pipeline, est ce vraiment un cas unique propre à celui-ci? Comment sont gérer ces cas là dans SPIP de manière générale?
Merci à vous.
cpol04.2https://git.spip.net/spip/spip/-/issues/5876Petit décalage dans des liens avec |icone_horizontale qui se suivent2024-03-03T21:37:28+01:00nicodnicod@lerebooteux.frPetit décalage dans des liens avec |icone_horizontale qui se suiventExemple :
![image](https://git.spip.net/attachments/68e825a7-4839-4cbb-8ace-888d5dbead9a)
C'est une pétouille mais comme il y a un `flex: 1 1 auto;` l'icone a donc un `flex-shrink: 1`
Un `flex-shrink: 0` sur `.icone.horizontal...Exemple :
![image](https://git.spip.net/attachments/68e825a7-4839-4cbb-8ace-888d5dbead9a)
C'est une pétouille mais comme il y a un `flex: 1 1 auto;` l'icone a donc un `flex-shrink: 1`
Un `flex-shrink: 0` sur `.icone.horizontale .icone-image`résoud le problème.4.2