<?php
if ( ! defined( 'MEDIAWIKI' ) ) die();
$wgExtensionCredits['other'][] = array(
'name'=>'AdminWhiteList',
'author'=>'Nino Dafonte <nino.dafonte@gmail.com>. Modifiée par José M. Ciges <zaipower@ciges.net>',
'description'=>'Create/Remove admin users from array in LocalSettings. Its useful to add sysop and bureaucrat '.
'groups to users automatically when they log in',
'version'=>'1.1'
);
/*
* Changelog 1.0 -> 1.1
* - The hook is 'UserLoadAfterLoadFromSession' (now this extension works also for users autoauthentified)
* - If the user is not more in $wgAdminWhiteList array he/she is removed from sysop and bureaucrat MediaWiki groups
* - The error reporting uses $wgAdminWhiteListDebug and $wgDebugLogGroups['adminwhitelist'] configuration settings
*/
//constants for error reporting
define("NONSENSITIVE", 1);
define("SENSITIVE", 2);
define("HIGHLYSENSITIVE", 3);
# Register hooks
$wgHooks['UserLoadAfterLoadFromSession'][] = 'wfAdminWhiteList';
class AdminWhiteList {
private $white_list = array();
private $logged_user;
public function __construct($user) {
global $wgAdminWhiteList;
// test if the extension is configured properly
if (isset($wgAdminWhiteList) && is_array($wgAdminWhiteList)) {
$this->white_list = $wgAdminWhiteList;
// get logged user to add it to the user_groups table
$this->logged_user = $user;
} else {
$this->printDebug('AdminWhiteList Extension is loaded but not configured. Please add an '.
'array info with your uids autorized as sysop. Variable: $wgAdminWhiteList', NONSENSITIVE);
}
}
public function manageUserRights() {
// test if the user logged is on our white list
if (in_array($this->logged_user->mName, $this->white_list)) {
$this->printDebug("We must include this user into sysop: {$this->logged_user->mName}", NONSENSITIVE);
$aGroups = $this->logged_user->getEffectiveGroups(false);
$this->printDebug("User groups:", SENSITIVE);
$this->printDebug(implode(" :: ", $aGroups), SENSITIVE);
// if the user is already in the sysop group we have nothing to do
if (!in_array('sysop', $aGroups)) {
// add the logged user to the sysop group
$this->logged_user->addGroup('sysop');
$this->printDebug("User added into sysop", NONSENSITIVE);
}
else {
$this->printDebug("User is already into sysop group. No action done", NONSENSITIVE);
}
// if the user is already in the bureaucrat group we have nothing to do
if (!in_array('bureaucrat', $aGroups)) {
// add the logged user to the sysop group
$this->logged_user->addGroup('bureaucrat');
$this->printDebug("User added into bureaucrat", NONSENSITIVE);
}
else {
$this->printDebug("User is already into bureaucrat group. No action done", NONSENSITIVE);
}
}
else {
// test if the user should be removed from groups sysop and bureaucrat
$aGroups = $this->logged_user->getEffectiveGroups(false);
$this->printDebug("User groups:", SENSITIVE);
$this->printDebug(implode(" :: ", $aGroups), SENSITIVE);
// if the user in the sysop group we should remove the user from it
if (in_array('sysop', $aGroups)) {
// remove the logged user from the sysop group
$this->printDebug("We must remove this user from sysop: {$this->logged_user->mName}", NONSENSITIVE);
$this->logged_user->removeGroup('sysop');
$this->printDebug("User removed from sysop", NONSENSITIVE);
}
else {
$this->printDebug("User not in sysop group. No action done", NONSENSITIVE);
}
// if the user in the bureaucrat group we should remove the user from it
if (in_array('bureaucrat', $aGroups)) {
// remove the logged user from the sysop group
$this->printDebug("We must remove this user from bureaucrat: {$this->logged_user->mName}", NONSENSITIVE);
$this->logged_user->removeGroup('bureaucrat');
$this->printDebug("User removed from bureaucrat", NONSENSITIVE);
}
else {
$this->printDebug("User not in bureaucrat group. No action done", NONSENSITIVE);
}
}
$this->printDebug("Returning to mediawiki loaders.", NONSENSITIVE);
}
/**
* Prints debugging information. $debugText is what you want to print, $debugVal
* is the level at which you want to print the information.
*
* @param string $debugText
* @param string $debugVal
* @access private
*/
private function printDebug( $debugText, $debugVal, $debugArr = null ) {
global $wgAdminWhiteListDebug;
if ( isset( $debugArr ) ) {
if ( $wgAdminWhiteListDebug > $debugVal ) {
$text = $debugText . " " . implode( "::", $debugArr );
wfDebugLog( 'adminwhitelist', $text, false );
}
} else {
if ( $wgAdminWhiteListDebug > $debugVal ) {
wfDebugLog( 'adminwhitelist', $debugText, false );
}
}
}
}
function wfAdminWhiteList(&$user) {
$objWhiteList = new AdminWhiteList($user);
$objWhiteList->manageUserRights();
// To continue the hook loaders
return true;
}
?>