SPIP Blog

Du logiciel libre et de la tendresse

Accueil > Développement > Une balise pour lister les administrateurs

Une balise pour lister les administrateurs

jeudi 10 août 2006, par James

Vous connaissez la balise #LESAUTEURS ? non ? On peut lire ici qu’elle compte parmis les balises calculées et qu’elle :

affiche les auteurs de cet article, avec lien vers leur adresse e-mail, afin de pourvoir directement leur écrire. Cela évite de créer une boucle AUTEURS pour obtenir le même résultat.

 [1]

Alors, on se dit qu’une balise #LESADMINISTRATEURS qui afficherait la liste des administrateurs d’une rubrique, ce serait pas mal.
ça éviterait de créer une boucle...

...enfin... une boucle, c’est vite dit, la gestion des "admins restreints" est telle que ça devient vite le bazar pour mettre ça en boucle... mais bon, elle existe et la voici :

La Boucle

Une certaine Elodie l’a réalisé pour vous sur spip-contrib : Afficher les administrateurs d’une rubrique et vous pouvez lui dire merci !

Une inclusion de squelette et le tour est joué.

Toutefois, si vous préférez une balise, le code ci-dessous fait la même chose. Sachez qu’avec ce code, si vous placez #LESADMINISTRATEURS en dehors d’une boucle, vous aurez la liste des admins du site (ceux qui ne sont pas restreints) et que dans une boucle, vous aurez en plus les admins restreints.

Le code

dans mes_fonctions.php [2]

function balise_LESADMINISTRATEURS($p){
        $nom = $p->id_boucle;
        $p->code = "sql_administrateurs(" .
                champ_sql('id_rubrique', $p) .
                ",'" .
                $nom .
                "','" .
                $p->boucles[$nom]->type_requete .
                "','" .
                $p->boucles[$nom]->sql_serveur .
                "')";

        #$p->interdire_scripts = true;
        return $p;
}

function sql_administrateurs($id_rubrique, $table, $id_boucle, $serveur='') {
        $auteurs = "";
        $ids = array();
       
//Contexte: dans une boucle, j'affiche d'abord les admins de la rubrique
if ($id_rubrique) {
                $result_auteurs = spip_abstract_select(
                        array('auteurs.id_auteur', 'auteurs.nom'),
                        array('auteurs' => 'spip_auteurs',
                                'lien' => 'spip_auteurs_rubriques'),
                        array("lien.id_rubrique=$id_rubrique",
                                "auteurs.id_auteur=lien.id_auteur"),
                        '',array(),'','', array(),
                        $table, $id_boucle, $serveur);

                while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
                 $ids[] = $row_auteur['id_auteur'];
                $nom_auteur = typo($row_auteur['nom']);
                $url_auteur = generer_url_auteur($row_auteur['id_auteur']);
                if ($url_auteur) {
                        $auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
                } else {
                        $auteurs[] = "$nom_auteur";
                }
 }
                //2: ensuite les admins restreint de la hierarchie qui mene a cette rubrique
                $result_auteurs = spip_abstract_select(
                        array('auteurs.id_auteur', 'auteurs.nom'),
                        array('auteurs' => 'spip_auteurs',
                                'lien' => 'spip_auteurs_rubriques'),
                        array("lien.id_rubrique IN (".calculer_hierarchie($id_rubrique).")",
  empty($ids) ? "1=1" : "auteurs.id_auteur NOT IN (".join($ids, ", ").")",
                                "auteurs.id_auteur=lien.id_auteur"),
                        '',array(),'','', array(),
                        $table, $id_boucle, $serveur);

                while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
                 $ids[] = $row_auteur['id_auteur'];
                $nom_auteur = typo($row_auteur['nom']);
                $url_auteur = generer_url_auteur($row_auteur['id_auteur']);
                if ($url_auteur) {
                        $auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
                } else {
                        $auteurs[] = "$nom_auteur";
                }
 }
                //3: enfin les admins du site
                $result_auteurs = spip_abstract_select(
                        array('lien.id_auteur', 'COUNT(lien.id_rubrique)'),
                        array('lien' => 'spip_auteurs_rubriques'),
                        array(empty($ids) ? "1=1" : "lien.id_auteur NOT IN (".join($ids, ", ").")"),
                        'id_auteur',array(),'','', array(),
                        $table, $id_boucle, $serveur);
                while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
                 $ids[] = $row_auteur['id_auteur'];
 }
                $result_auteurs = spip_abstract_select(
                        array('auteurs.id_auteur', 'auteurs.nom'),
                        array('auteurs' => 'spip_auteurs'),
                        array("auteurs.statut='0minirezo'",
  empty($ids) ? "1=1" : "auteurs.id_auteur NOT IN (".join($ids, ", ").")"),
                        '',array(),'','', array(),
                        $table, $id_boucle, $serveur);

                while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
                        $nom_auteur = typo($row_auteur['nom']);
                        $url_auteur = generer_url_auteur($row_auteur['id_auteur']);
                        if ($url_auteur) {
                                $auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
                        } else {
                                $auteurs[] = "$nom_auteur";
                        }
                }

}
else {
//Contexte: hors boucle, j'affiche les admins du site seulement
//1: j'identifie les auteurs qui sont admins restreints
                $result_auteurs = spip_abstract_select(
                        array('lien.id_auteur', 'COUNT(lien.id_rubrique)'),
                        array('lien' => 'spip_auteurs_rubriques'),
                        array(), 'id_auteur',array(),'','', array(),
                        $table, $id_boucle, $serveur);
                while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
                 $ids[] = $row_auteur['id_auteur'];
 }

//2: j'identifie les auteurs qui sont admins ET non restreints
                $result_auteurs = spip_abstract_select(
                        array('auteurs.id_auteur', 'auteurs.nom'),
                        array('auteurs' => 'spip_auteurs'),
                        array("auteurs.statut='0minirezo'",
  empty($ids) ? "1=1" : "auteurs.id_auteur NOT IN (".join($ids, ", ").")"),
                        '',array(),'','', array(),
                        $table, $id_boucle, $serveur);

                while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
                        $nom_auteur = typo($row_auteur['nom']);
                        $url_auteur = generer_url_auteur($row_auteur['id_auteur']);
                        if ($url_auteur) {
                                $auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
                        } else {
                                $auteurs[] = "$nom_auteur";
                        }
                }

}

        return (!$auteurs) ? "" : join($auteurs, ", ");
}

Message (à peine) subliminal

Bref, avec SPIP, on peut faire comme on veut, c’est ça qu’est cool. On pourrait même rêver que c’est « ma » balise qui ferait appel au squelette d’Elodie... la réponse ne devrait pas tarder...


[1Notez au passage que la doc n’est pas à jour puisque depuis quelques temps, le lien se fait vers leur page ’auteur’ et non vers leur adresse e-mail...

[2ou dans un plugin, si vous y tenez ;-)

Messages

Un message, un commentaire ?

Qui êtes-vous ?
Se connecter
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.