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