Mauvais résultat avec `|affdate{'Y-m'}` si pas de jour définie #5426

Closed
opened 3 months ago by b_b · 3 comments
b_b commented 3 months ago
Owner

Dans le même style que #4931 je tombe sur un cas où le filtre renvoie une valeur erronée.

Squelette de test :

#SET{archives,#ENV{archives}|affdate{'Y-m'}}

[<h2>env (#ENV{archives})</h2>]
[<h2>get (#GET{archives})</h2>]

Si on passe archives=2022-12 dans l'url on obtient :

env 2022-12
get 2022-11

En y regardant de plus prêt quand on passe ici dans le code https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres_dates.php#L672 $jour est récupéré depuis $date_array et vaut donc '' ce génère un time de 1669766400 alors que si on passe bien un jour on a un time de 1671753600.

Au passage, quand on passe ici dans le code https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres_dates.php#L527 $jour vaut '' puis quand on passe dans if ($jourth = _T('date_jnum' . $jour)) { cela génère une erreur dans la trad et celle-ci est assignée à $jour ce qui donne "<span class='debug-traduction-erreur'>date_jnum</span>".

Testé sur le trunk et en 4.1.

Dans le même style que #4931 je tombe sur un cas où le filtre renvoie une valeur erronée. Squelette de test : ``` #SET{archives,#ENV{archives}|affdate{'Y-m'}} [<h2>env (#ENV{archives})</h2>] [<h2>get (#GET{archives})</h2>] ``` Si on passe `archives=2022-12` dans l'url on obtient : ``` env 2022-12 get 2022-11 ``` En y regardant de plus prêt quand on passe ici dans le code https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres_dates.php#L672 `$jour` est récupéré depuis `$date_array` et vaut donc `''` ce génère un time de `1669766400` alors que si on passe bien un jour on a un time de `1671753600`. Au passage, quand on passe ici dans le code https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres_dates.php#L527 `$jour` vaut `''` puis quand on passe dans `if ($jourth = _T('date_jnum' . $jour)) {` cela génère une erreur dans la trad et celle-ci est assignée à `$jour` ce qui donne `"<span class='debug-traduction-erreur'>date_jnum</span>"`. Testé sur le trunk et en 4.1.
b_b added the
filtres et balises
bug
labels 3 months ago
b_b added this to the 4.1 milestone 3 months ago
Poster
Owner

Je me demande si le problème ne vient pas tout simplement du fait qu'en typant $jour en int on fait qu'il vaut 0 si c'est une chaîne vide, alors qu'il devrait dans ce cas valoir 1. D'après mes tests en modifiant le comportement ainsi la valeur retournée est bonne.

Exemple, en ajoutant un simple $jour = is_numeric($jour) ? $jour : 1; avant l'appel à mktime.

Je me demande si le problème ne vient pas tout simplement du fait qu'en typant `$jour` en int on fait qu'il vaut 0 si c'est une chaîne vide, alors qu'il devrait dans ce cas valoir 1. D'après mes tests en modifiant le comportement ainsi la valeur retournée est bonne. Exemple, en ajoutant un simple `$jour = is_numeric($jour) ? $jour : 1;` avant l'appel à mktime.
Owner

En ajoutant un var_dump($date_array, $time);
juste après le mktime, et avec le squelette de test

<h1>#SQUELETTE</h1>

#SET{archives,2022-12}

[<h2>get (#GET{archives})</h2>]
[<h2>|affdate (#GET{archives}|affdate{Y-m})</h2>]

en 3.2

/Users/cedric/Sites/localhost/fraich32/ecrire/inc/filtres_dates.php:646:
array (size=6)
  0 => string '2022' (length=4)
  1 => string '12' (length=2)
  2 => string '' (length=0)
  3 => int 0
  4 => int 0
  5 => int 0

/Users/cedric/Sites/localhost/fraich32/ecrire/inc/filtres_dates.php:646:int 1669849200

dbg/datejourvide.html
get 2022-12
|affdate 2022-12

en version dev

array(6) { [0]=> string(4) "2022" [1]=> string(2) "12" [2]=> string(0) "" [3]=> int(0) [4]=> int(0) [5]=> int(0) } int(1669766400)
dbg/datejourvide.html
get 2022-12
|affdate 2022-11

en version dev + patch proposé

array(6) { [0]=> string(4) "2022" [1]=> string(2) "12" [2]=> string(0) "" [3]=> int(0) [4]=> int(0) [5]=> int(0) } int(1669849200)
dbg/datejourvide.html
get 2022-12
|affdate 2022-12

Donc je confirme la régression et le patch proposé

En ajoutant un `var_dump($date_array, $time);` juste après le mktime, et avec le squelette de test ``` <h1>#SQUELETTE</h1> #SET{archives,2022-12} [<h2>get (#GET{archives})</h2>] [<h2>|affdate (#GET{archives}|affdate{Y-m})</h2>] ``` ### en 3.2 ``` /Users/cedric/Sites/localhost/fraich32/ecrire/inc/filtres_dates.php:646: array (size=6) 0 => string '2022' (length=4) 1 => string '12' (length=2) 2 => string '' (length=0) 3 => int 0 4 => int 0 5 => int 0 /Users/cedric/Sites/localhost/fraich32/ecrire/inc/filtres_dates.php:646:int 1669849200 dbg/datejourvide.html get 2022-12 |affdate 2022-12 ``` ### en version dev ``` array(6) { [0]=> string(4) "2022" [1]=> string(2) "12" [2]=> string(0) "" [3]=> int(0) [4]=> int(0) [5]=> int(0) } int(1669766400) dbg/datejourvide.html get 2022-12 |affdate 2022-11 ``` ### en version dev + patch proposé ``` array(6) { [0]=> string(4) "2022" [1]=> string(2) "12" [2]=> string(0) "" [3]=> int(0) [4]=> int(0) [5]=> int(0) } int(1669849200) dbg/datejourvide.html get 2022-12 |affdate 2022-12 ``` Donc je confirme la régression et le patch proposé
Owner

Appliqué, reporté 4.2 et 4.1

Appliqué, reporté 4.2 et 4.1
marcimat closed this issue 1 week ago
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.