Extension:AdminWhiteList/version 1.1
From MediaWiki.org
<?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; } ?>
