Balise #LESADMINISTRATEURS

Afficher la liste des administrateurs d’une rubrique sans boucle

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

#LESAUTEURS affiche les auteurs de cet article, avec lien vers leur propre page publique, afin de pouvoir directement leur écrire ou de consulter la liste des articles qu’ils ont publié. Ceci depuis [SPIP 1.9], car auparavant, il s’agissait d’un lien vers leur adresse e-mail. Cela évite de créer une boucle AUTEURS pour obtenir le même résultat.

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 ce site : 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 [1]

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, ", ");
}

Et alors, pourquoi pas un modèle ?

Bien sur, on pourrait envisager un modèle appelé directement ou par la balise ci-dessus. Ce modèle pourrait être directement inspiré des boucles d’Elodie... à vous de jouer ;-)

Notes

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

Discussion

3 discussions

  • 1
    Paladin

    Superbe ! Grand merci pour cette contrib.

    Une variante #LESINVITES qui permet d’afficher la liste ... des invités :

    <?php
     // Ajout de la balise #LESINVITES
     // Donne la liste complète des invités
    	
    function balise_LESINVITES($p){
     $p->code = "sql_invites('".$p->boucles[$p->id_boucle]->sql_serveur."')";
     return ($p);
    }
    
    function sql_invites($serveur='') {
     $invites = "";
    	
     $result_invites = spip_abstract_select(
      array('auteurs.id_auteur', 'auteurs.nom'), // SELECT
      array('auteurs' => 'spip_auteurs'), // FROM
      array("auteurs.statut='6forum'"), // WHERE
      '',array(),'','',array(),'','',$serveur);
    
     while($row_invite = spip_abstract_fetch($result_invites, $serveur)) {
      $invites[] = 
       "<p>"
       .typo($row_invite['nom'])
       ."</p>\n";
      }
     return (!$invites) ? "" : join($invites, " ");
    }
    ?>
    • Paladin

      Précision : les invités ici sont des visiteurs inscrits.

    Répondre à ce message

  • 1

    Pour comprendre cette contrib, il faut être coredev, donc je n’en vois pas l’intérêt...

    Par exemple, que font :
    -  champ_sql
    -  spip_abstract_select, spip_abstract_fetch ?

    • un coredev

      l’intérêt, c’est de l’utiliser si tu en as besoin. De l’étudier si tu as envie d’apprendre...

      c’est la première fois que je me prends ’coredev’ comme une insulte :)

      sinon, rtfm, il y a un site de doc technique, à bon entendeur

    Répondre à ce message

  • Ça marche, c’est assez génial, mais pour qu’il n’affiche, dans une boucle, que les admins de la rubrique et pas ceux du site entier, il a fallu que j’enlève la partie /3 : enfin les admins du site

    Tout ça sous spip 1.9.1

    Merci pour cette contrib :-)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

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

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom