Problème sur les articles post-datés #3203

Closed
opened 9 years ago by miros · 2 comments
miros commented 9 years ago

Bonjour,

Le problème constaté :

  • La fonctionnalité « Ne pas publier les articles avant la date de publication fixée » est active.
  • Un article a été publié (le 27/03/14) avec comme date de publication le 02/04/14 à 0h01.
  • Le 27/03/14, aucun problème, l'article est bien en attente.
  • Le 28/03/14, une personne me signale que l'article est en ligne.

A noter qu'un problème similaire avait été signalé puis fermé (http://core.spip.org/issues/2902).

Après de nombreuses recherches, j'ai trouvé comment reproduire ce problème.

Cette procédure fonctionne sous SPIP 2.1.26 ainsi que sous SPIP 3.0.16 (sans plugins additionnels) :

a) Dans la configuration de SPIP, l'option "Ne pas publier les articles avant la date de publication fixée" est cochée.

b) Création de l'article B post-daté à la date N à 13h55 (le statut de l'article est : publié).

c) Création de l’article A post-daté à la date N à 14h00 (le statut de l'article est : publié).

d) A la date N à 13h52, on tente de consulter l'article A sur le site public en étant authentifié. Sur le site public on ne peut pas visualiser l'article A. On ne consulte volontairement pas l'article B.

e) A la date N à 13h56, on consulte l'article A sans être authentifié. L'article A est visible sur le site public. On ne consulte volontairement pas l'article B.

f) A la date N à 13h59, on tente de consulter l'article A sans être authentifié (avec &tt=1 pour forcer le calcul de la page). Sur le site public on ne peut pas visualiser l'article A.

g) A la date N à 14h02, l'article A et l’article B sont accessibles sur le site public.

Le problème provient du fait qu'à l'étape e) SPIP actualise bien 'calculer_prochain_postdate' (dans ecrire/public.php), mais après l'affichage de la page. Aussi, la page affichée se base sur l'ancienne valeur de 'calculer_prochain_postdate' (celle de l'article B).

Exemple de solution :
Si dans ecrire/public.php, on met en commentaire le code relatif à 'date_prochain_postdate' et que, par exemple, l’on place le code suivant juste avant « Charger l'aiguilleur des traitements derogatoires » (je ne sais pas si c’est le meilleur emplacement), alors j’ai constaté que le problème disparaît :

if (!((_request('var_mode') == 'debug') OR $tableau_des_temps)){
    if (isset($GLOBALS['meta']['date_prochain_postdate'])
    AND $GLOBALS['meta']['date_prochain_postdate'] <= time()) {
        include_spip('inc/rubriques');
        calculer_prochain_postdate(true);
    }
}

Cordialement
Equipement

Bonjour, Le problème constaté : - La fonctionnalité « Ne pas publier les articles avant la date de publication fixée » est active. - Un article a été publié (le 27/03/14) avec comme date de publication le 02/04/14 à 0h01. - Le 27/03/14, aucun problème, l'article est bien en attente. - Le 28/03/14, une personne me signale que l'article est en ligne. A noter qu'un problème similaire avait été signalé puis fermé (http://core.spip.org/issues/2902). Après de nombreuses recherches, j'ai trouvé comment reproduire ce problème. Cette procédure fonctionne sous SPIP 2.1.26 ainsi que sous SPIP 3.0.16 (sans plugins additionnels) : a) Dans la configuration de SPIP, l'option "Ne pas publier les articles avant la date de publication fixée" est cochée. b) Création de l'article B post-daté à la date N à 13h55 (le statut de l'article est : publié). c) Création de l’article A post-daté à la date N à 14h00 (le statut de l'article est : publié). d) A la date N à 13h52, on tente de consulter l'article A sur le site public en étant authentifié. Sur le site public on ne peut pas visualiser l'article A. On ne consulte volontairement pas l'article B. e) A la date N à 13h56, on consulte l'article A sans être authentifié. L'article A est visible sur le site public. On ne consulte volontairement pas l'article B. f) A la date N à 13h59, on tente de consulter l'article A sans être authentifié (avec &tt=1 pour forcer le calcul de la page). Sur le site public on ne peut pas visualiser l'article A. g) A la date N à 14h02, l'article A et l’article B sont accessibles sur le site public. Le problème provient du fait qu'à l'étape e) SPIP actualise bien 'calculer_prochain_postdate' (dans ecrire/public.php), mais après l'affichage de la page. Aussi, la page affichée se base sur l'ancienne valeur de 'calculer_prochain_postdate' (celle de l'article B). Exemple de solution : Si dans ecrire/public.php, on met en commentaire le code relatif à 'date_prochain_postdate' et que, par exemple, l’on place le code suivant juste avant « Charger l'aiguilleur des traitements derogatoires » (je ne sais pas si c’est le meilleur emplacement), alors j’ai constaté que le problème disparaît : <pre> if (!((_request('var_mode') == 'debug') OR $tableau_des_temps)){ if (isset($GLOBALS['meta']['date_prochain_postdate']) AND $GLOBALS['meta']['date_prochain_postdate'] <= time()) { include_spip('inc/rubriques'); calculer_prochain_postdate(true); } } </pre> Cordialement Equipement
Poster

Hello, juste un +1, car j'ai eu le cas sur un site SPIP récent, les articles post-datés étaient publiés... par instinct j'ai recalculé la page et tout est rentré dans l'ordre, mais il était trop tard pour investiguer. Si tu peux reproduire c'est 90% du job qui est fait \o/

Hello, juste un +1, car j'ai eu le cas sur un site SPIP récent, les articles post-datés étaient publiés... par instinct j'ai recalculé la page et tout est rentré dans l'ordre, mais il était trop tard pour investiguer. Si tu peux reproduire c'est 90% du job qui est fait \o/
Owner

Statut changé à Fermé

**Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.