Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2012-05-21 16:15:54

zeiram
Membre
Inscription : 2004-06-27
Site Web

2.4.3 et programmation de billets

Bonjour.

J'ai un souci depuis hier, et il commence à m'énerver. J'ai installé la version 2.4.3, et, depuis, plus un seul de mes billets programmés n'est mis automatiquement en ligne. Y a-t-il quelqu'un d'autre qui constate le même problème ?

En analysant ce qui se passe, il semble que j'ai un problème avec la méthode $con->in... Voici le bout de code de la classe dcBlog (méthode publishScheduledEntries) que cela concerne :

if (!empty($to_change))
{
	# --BEHAVIOR-- coreBeforeScheduledEntriesPublish
	$this->core->callBehavior('coreBeforeScheduledEntriesPublish',$this,$to_change);

	$strReq =
	'UPDATE '.$this->prefix.'post SET '.
	'post_status = 1 '.
	"WHERE blog_id = '".$this->con->escape($this->id)."' ".
	'AND post_id '.$this->con->in($to_change).' ';

	$this->con->execute($strReq);
	$this->triggerBlog();

Juste après l'appel au behaviour coreBeforeScheduledEntries, si j'affiche le contenu de la variable $to_change, j'ai bien les identifiants des deux billets à mettre en ligne. Par contre, la variable strReq est initialisée avec la valeur :

UPDATE dc2_post SET post_status = 1 WHERE blog_id = 'photoblog' AND post_id  IN ( 1)

Comme vous le voyez, au lieu de la liste des identifiants, il n'y a que la valeur 1... Z'avez une idée du pourquoi ?


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#2 2012-05-21 19:13:43

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : 2.4.3 et programmation de billets

Bon... j'ai trouvé une piste... Dans dcBlog->publishScheduledEntries, la variable $to_change est définie comme étant une instance de ArrayObject. Or, la méthode $con->in teste si le paramètre est un tableau avec is_array... qui retourne false dans le cas d'un ArrayObject. :-(

Maintenant, ce que je ne comprends pas, c'est que ces parties de code ne semblent pas avoir évolué depuis fort longtemps. Je me demande donc pourquoi c'est brusquement tombé en panne.


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#3 2012-05-21 19:26:12

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : 2.4.3 et programmation de billets

J'ai mis en place un pis-aller pour mon souci : dans le fichier inc/core/class.dc.blog.php, modifier la ligne :

		$to_change = new ArrayObject;

par :

		$to_change = array();

Je n'ai par contre pas du tout étudié ce que cela pouvait avoir ou non comme impact sur les behaviours coreBeforeScheduledEntriesPublish et coreAfterScheduledEntriesPublish (car je ne les utilise pas du tout dans mon installation). C'est donc à vos risques et périls si vous empruntez le même chemin que moi.

Si vous avez un avis quelconque sur tout cela, n'hésitez pas à vous exprimer !


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#4 2012-05-21 22:23:15

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : 2.4.3 et programmation de billets

L'impact de cette modif est que les fonctions appelées par le ou les behaviour ne pourront plus modifier le contenu du tableau.


Dotclear addicted since 2004

Hors ligne

#5 2012-05-21 22:26:11

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : 2.4.3 et programmation de billets

un

			'AND post_id '.$this->con->in((array)$to_change).' ';

au lieu du

			'AND post_id '.$this->con->in($to_change).' ';

devrait régler le problème (pas testé). Cela dit ça n'explique pas que le problème survienne que maintenant.


Dotclear addicted since 2004

Hors ligne

#6 2012-05-21 22:47:36

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : 2.4.3 et programmation de billets

Je viens de commiter une correction pour régler ce problème (voir la révision 831, ici : http://dev.dotclear.org/2.0/changeset/8 … e0027f679)

PS : c'est pénible de devoir convertir en ArrayObject puis en array juste pour permettre au fonctions appelées via les behaviours de modifier le contenu du ou des tableaux passés en paramètre.


Dotclear addicted since 2004

Hors ligne

#7 2012-05-22 05:14:30

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : 2.4.3 et programmation de billets

C'est quand même fort étrange que le comportement ait brutalement changé... et que je sois le seul à rencontrer ce problème.

Par contre, pour ce qui est du code, ce ne serait pas plus simple de faire en sorte que dbLayer::in accepte les ArrayObject ? Avec quelque chose du genre (pas testé, mais lu dans un bug report de PHP https://bugs.php.net/bug.php?id=36930 ) :

if (($in instanceof ArrayObject) || is_array($in))

« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#8 2012-05-22 06:13:25

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : 2.4.3 et programmation de billets

Brutalement changé, non, juste depuis la 2.4.3, ce qui va conduire à sortir une 2.4.4 rapidement vu ce bug est bloquant.

On pourrait aussi étendre la classe ArrayObject pour qu'elle permette d'appliquer dessus la fonction is_array() (ou n'importe quelle autre fonction applicable à un tableau).


Dotclear addicted since 2004

Hors ligne

#9 2012-05-22 09:27:55

zeiram
Membre
Inscription : 2004-06-27
Site Web

Re : 2.4.3 et programmation de billets

Franck Paul a écrit :

Brutalement changé, non, juste depuis la 2.4.3

Ah ouais... j'avais regardé les révisions du fichier, mais pas réalisé que les dates étaient post 2.4.2 ;-)


« Y a des jours où faut pas m'chercher !! Et y a des jours tous les jours ! »

Hors ligne

#10 2012-05-22 14:17:07

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : 2.4.3 et programmation de billets

Franck Paul a écrit :

Je viens de commiter une correction pour régler ce problème (voir la révision 831, ici : http://dev.dotclear.org/2.0/changeset/8 … e0027f679)

PS : c'est pénible de devoir convertir en ArrayObject puis en array juste pour permettre au fonctions appelées via les behaviours de modifier le contenu du ou des tableaux passés en paramètre.

Juste une question, ne serait-ce pas plus simple de directement permettre à la fonction in() de traiter les ArrayObject?


Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/

Hors ligne

#11 2012-05-31 11:57:32

Arfy
Membre
Lieu : Obernai
Inscription : 2009-01-05
Site Web

Re : 2.4.3 et programmation de billets

zeiram a écrit :

C'est quand même fort étrange que le comportement ait brutalement changé... et que je sois le seul à rencontrer ce problème

Juste pour te "rassurer", tu n'es pas le seul, mon blog aussi ;)


"On peut user de tout mais faut pas en abuser!"

Hors ligne

#12 2012-06-02 00:23:53

AppO
Membre
Lieu : Le Vésinet / France
Inscription : 2007-07-14
Site Web

Re : 2.4.3 et programmation de billets

Arfy a écrit :

Juste pour te "rassurer", tu n'es pas le seul, mon blog aussi ;)"

J'allais le dire.

Hors ligne

#13 2012-06-03 08:04:40

Fomeck
Membre
Inscription : 2010-03-18

Re : 2.4.3 et programmation de billets

Bonjour,

Ca me le fait également sur plusieurs blogs http://forum.dotclear.org/viewtopic.php?id=46205

Hors ligne

#14 2012-06-03 11:42:13

[SiMON]
Membre
Lieu : France
Inscription : 2006-02-09
Site Web

Re : 2.4.3 et programmation de billets

C'est naïf de penser quque garder l'ancien système (à base d'array() basiques si j'ai bien tout suivi) permet quand même aux fonction du behavior de modifier le tableau à condition qu'il soit bien indiqué dans la fonction du behavior que le deuxième argument (celui correspondant à l'array $to_change) doit être passé par référence ?

<?php
class fooClass {
	public static function barFunction($array,&$ref_array,$object) {
		$array[] = 'ARRAY';
		$ref_array[] = 'REF_ARRAY';
		$object[] = 'OBJECT';
	}
}

$array = array();
$array[] = 'foo';
$array[] = 'bar';

$ref_array = array();
$ref_array[] = 'foo';
$ref_array[] = 'bar';

$object = new ArrayObject();
$object[] = 'foo';
$object[] = 'bar';

fooClass::barFunction($array,$ref_array,$object);

header('Content-type: text/plain');
print_r($array);
print_r($ref_array);
print_r($object);
?>>

Rendu :

Array
(
    [0] => foo
    [1] => bar
)
Array
(
    [0] => foo
    [1] => bar
    [2] => REF_ARRAY
)
ArrayObject Object
(
    [storage:ArrayObject:private] => Array
        (
            [0] => foo
            [1] => bar
            [2] => OBJECT
        )

)

S'il est maintenant déprécié de mentionner une référence au moment de l'appel d'une fonction, sauf gros loupage d'épisode de mon côté, c'est toujours très bien accepté au niveau de la déclaration d'une fonction. Il est donc possible de faire suivre une simple array de la même façon que l'on fait suivre un ArrayObject.

Ou alors je n'ai absolument rien compris à la problématique ?

EDIT : Je me suis rendu compte tout seul de ma bourde, call_user_func ne transmettant pas de références. Il est possible de lui faire transmettre un tableau de références, mais modifier Dotclear pour exploiter cette possibilité impliquerait d'invalider tous les behaviors existants.

Je réfléchis à une piste qui permettrait de se passer de call_user_func et de cette limitation.

Dernière modification par [SiMON] (2012-06-03 19:33:23)

Hors ligne

#15 2012-06-04 06:47:59

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : 2.4.3 et programmation de billets

[SiMON] a écrit :

EDIT : Je me suis rendu compte tout seul de ma bourde, call_user_func ne transmettant pas de références. Il est possible de lui faire transmettre un tableau de références, mais modifier Dotclear pour exploiter cette possibilité impliquerait d'invalider tous les behaviors existants.

... et surtout de rendre le code moche et incompréhensible...

Je réfléchis à une piste qui permettrait de se passer de call_user_func et de cette limitation.

Si tu trouves quelque chose, je suis preneur... en attendant, l'utilisation d'arrayobjects fonctionne :)


Dyslexics have more fnu!

Hors ligne

#16 2012-06-04 08:46:11

[SiMON]
Membre
Lieu : France
Inscription : 2006-02-09
Site Web

Re : 2.4.3 et programmation de billets

Ah, le problème est résolu ? Pas suivi le dépôt ces derniers jours, je pensais qu'une fois une solution trouvée elle serait publiée dans la foulée. Un peu de communication "officielle" (blog) sur le sujet permettrait à tout le monde d'y voir plus clair.

D'ailleurs dans le sujet, ça a sans doute été réfléchi mais je me demande toujours pourquoi la publication des billets programmés n'est déclenchée (a) que sur l'accueil et les flux et (b) après l'envoi de la page au client ?

Dernière modification par [SiMON] (2012-06-04 09:22:01)

Hors ligne

#17 2012-06-07 09:16:04

AppO
Membre
Lieu : Le Vésinet / France
Inscription : 2007-07-14
Site Web

Re : 2.4.3 et programmation de billets

Tu peux, en attendant une version 2.4.4 installer le correctif écrit par  le soutier à carapace Franck Paul : http://dev.dotclear.org/2.0/changeset/8 … e0027f679)

Ça fonctionne parfaitement.

Dernière modification par AppO (2012-06-07 09:18:35)

Hors ligne

#18 2012-06-11 12:12:55

pressecologie
Membre
Lieu : île de la Réunion
Inscription : 2011-02-21
Site Web

Re : 2.4.3 et programmation de billets

Bonjour,

Juste pour confirmer le problème chez moi aussi :-)

Cordialement.

Hors ligne

#19 2012-06-18 16:49:19

Kysban
Membre
Lieu : Paris
Inscription : 2006-04-11

Re : 2.4.3 et programmation de billets

C'est à mon tour de constater le problème, en espérant que cela soit rapidement de nouveau OK dans la 2.4.4.

Merci !

Hors ligne

#20 2012-06-19 04:57:37

pressecologie
Membre
Lieu : île de la Réunion
Inscription : 2011-02-21
Site Web

Re : 2.4.3 et programmation de billets

Bonjour,

J'ai testé la newsletter avec le plugin dcCron qui permet l'envoir automatique de la newsletter.
Cette fonction ne semble pas fonctionner.

Est ce possible que ce problème soit lié au même problème que celui de la publication programmé des billets ?

Cordialement.

Hors ligne

#21 2012-06-26 13:39:12

Dessa
Membre
Inscription : 2006-07-10

Re : 2.4.3 et programmation de billets

Bonjour, j'apporte ma petite pierre à l'édifice quant au problème de billets programmés non publiés et attends donc la version 2.4.4, n'ayant pour l'instant pas trop l'occasion de tenter une installation de correctif.
Je suis rassurée de voir que le problème est identifié... car je testais le rafraîchissement de flux RSS un peu désespérément...

Hors ligne

#22 2012-07-02 12:08:46

Muzikals
Membre
Inscription : 2010-08-10

Re : 2.4.3 et programmation de billets

Ayant ce matin redémarré mon blog après avoir mis à jour DotClear, quel ne fut pas ma surprise de voir que ce que j'avais programmé la veille ... ne s'affichait pas ! :(
J'espère qu'une nouvelle version corrigera ce problème qui est tout de même important. J'aurais d'ailleurs pensé qu'un bug aussi gros soit rapidement corrigé par une nouvelle version.
En attendant je vais appliqué le correctif de Franck même si ça ne me plait pas trop de mettre les mains dans le cambouis (spa très user-friendly).

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map