Lea Linux:Listuser
Description
Cette extension ListUser, permet d'afficher une liste d'utilisateur du wiki répondant à certains critères.
Installation
C'est simple, il suffit
- de copier le code ci-dessous dans
$MEDIAWIKIROOT/extensions/listuser.php
- d'ajouter dans le fichier
$MEDIAWIKIROOT/LocalSettings.php
la ligne :include_once "extensions/listuser.php" ;
Syntaxe mediawiki
Syntaxe : <listuser [paramètres]>[description des groupes]</listuser>
Où :
- [paramètres] est une combinaison de :
type=table|list
: s'il est omis, c'est une liste de définition qui est utilisé dans le cas contraire c'est une liste soit sous forme de tableau, soit sous forme de liste (au sens HTML du terme),caption='...'
: affiche le titre spécifié à la liste,short
: s'il est spécifié ce paramètre empêche l'affichage des droits (seuls les utilisateurs sont donc affichés).
- [description des groupes] : est une liste séparé par des « | » de :
group=Nom du groupe
: un nom de groupe auquel doit appartenir un utilisateur pour être affichés,notgroup=Nom du groupe
: un nom de groupe auquel ne doit pas appartenir un utilisateur pour être affiché.
Exemple 1
<listuser>group=sysop</listuser>
affichera :
<listuser>group=sysop</listuser>
Exemple 2
<listuser type=table>group=Editeur|notgroup=sysop</listuser>
affichera :
<listuser type=table>group=Editeur|notgroup=sysop</listuser>
Code
<?php
- Licence: GPL v2, see FSF home page for more information
- Author : Frédéric Bonnaud <fred@lea-linux.org>
$wgExtensionFunctions[] = "wfListUserExtension";
function wfListUserExtension() {
global $wgParser;
$wgParser->setHook( "listuser", "renderListUser" );
}
function map_rights($item) {
return '<a href="/index.php/Lea_Linux:Groupe_'.$item.'">'.$item.'</a>' ;
}
function ListUserTestGroups($user, $types) {
foreach ($types['groups'] as $group) {
if (!$user[$group])
return false ;
}
foreach ($types['notgroups'] as $group) {
if ($user[$group])
return false ;
}
return true ;
}
function renderListUser( $input, $argv ) {
$input = utf8_decode($input) ;
$dbr =& wfGetDB( DB_SLAVE );
$args = split('\|', $input ) ;
foreach ($args as $arg) {
list($type, $value) = split('=', $arg) ;
$value = mysql_real_escape_string($value) ;
if ($type == 'group') {
$types['groups'][] = $value ;
} elseif ($type == 'notgroup') {
$types['notgroups'][] = $value ;
}
}
$query = $dbr->doQuery("SELECT user_name, ug_group as group_name FROM mw_user LEFT JOIN mw_user_groups ON ug_user=user_id ORDER BY user_name") ;
if ($argv['type'] == "table") {
$start = "" ;
if ($argv['caption']) $start .="
".$argv['caption']."
\n" ;
$start.="
\n\t\n\t\t\n" ;
$end = "Nom: Droits
\n" ;
$startitem = "\t\n" ; $enditem = "\n" ;
$startname = "\t\t" ; $endname = "\n" ;
$startrights = "\t\t" ; $endrights = "\n" ;
} elseif ($argv['type'] == "list") {
$start = "" ;
if ($argv['caption']) $start .="
".$argv['caption']."
\n" ;
$start.= "
\n" ;
$end = "
\n" ;
$startitem = "\t
" ; $enditem ="
\n" ;
$startname = "" ; $endname = "" ;
$startrights = ", " ; $endrights = "" ;
} else {
$start = "" ;
if ($argv['caption']) $start .="
".$argv['caption']."
\n" ;
$start .= "
\n" ; $end = "
\n" ;
$startitem = "" ; $enditem ="" ;
$startname ="\t
" ; $endname = "
\n" ;
$startrights = "\t
Droits : " ; $endrights = "
\n" ;
}
$output .= $start ;
while ($row = $dbr->fetchRow($query)) {
$users[$row['user_name']][$row['group_name']] = $row['group_name'] ;
}
foreach ($users as $user => $rights) {
if (!ListUserTestGroups($rights, $types))
continue ;
$title = Title::makeTitle(NS_USER, $user) ;
$output .= $startitem ;
$output .= $startname."<a href=\"".$title->escapeLocalUrl()."\">$user</a>".$endname ;
if (!$argv["short"]) {
$rights = array_map("map_rights", $rights) ;
$output .= $startrights.join(", ", $rights).$endrights ;
}
$output .= $enditem ;
}
$output .= $end ;
# Do not cache this wiki page.
# for details see http://public.kitware.com/Wiki/User:Barre/MediaWiki/Extensions
global $wgTitle, $wgDBprefix;
global $wgVersion;
$ts = mktime();
$now = gmdate("YmdHis", $ts + 120);
$ns = $wgTitle->getNamespace();
$ti = wfStrencode($wgTitle->getDBkey());
$version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
if ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
else $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'";
wfQuery($sql, DB_WRITE, "");
return $output;
}
?>
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la Licence Publique Générale du projet GNU, Version 2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation. Pour plus d'informations consulter la GPL sur le site de GNU ou sa traduction non officielle. |