Lorsque je fais {recherche} sur des (FORUMS) classiques, ça me trouve bien les résultats escomptés.
Lorsque je fais {recherche} sur des (FORUMS) dont j'ai personnalisé le {statut}, ça ne retourne plus jamais rien.
Dans mon cas les forums en question sont normaux mis à part qu'ils ont le statut "mppublic". C'est la seule chose qui change.
Est-ce normal ?
Lorsque je fais {recherche} sur des (FORUMS) dont j'ai personnalisé le
{statut}, ça ne retourne plus jamais rien.
Il faudrait que tu regardes ce qu'en dit le debugueur. Es-tu en 2.0 ou
en SVN + plugin forums ? Utilisestu la recherche simple de SPIP core,
ou bien un plugin type Fulltext ?
-- Fil
SPIP stable. Recherche simple.
Et je précise que j'indique bien un critère de statut précis (puisque par défaut quand on ne met rien ça ne montre que "statut=publie" uniquement).
Le résultat du debug ne m'avait déjà pas donné beaucoup d'informations car le SQL généré c'est "recherche = 57574zef5zefzef" ou truc dans le genre. On ne voit donc pas le SQL de rechercher_en_base().
Pas de différence sur les autres points dans la requête.
Comme je suis un peu bête, je ne lisais pas le code au bon endroit : depuis le début je lis sur le trac à partir de doc.spip.org alors que ça amène à la version de dev.
Quand on lit le inc_prepare_recherche_dist() de la stable, ligne 62 :
# Pour les forums, unifier par id_thread et forcer statut='publie'
if ($x == 'forum' AND $points) {
$p2 = array();
$s = sql_select("id_thread, id_forum", "spip_forum", "statut='publie' AND ".sql_in('id_forum', array_keys($points)), '','','','', $serveur);
while ($t = sql_fetch($s, $serveur))
$p2[intval($t['id_thread'])]['score']
+= $points[intval($t['id_forum'])]['score'];
$points = $p2;
}
SPIP force donc ce choix ! Dictateur !
Et par la même occasion, il unifie par thread alors qu'on peut imaginer ne pas utiliser ces threads (dans mon cas ça n'a pas de sens) et donc le laisser à "0".
Et surtout ce n'est absolument pas modifiable par un plugin (à moins de tout surcharger ce qui est super moche).
Donc comment faire ? :
La version de dev introduit le pipeline "prepare_recherche" où le plugin forum s'inscrit pour y mettre le code précédent. Sans modifier le code existant, est-ce que c'est pas trop dur de le rajouter à la branche stable ? Ça permettrait de laisser le fonctionnement tel qu'il est MAIS de pouvoir le modifier si on veut.
# Pour les forums, unifier par id_thread et forcer statut='publie'
if ($x == 'forum' AND $points) {
$p2 = array();
$s = sql_select("id_thread, id_forum", "spip_forum", "statut='publie'
AND ".sql_in('id_forum', array_keys($points)), '','','','', $serveur);
while ($t = sql_fetch($s, $serveur))
$p2[intval($t['id_thread'])]['score']
+= $points[intval($t['id_forum'])]['score'];
$points = $p2;
}
SPIP force donc ce choix ! Dictateur !
Et par la même occasion, il unifie par thread alors qu'on peut imaginer ne
pas utiliser ces threads (dans mon cas ça n'a pas de sens) et donc le
laisser à "0".
L'un est une conséquence de l'autre : en effet si tu unifies par
thread, il ne faut pas prendre en compte les forums refusés.
La version de dev introduit le pipeline "prepare_recherche" où le plugin
forum s'inscrit pour y mettre le code précédent. Sans modifier le code
existant, est-ce que c'est pas trop dur de le rajouter à la branche stable ?
Ça permettrait de laisser le fonctionnement tel qu'il est MAIS de pouvoir le
modifier si on veut.
Envoie le patch
-- Fil
En fait le pipeline ne change rien puisque le forçage du statut et du thread supprime les données de départ, donc on peut rien modifier ensuite.
Voilà donc un patch qui ne force les choses QUE si ya effectivement un id_thread (sinon ça n'a pas de sens).
Il faudrait aussi le reporter dans le plugin 2.1 (mais ça je peux le faire c'est sur la zone).