Pipeline pre_insertion et bug dans espace privé

Bonjour,

dans le cadre d’un intranet, j’ai intégré une pipeline de pre_insertion afin que les articles s’affichent tout de suite en mode public. Ça marche c’est cool ! Par contre ça me créé un bug gênant en privé. En effet, ça bascule les articles du privé en public sauf qu’il faut les mettre en cours de rédaction puis les remettre en public pour qu’une rubrique et l’article s’affiche correctement sur le site.

// Utilisation du pipeline pre_insertion
$GLOBALS[‹ spip_pipeline ›][‹ pre_insertion ›] .= « |ma_fonction_pre_insertion »;

// Les nouveaux articles seront automatiquement publiés
function ma_fonction_pre_insertion($flux){
if ($flux[‹ args ›][‹ table ›]==‹ spip_articles ›){
$flux[‹ data ›][‹ statut ›] = ‹ publie ›;
}
return $flux;
}

avez-vous déjà eu ce cas de figure et comment l’avez-vous corrigé ? Ou bien comment feriez-vous ?

Teenoo

Le 09.12.16 à 10:44, Laetitia Boiron a écrit :

Bonjour,

dans le cadre d’un intranet, j’ai intégré une pipeline de pre_insertion
afin que les articles s’affichent tout de suite en mode public. Ça
marche c’est cool ! Par contre ça me créé un bug gênant en privé. En
effet, ça bascule les articles du privé en public sauf qu’il faut les
mettre en cours de rédaction puis les remettre en public pour qu’une
rubrique et l’article s’affiche correctement sur le site.

// Utilisation du pipeline pre_insertion
$GLOBALS['spip_pipeline']['pre_insertion'] .= "|ma_fonction_pre_insertion";

// Les nouveaux articles seront automatiquement publiés
function ma_fonction_pre_insertion($flux){
if ($flux['args']['table']=='spip_articles'){
   $flux['data']['statut'] = 'publie';
}
return $flux;
}

avez-vous déjà eu ce cas de figure et comment l’avez-vous corrigé ? Ou
bien comment feriez-vous ?

Teenoo

salut,

le mieux serait que tu passe par la pipeline post_insertion (donc une fois que l'id article est connu) et que tu bascule le statut grâce à la fonction instituer_article()

celle-ci s'occupera de publier la rubrique correspondante.

le bug n'est donc pas dans la pipeline, mais dans ton emploi :slight_smile:

--
Maïeul

Tu crois que ça c’est une bonne fonction ? Je suis pas trop sûre de mon coup là… Et du coup je supprime ma pipeline pre_insertion ?

// Utilisation du pipeline post_insertion
$GLOBALS[‹ spip_pipeline ›][‹ post_insertion ›] .= « |article_pre_insertion »;

// Les nouveaux articles seront publiés
function article_pre_insertion($flux){
if ($flux[‹ args ›][‹ table ›]==‹ spip_articles ›){
if (isset($flux[‹ data ›][‹ statut ›]) && ($flux[‹ data ›][‹ statut ›] != ‹ publie ›)) {
$flux[‹ data ›][‹ statut ›] = ‹ publie ›;
}
}
return $flux;
}

Le 9 déc. 2016 à 10:51, Maïeul <maieul@maieul.net> a écrit :

Le 09.12.16 à 10:44, Laetitia Boiron a écrit :

Bonjour,

dans le cadre d’un intranet, j’ai intégré une pipeline de pre_insertion
afin que les articles s’affichent tout de suite en mode public. Ça
marche c’est cool ! Par contre ça me créé un bug gênant en privé. En
effet, ça bascule les articles du privé en public sauf qu’il faut les
mettre en cours de rédaction puis les remettre en public pour qu’une
rubrique et l’article s’affiche correctement sur le site.

// Utilisation du pipeline pre_insertion
$GLOBALS[‹ spip_pipeline ›][‹ pre_insertion ›] .= « |ma_fonction_pre_insertion »;

// Les nouveaux articles seront automatiquement publiés
function ma_fonction_pre_insertion($flux){
if ($flux[‹ args ›][‹ table ›]==‹ spip_articles ›){
$flux[‹ data ›][‹ statut ›] = ‹ publie ›;
}
return $flux;
}

avez-vous déjà eu ce cas de figure et comment l’avez-vous corrigé ? Ou
bien comment feriez-vous ?

Teenoo

salut,

le mieux serait que tu passe par la pipeline post_insertion (donc une fois que l’id article est connu) et que tu bascule le statut grâce à la fonction instituer_article()

celle-ci s’occupera de publier la rubrique correspondante.

le bug n’est donc pas dans la pipeline, mais dans ton emploi :slight_smile:


Maïeul
http://blog.maieul.net
http://geekographie.maieul.net


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

non, c'est pas bon. J'essaierai de trouver quelque chose cet après-midi
Le 09.12.16 à 12:10, Laetitia Boiron a écrit :

Tu crois que ça c’est une bonne fonction ? Je suis pas trop sûre de mon
coup là… Et du coup je supprime ma pipeline pre_insertion ?

// Utilisation du pipeline post_insertion
$GLOBALS['spip_pipeline']['post_insertion'] .= "|article_pre_insertion";

// Les nouveaux articles seront publiés
function article_pre_insertion($flux){
if ($flux['args']['table']=='spip_articles'){
   if (isset($flux['data']['statut']) && ($flux['data']['statut'] !=
'publie')) {
                $flux['data']['statut'] = 'publie';
        }
}
return $flux;
}

Le 9 déc. 2016 à 10:51, Maïeul <maieul@maieul.net
<mailto:maieul@maieul.net>> a écrit :

Le 09.12.16 à 10:44, Laetitia Boiron a écrit :

Bonjour,

dans le cadre d’un intranet, j’ai intégré une pipeline de pre_insertion
afin que les articles s’affichent tout de suite en mode public. Ça
marche c’est cool ! Par contre ça me créé un bug gênant en privé. En
effet, ça bascule les articles du privé en public sauf qu’il faut les
mettre en cours de rédaction puis les remettre en public pour qu’une
rubrique et l’article s’affiche correctement sur le site.

// Utilisation du pipeline pre_insertion
$GLOBALS['spip_pipeline']['pre_insertion'] .=
"|ma_fonction_pre_insertion";

// Les nouveaux articles seront automatiquement publiés
function ma_fonction_pre_insertion($flux){
if ($flux['args']['table']=='spip_articles'){
  $flux['data']['statut'] = 'publie';
}
return $flux;
}

avez-vous déjà eu ce cas de figure et comment l’avez-vous corrigé ? Ou
bien comment feriez-vous ?

Teenoo

salut,

le mieux serait que tu passe par la pipeline post_insertion (donc une
fois que l'id article est connu) et que tu bascule le statut grâce à
la fonction instituer_article()

celle-ci s'occupera de publier la rubrique correspondante.

le bug n'est donc pas dans la pipeline, mais dans ton emploi :slight_smile:

--
Maïeul
http://blog.maieul.net
http://geekographie.maieul.net

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

--
Maïeul

Le 09.12.16 à 12:32, Maïeul a écrit :

non, c'est pas bon. J'essaierai de trouver quelque chose cet après-midi
Le 09.12.16 à 12:10, Laetitia Boiron a écrit :

voilà, j'ai commenté pour que tu comprenne bien ce que fait chaque ligne

$GLOBALS['spip_pipeline']['post_insertion'] .= "|article_post_insertion";

function article_post_insertion($flux){
  if ($flux['args']['table']=='spip_articles'){
    if ($flux['data']['statut'] != 'publie'){ // si pas publié
      $id_article = $flux['args']['id_objet']; //récuperer l'id_article
      $flux['data']['statut'] = 'publie'; //on modifie le flux de sortie, mais c'est pas le plus important pour la publication
      include_spip('action/editer_article');
    instituer_article($id_article,array('statut'=>'publie'));// on publie l'article (et du coup cela publie la rubrique si besoin)
    }
  }
}

--
Maïeul

Ça marche d’enfer !!! Mille mercisssss

Teenoo

Le 9 déc. 2016 à 12:47, Maïeul <maieul@maieul.net> a écrit :

$GLOBALS[‹ spip_pipeline ›][‹ post_insertion ›] .= « |article_post_insertion »;

function article_post_insertion($flux){
if ($flux[‹ args ›][‹ table ›]==‹ spip_articles ›){
if ($flux[‹ data ›][‹ statut ›] != ‹ publie ›){ // si pas publié
$id_article = $flux[‹ args ›][‹ id_objet ›]; //récuperer l’id_article
$flux[‹ data ›][‹ statut ›] = ‹ publie ›; //on modifie le flux de sortie, mais c’est pas le plus important pour la publication
include_spip(‹ action/editer_article ›);
instituer_article($id_article,array(‹ statut ›=>‹ publie ›));// on publie l’article (et du coup cela publie la rubrique si besoin)
}
}
}