[spip-dev] "recalculer cette page" ne fonctionne plus

Repéré par marcimat et d'autres, et je confirme :

1) allons sur la page "article1.html", puis sur "article1.html?"
2) modifions le squelette article.html
3) sur "article1.html" cliquons sur "recalculer cette page"
4) revenons sur les deux pages "article1.html", et "article1.html?"

=> c'est "article1.html?" qui a été recalculé, et pas "article1.html"

Autrement dit "recalculer cette page" ne fonctionne plus car il
recalcule l'url *avec le ?*

-- Fil

C'est au niveau des rewrite-rule que ça coince.
Quand on trace la fonction assembler en mettant
spip_log("fond $fond uri " . $GLOBALS['REQUEST_URI']);

on a:

  fond article uri /spipnet/article3644.html?
  fond article uri /spipnet/article3644.html

Committo,Ergo:Sum

spip_log("fond $fond uri " . $GLOBALS['REQUEST_URI']);

on a:

fond article uri /spipnet/article3644.html?
fond article uri /spipnet/article3644.html

ben ça c'est normal vu que c'est pas la même page ; par contre ce qui
est pas normal c'est que quand on fait ?var_mode=calcul on aille
recalculer celui qui a un "?" alors qu'en fait c'est l'autre qu'on
veut recalculer

-- Fil

spip_log("fond $fond uri " . $GLOBALS['REQUEST_URI']);

on a:

fond article uri /spipnet/article3644.html?
fond article uri /spipnet/article3644.html

ben ça c'est normal vu que c'est pas la même page ;

C'est très discutable.

par contre ce qui
est pas normal c'est que quand on fait ?var_mode=calcul on aille
recalculer celui qui a un "?" alors qu'en fait c'est l'autre qu'on
veut recalculer

Ca oui, c'est un pb.
Dans public_assembler si on fait ça:

  $page = $fond .
    preg_replace(',\.[a-zA-Z0-9]*$,', '',
    preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));

ça identifie les 3 pages. Est-ce que ça pose d'autres problèmes ?

Committo,Ergo:Sum

       $page = $fond .
               preg_replace(',\.[a-zA-Z0-9]*$,', '',
               preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']));

ça identifie les 3 pages. Est-ce que ça pose d'autres problèmes ?

Hum... Ca risque pas de confondre les pages ?id_article=1 et ?id_article=2 ?

-- Fil

On est sur que de pas avoir le meme bug avec le & ?
ie que

domaine.org/?page=article&id_article=xx&var_mode=recalcul
ne recalcule pas
domaine.org/?page=article&id_article=xx&

?

Cédric

Non, car ce bout de code a seulement pour role de trouver le vrai nom du fond
("article" pour 'articleNNN' ou 'articleNNN?' ou 'articleNNN?var_mode...')
la prise en compte de la query_string intervenant ailleurs.

Committo,Ergo:Sum

Si page est explicité dans l'URL, il n'y a pas de pb.

Mais plus je regarde autour de code et plus je me dis qu'il est inutile.
Il n'y a plus qu'un seul appel direct à cette fonction, dans public.php,
et $fond y est défini clairement, au pire à "sommaire" (et au passage,
il donne un 3e argument alors que la fonction déclare 2 paramètres).
Le reste est du contexte, piqué dans $_GET et $_POST.
Je ne vois pas dans quelle occasion ça pourrait servir à présent.

Committo,Ergo:Sum

Ah si, c'est dans le cas des URL propres que le contexte peut être vide, et $fond ne vaut que "type_urls" à cause de:

RewriteRule ^[^\.]+(\.html)?$ spip.php?page=type_urls [QSA,E=url_propre:$0,L]

Committo,Ergo:Sum