Extension:AdminWhiteList/version 1.0

From MediaWiki.org

Jump to: navigation, search
<?php 
 
if ( ! defined( 'MEDIAWIKI' ) ) die();
 
$wgExtensionCredits['other'][] = array(
    'name'=>'AdminWhiteList',
    'author'=>'Nino Dafonte &lt;nino.dafonte@gmail.com&gt;',
    'description'=>'Create admin users from array in LocalSettings. Its useful to add sysop and bureaucrat '.
                   'groups to users automatically when they log in',
    'version'=>'1.0'
);
 
$wgHooks['UserLoginComplete'][] = 'wfAdminWhiteList';
 
class AdminWhiteList {
 
	private $debug_info = false;
	private $white_list = array();
	private $logged_user;
 
	public function __construct($user) {
		global $wgAdminWhiteList, $wgAdminWhiteListDebug;	
		// test if we must show debug info or not
		if (isset($wgAdminWhiteListDebug) && $wgAdminWhiteListDebug) { 
			$this->debug_info = true; 
		} else {
			$this->debug_info = false;
		}
		// 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->print_debug('AdminWhiteList Extension is loaded but not configured. Please add an '.
			                   'array info with your uids autorized as sysop. Variable: $wgAdminWhiteList');
		}
	}
 
	public function manageUserRights() {
		// test if the user logged is on our white list
		if (in_array($this->logged_user->mName, $this->white_list)) {
			$this->print_debug("We must include this user into sysop: {$this->logged_user->mName}");
 
			// test if the user is sysop right now
			$aGroups = $this->logged_user->getEffectiveGroups(false);
			$this->print_debug("User groups:");
			$this->print_debug(implode(" :: ", $aGroups));
			// 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->print_debug("User added into sysop");
			} else {
				$this->print_debug("User is already into sysop group. No action done");	
			}
 
			// 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->print_debug("User added into bureaucrat");
			} else {
				$this->print_debug("User is already into bureaucrat group. No action done");	
			}
 
		}
		 $this->print_debug("Returning to mediawiki loaders.");
	}
 
	private function print_debug($str) {
		if ($this->debug_info) {
			echo $str . "<br />";
		}
	}
 
}
 
function wfAdminWhiteList(&$user) {	
 
	$objWhiteList = new AdminWhiteList($user);
	$objWhiteList->manageUserRights();
 
	// To continue the hook loaders
	return true;
 
}
 
?>