Statut d'article en fonction de la valeur d'un champ

Bonjour, Après moults recherches je suis en panne pour définir ainsi : qu’un article portant un champ défini d’une certaine valeur au moment de sa crétaion ou de sa modification (valeur définie par champ hidden dans le formulaire editer_article) change automatiquement de statut, et ce en fonction de la rubrique où il se trouve. En clair, j’ai un nouveau statut « privé » et je souhaite 1) d’une part, ne pas l’afficher dans la liste des statuts (parce que cela ne concerne qu’une seule rubrique du site dédiée aux articles « privés » et je ne souhaite pas polluer le reste du site avec cela – ça j’ai compris, il faut définir le texte_statut_instituer avec une chaîne vide) et 2) l’attribuer selon le champ souhaité de l’article, dans la rubrique souhaitée. J’ai cherché dans les post_insertion et post_edition, et testé les réponses offertes dans cette liste, mais aucune n’a fonctionné. PI, spip 3.2.3, PHP 7.2.13.
Merci d’avance.

Le 10/03/2019 à 23:41, Naema a écrit :

Bonjour, Après moults recherches je suis en panne pour définir ainsi : qu'un article portant un champ défini d'une certaine valeur au moment de sa crétaion ou de sa modification (valeur définie par champ hidden dans le formulaire editer_article) change automatiquement de statut, et ce en fonction de la rubrique où il se trouve. En clair, j'ai un nouveau statut "privé" et je souhaite 1) d'une part, ne pas l'afficher dans la liste des statuts (parce que cela ne concerne qu'une seule rubrique du site dédiée aux articles "privés" et je ne souhaite pas polluer le reste du site avec cela -- ça j'ai compris, il faut définir le texte_statut_instituer avec une chaîne vide) et 2) l'attribuer selon le champ souhaité de l'article, dans la rubrique souhaitée. J'ai cherché dans les post_insertion et post_edition, et testé les réponses offertes dans cette liste, mais aucune n'a fonctionné. PI, spip 3.2.3, PHP 7.2.13.
Merci d'avance.

Bonjour,

Pas sûr d'avoir bien compris ta demande.
Dans un premier temps (je regarderai ensuite pour le changement de statut dynamique que tu cherches à faire), pour la liste des statuts tu peux utiliser le pipeline formulaire_charger et vérifier avec $flux['args']['args'][0] ou ['data']['_objet'] sur quel type d'objet tu es ainsi que son id, pour agir selon le contexte. Par exemple unset($flux['data']['_statuts']['prop'] supprimera de la liste proposé le statut "prop";

Pour ton cas ça donnerait un truc du genre (adapter le numéro de rubrique, j'ai mis ici 14)

$GLOBALS['spip_pipeline']['formulaire_charger'] .= "|statut_obj";

function statut_obj($flux)
{
//agir que sur le formulaire instituer et sur les articles:
      if ($flux['args']['form'] == 'instituer_objet' && $flux['args']['data']['_objet'] == 'article') {

//extraire le numéro de rubrique:
    $r = sql_fetsel("id_rubrique", "spip_articles", "id_article=" . sql_quote(intval($id_article)));

//si on n'est pas sur la rubrique x, on supprime de la liste le statut indésirable:
    
    if (intval($r['id_rubrique']) != 14{
         unset($flux['data']['_statuts']['prive']);
    }

     }
     return $flux;
}

Le 10/03/2019 à 23:41, Naema a écrit :

Bonjour, Après moults recherches je suis en panne pour définir ainsi : qu'un article portant un champ défini d'une certaine valeur au moment de sa crétaion ou de sa modification (valeur définie par champ hidden dans le formulaire editer_article) change automatiquement de statut, et ce en fonction de la rubrique où il se trouve. En clair, j'ai un nouveau statut "privé" et je souhaite 1) d'une part, ne pas l'afficher dans la liste des statuts (parce que cela ne concerne qu'une seule rubrique du site dédiée aux articles "privés" et je ne souhaite pas polluer le reste du site avec cela -- ça j'ai compris, il faut définir le texte_statut_instituer avec une chaîne vide) et 2) l'attribuer selon le champ souhaité de l'article, dans la rubrique souhaitée. J'ai cherché dans les post_insertion et post_edition, et testé les réponses offertes dans cette liste, mais aucune n'a fonctionné. PI, spip 3.2.3, PHP 7.2.13.
Merci d'avance.

Bonjour,

Pas sûr d'avoir bien compris ta demande.
Dans un premier temps (je regarderai ensuite pour le changement de statut dynamique que tu cherches à faire), pour la liste des statuts tu peux utiliser le pipeline formulaire_charger et vérifier avec $flux['args']['args'][0] ou ['data']['_objet'] sur quel type d'objet tu es ainsi que son id, pour agir selon le contexte. Par exemple unset($flux['data']['_statuts']['prop'] supprimera de la liste proposé le statut "prop";

Pour ton cas ça donnerait un truc du genre (adapter le numéro de rubrique, j'ai mis ici 14)

$GLOBALS['spip_pipeline']['formulaire_charger'] .= "|statut_obj";

function statut_obj($flux)
{
//agir que sur le formulaire instituer et sur les articles:
      if ($flux['args']['form'] == 'instituer_objet' && $flux['args']['data']['_objet'] == 'article') {

//extraire le numéro de rubrique:
    $r = sql_fetsel("id_rubrique", "spip_articles", "id_article=" . sql_quote(intval($id_article)));

//si on n'est pas sur la rubrique x, on supprime de la liste le statut indésirable:
    
    if (intval($r['id_rubrique']) != 14{
         unset($flux['data']['_statuts']['prive']);
    }

     }
     return $flux;
}

Attention SPIP se limite à PHP 7.1 pour le moment.
EN 7.2 rien est valider vraiment.

Pour ton cas ça donnerait un truc du genre (adapter le numéro de rubrique, j'ai mis ici 14)

$GLOBALS['spip_pipeline']['formulaire_charger'] .= "|statut_obj";

function statut_obj($flux)
{
//agir que sur le formulaire instituer et sur les articles:
if ($flux['args']['form'] == 'instituer_objet' && $flux['args']['data']['_objet'] == 'article') {

//extraire le numéro de rubrique:
$r = sql_fetsel("id_rubrique", "spip_articles", "id_article=" . sql_quote(intval($id_article)));

//si on n'est pas sur la rubrique x, on supprime de la liste le statut indésirable:

     if \(intval\($r\['id\_rubrique'\]\) \!= 14\{
     unset\($flux\['data'\]\['\_statuts'\]\['prive'\]\);
     \}

 \}
 return $flux;

}

Oups, en, testant, beaucoup d'erreur, version corrigée:

function statut_obj($flux)
  $GLOBALS['spip_pipeline']['formulaire_charger'] .= "|statut_obj";

  function statut_obj($flux)
  {
  //agir que sur le formulaire instituer et sur les articles:
        if ($flux['args']['form'] == 'instituer_objet' &&
  $flux['data']['_objet'] == 'article') {

  //extraire le numéro de rubrique:
           $r = sql_fetsel("id_rubrique", "spip_articles", "id_article=" .
  sql_quote(intval($flux['data']['_id_objet'])));

  //si on n'est pas sur la rubrique 14, on supprime de la liste le statut
  indésirable:

           if (intval($r['id_rubrique']) != 14){
           unset($flux['data']['_statuts']['prive']);
           }

       }
       return $flux;
}