Pipeline post-edition

Bonjour,
Avec regret (parce que je n’y arrive pas, tout simplement) je vous sollicite à nouveau pour un coup de main sur le pipeline post-edition. Je n’arrive pas à comprendre comment le mettre en oeuvre.

Contexte : je finalise un morceau de plugin « illegal » et voudrait qu’au moment du changement de statut d’un article (de ‹ publie › à ‹ illegal › – ce dernier statut étant bien paramétré, géré et pris en compte) il y ait un enregistrement automatique dans ma table « illegal_articles » (table qui s’implémente bien également) avec le n° #ID_ARTICLE et un numéro automatique incrémentiel #ID_ILLEGAL.

J’ai ajouté le code ci-dessous à mon plugin (dans : _pipeline.php) mais cela ne fonctionne pas. J’avoue ne pas vraiment comprendre non plus, à défaut d’avoir les connaissances/formations en langage informatique et temps nécessaires, je recopie ce qui me semble être approprié (des fois ça marche, des fois non, évidemment).

Merci de votre aide si vous avez le temps.

Bien à vous

/**

  • Au changement de statut apres declaration du statut =‹ illegal ›,
  • créer un enregistrement dans la table spip_illegal_articles avec : n°#ID_ARTICLE
  • pour ensuite pouvoir renseigner le champ ‹ motif ›
  • Egalement, recalcul du statut des rubriques d’apres le statut modifie des articles (cf. Plugin Diogene)
  • @pipeline post_edition
    */
    function illegal_post_edition($flux) {
    if($flux[‹ args ›][‹ action ›] == ‹ instituer ›) {
    $objet = objet_type($flux[‹ args ›][‹ table ›]);
    if (isset($flux[‹ data ›][‹ statut ›]) && ($flux[‹ data ›][‹ statut ›] == ‹ illegal ›) && ($flux[‹ args ›][‹ table ›] == ‹ spip_articles ›)) {
    sql_updateq(
    ‹ spip_illegal_articles ›,

‹ id_article= ›.intval($flux[‹ args ›][‹ id_objet ›])
);
}
}
// Code ci-dessous issu du plugin Diogene
if (isset($flux[‹ data ›][‹ id_rubrique ›])
and ($flux[‹ data ›][‹ statut ›] == ‹ publie ›)
and ($flux[‹ args ›][‹ action ›] == ‹ instituer ›)) {
include_spip(‹ inc/rubriques ›);
calculer_rubriques_if($flux[‹ data ›][‹ id_rubrique ›], array(‹ statut › => ‹ publie ›), ‹  ›);
}

return $flux;
}

Le 13/04/2019 à 23:34, Naema a écrit :

Bonjour,
Avec regret (parce que je n'y arrive pas, tout simplement) je vous sollicite à nouveau pour un coup de main sur le pipeline post-edition. Je n'arrive pas à comprendre comment le mettre en oeuvre.
Contexte : je finalise un morceau de plugin "illegal" et voudrait qu'au moment du changement de statut d'un article (de 'publie' à 'illegal' -- ce dernier statut étant bien paramétré, géré et pris en compte) il y ait un enregistrement automatique dans ma table "illegal_articles" (table qui s'implémente bien également) avec le n° #ID_ARTICLE et un numéro automatique incrémentiel #ID_ILLEGAL.
J'ai ajouté le code ci-dessous à mon plugin (dans : _pipeline.php) mais cela ne fonctionne pas. J'avoue ne pas vraiment comprendre non plus, à défaut d'avoir les connaissances/formations en langage informatique et temps nécessaires, je

  recopie ce qui me semble être approprié (des fois ça marche, des fois non, évidemment).

Petit partage d'expérience :
Lorsque je ne comprend pas ce qui ne va pas dans un code, j'ajoute des logs.
cf spip_log - Programmer avec SPIP 4
Il faut alors définir un niveau de log verbeux :
cf _LOG_FILTRE_GRAVITE - SPIP

Ici à l'entrée de la fonction, je relèverais les arguments :
spip_log("illegal_post_edition flux=".print_r($flux,1), "DEBUG_illegal_entree_post_edition");
Ça va être verbeux mais ça permettra de vérifier la forme qu'ils ont...
et s'ils sont bien de la forme attendue.

Puis à l'intérieur de chaque alternative if() je mettrais aussi un spip_log :
ça permetra de voir par si ça passe par où tu veux quand il faut.

Puis surtout je testerais les valeurs de retour des fonctions :
ici tu devrais tester la valeur de retour de sql_updateq pour savoir si ça se passe bien,
cf https://code.spip.net/autodoc/tree/ecrire/base/abstract_sql.php.html#function_sql_updateq
et afficher l'erreur avec sql_error si jamais la réponse est qu'il y a un problème.
cf https://code.spip.net/autodoc/tree/ecrire/base/abstract_sql.php.html#function_sql_error

Les spip_logs peuvent être virés une fois le debuging fini, pour raisons de performance,
mais la détection d'erreur peut rester.
JL

Merci de votre aide si vous avez le temps.

Bien à vous

/**
* Au changement de statut apres declaration du statut ='illegal',
* créer un enregistrement dans la table spip_illegal_articles avec : n°#ID_ARTICLE
* pour ensuite pouvoir renseigner le champ 'motif'
* Egalement, recalcul du statut des rubriques d'apres le statut modifie des articles (cf. Plugin Diogene)
* @pipeline post_edition
*/
function illegal_post_edition($flux) {
if($flux['args']['action'] == 'instituer') {
$objet = objet_type($flux['args']['table']);
if (isset($flux['data']['statut']) && ($flux['data']['statut'] == 'illegal') && ($flux['args']['table'] == 'spip_articles')) {
sql_updateq(
'spip_illegal_articles',

                     'id\_article='\.intval\($flux\['args'\]\['id\_objet'\]\)
             \);
     \}
 \}
 // Code ci\-dessous issu du plugin Diogene
 if \(isset\($flux\['data'\]\['id\_rubrique'\]\)
              and \($flux\['data'\]\['statut'\] == 'publie'\)
              and \($flux\['args'\]\['action'\] == 'instituer'\)\) \{
              include\_spip\('inc/rubriques'\);
              calculer\_rubriques\_if\($flux\['data'\]\['id\_rubrique'\], array\('statut' => 'publie'\), ''\);
 \}

 return $flux;

}

Le 13/04/2019 à 23:34, Naema a écrit :

             sql\_updateq\(
                     'spip\_illegal\_articles',

                     'id\_article='\.intval\($flux\['args'\]\['id\_objet'\]\)
             \);

Probable que ce soit là que ça coince.

Tu veux insérer (insert), pas mettre à jour (update) un enregistrement.

Essaie avec ça :

sql_insertq(
  'spip_illegal_articles',
  array('id_article' => intval($flux['args']['id_objet']))
);

--
nicod_

Avec un peu de retard, cela fonctionne effectivement avec sql_insertq !

Un grand merci.

Le dim. 14 avr. 2019 à 12:06, nicod_ <nicod@lerebooteux.fr> a écrit :

Le 13/04/2019 à 23:34, Naema a écrit :

sql_updateq(
‹ spip_illegal_articles ›,

‹ id_article= ›.intval($flux[‹ args ›][‹ id_objet ›])
);

Probable que ce soit là que ça coince.

Tu veux insérer (insert), pas mettre à jour (update) un enregistrement.

Essaie avec ça :

sql_insertq(
‹ spip_illegal_articles ›,
array(‹ id_article › => intval($flux[‹ args ›][‹ id_objet ›]))
);

–
nicod_