Champs Extras restreints a une rubrique ET ses sous-rubriques

Je me réponds, voici le code que j'ai inséré dans mes_options.php pour résoudre le pb:

  // limiter l'usage du ChampExtra "Lieu" a la rubrique Evenements (id=86)
  function _autoriser_mes_articles_extras($id_article, $opt, $id_rubrique_ok) {
    $id_rubrique = $opt['contexte']['id_rubrique'];
    if (!$id_rubrique) {
      $id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=".intval($id_article));
    }
    // on essaie aussi dans le contexte d'appel de la page
    if (!$id_rubrique) {
      $id_rubrique = _request('id_rubrique');
    }
    if ($id_rubrique == $id_rubrique_ok) {
      return true;
    }
    // AJOUT: on teste si la rubrique $id_rubrique est en dessous de la rubrique $id_rubrique_ok dans la hierarchie, en remontant cette hierarchie jusqu'a trouver $id_rubrique_ok, ou a arriver au sommet
    $id_rubrique_parent = $id_rubrique;
    while ($id_rubrique_parent = sql_getfetsel("id_parent","spip_rubriques","id_rubrique=" . $id_rubrique_parent,"","","", "", $connect)) {
      if ($id_rubrique_parent == $id_rubrique_ok) {
        return true;
      }
    }
    return false;
  }
  /* On configure ici la correspondance entre ChampsExtras et rubriques. Dans l'exemple ci-dessous, les ChampsExtras "lieu" et "participants" sont associés a la rubrique n°86 (Evenements), ce qui limitera l'usage de ces ChampsExtras a la rubrique n°86 et ses sous-rubriques (sans limite de niveau)*/
  foreach (array(
    'lieu'=>86,
    'participants'=>86,
    ) as $nom=>$rubrique){
    eval("
      function autoriser_article_$nom"."_modifierextra_dist(\$faire, \$type, \$id, \$qui, \$opt) {
        return _autoriser_mes_articles_extras(\$id, \$opt, $rubrique);
      }
      function autoriser_article_$nom"."_voirextra_dist(\$faire, \$type, \$id, \$qui, \$opt) {
        return autoriser('modifierextra', \$type, \$id, \$qui, \$opt);
      }
    ");
  }

----- Mail Original -----
De: "Sylvain Lesage" <slesage@abc.gob.bo>
À: "Spip" <spip@rezo.net>
Envoyé: Vendredi 8 Janvier 2010 17:44:36
Objet: [Spip] Champs Extras restreints a une rubrique ET ses sous-rubriques

J'ai inséré du code pour restreindre l'utilisation de mes Champs Extras a une rubrique, mais j'aimerais pouvoir les utiliser dans les sous-rubriques aussi.
Pour restreindre a une rubrique, j'ai ajouté du code PHP dans mon fichier mes_options.php, qui compare deux identifiants de rubrique avec un == (voir a la fin du mail)

J'aimerais maintenant comparer un identifiant id_sous_rub a un identifiant id_rub, pour savoir si id_sous_rub est une sous-rubrique de id_rub. C'est possible ?

Merci

Sylvain

// restringir el uso del ChampExtra "Lugar" a la seccion Eventos (id=86)
function _autoriser_mes_articles_extras($id_article, $opt, $id_rubrique_ok) {
  $id_rubrique = $opt['contexte']['id_rubrique'];
  if (!$id_rubrique) {
    $id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=".intval($id_article));
  }
  // on essaie aussi dans le contexte d'appel de la page
  if (!$id_rubrique) {
    $id_rubrique = _request('id_rubrique');
  }
  if ($id_rubrique == $id_rubrique_ok) {
    return true;
  }
  return false;
}

/* Aqui se precisan las restricciones de los ChampsExtras a una seccion
por ejemplo: lugar a la seccion 86 (Eventos)
*/
foreach (array(
  'lugar'=>86,
  'participante_1'=>86,
  'participante_2'=>86,
  'participante_3'=>86,
  'participante_4'=>86,
  'participante_5'=>86,
  ) as $nom=>$rubrique){
  eval("
    function autoriser_article_$nom"."_modifierextra_dist(\$faire, \$type, \$id, \$qui, \$opt) {
      return _autoriser_mes_articles_extras(\$id, \$opt, $rubrique);
    }
    function autoriser_article_$nom"."_voirextra_dist(\$faire, \$type, \$id, \$qui, \$opt) {
      return autoriser('modifierextra', \$type, \$id, \$qui, \$opt);
    }
  ");
}
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

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

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