Extension:WikiUserInfo
| This extension stores its source code on a wiki page. Please be aware that this code may be unreviewed or maliciously altered. They may contain security holes, outdated interfaces that are no longer compatible etc. Note: No localisation updates are provided for this extension by translatewiki.net. |
|
WikiUserInfo Release status: beta |
|||
|---|---|---|---|
| Implementation | Parser function | ||
| Description | Allows to get info and options of user specified by name. | ||
| Author(s) | MichaelDubnertalk | ||
| Last version | 0.5 (2010-12-17) | ||
| MediaWiki | 1.6.x and above | ||
| Database changes | no | ||
| License | No license specified | ||
| Download | See below | ||
|
|||
|
|||
|
|||
| Check usage and version matrix | |||
Contents |
What does this extension do? [edit]
This extension adds parser functions that allows to show info and options of wiki user specified by name.
This extension was created with following usages in mind:
- Template for local wiki user that shows all necessary info about - user name, real name, email, link to entry in corporate address book.
- Template for category of pages supported by some user.
- Template that allows to link to user page, but adds user contribution (number of edits) in superscript.
Download instructions [edit]
Please cut and paste the code found below and place it in $IP/extensions/WikiUserInfo/WikiUserInfo.php. Note: $IP stands for the root directory of your MediaWiki installation, the same directory that holds LocalSettings.php.
Installation [edit]
To install this extension, add the following to LocalSettings.php:
require_once("$IP/extensions/WikiUserInfo/WikiUserInfo.php"); #To add new option to silently allowed (without 'showuseroption' right), use this: $wgWikiUserInfoSafeOptions[]='math'; #To clear all allowed options, uncomment this: #$wgWikiUserInfoSafeOptions=array(); #Setup user rights: #$wgGroupPermissions['*']['showuseremail'] = true; #$wgGroupPermissions['*']['showuseroption'] = true;
Code [edit]
<?php # Not a valid entry point, skip unless MEDIAWIKI is defined if (!defined('MEDIAWIKI')) { echo <<<HEREDOC To install this extension, put the following line in LocalSettings.php: require_once( "\$IP/extensions/WikiUserInfo/WikiUserInfo.php" ); HEREDOC; exit( 1 ); } $wgExtensionCredits['other'][] = array( "name" => "WikiUserInfo extension", "author" => "Michael P. Dubner", "version" => 0.4, "url" => "http://www.mediawiki.org/wiki/Extension:WikiUserInfo", "description" => "WikiUserInfo extension" ); $wgExtensionFunctions[] = "wfWikiUserInfoExtension"; $wgHooks['LanguageGetMagic'][] = array("wfWikiUserInfoMagicWords"); $wgWikiUserInfoSafeOptions = array('date', 'gender', 'language', 'nickname', 'skin', 'timecorrection'); $wgAvailableRights[] = 'showuseroption'; if(!array_key_exists('showuseroption', $wgGroupPermissions['*'])) { $wgGroupPermissions['*']['showuseroption'] = false; $wgGroupPermissions['sysop']['showuseroption'] = true; $wgGroupPermissions['bureaucrat']['showuseroption'] = true; } $wgAvailableRights[] = 'showuseremail'; if(!array_key_exists('showuseremail', $wgGroupPermissions['*'])) { $wgGroupPermissions['*']['showuseremail'] = false; $wgGroupPermissions['sysop']['showuseremail'] = true; $wgGroupPermissions['bureaucrat']['showuseremail'] = true; } function wfWikiUserInfoExtension() { global $wgParser; WikiUserInfo_MediaWiki::registerHooks($wgParser); } function wfWikiUserInfoMagicWords(&$magicWords, $langCode) { return WikiUserInfo_MediaWiki::addMagicWord($magicWords, $langCode); } class WikiUserInfo_MediaWiki { static function registerHooks($parser) { $parser->setFunctionHook( 'realname', array(__CLASS__, "realname")); $parser->setFunctionHook( 'email', array(__CLASS__, "email")); $parser->setFunctionHook( 'nickname', array(__CLASS__, "nickname")); $parser->setFunctionHook( 'useroption', array(__CLASS__, "useroption")); $parser->setFunctionHook( 'userregistration', array(__CLASS__, "userregistration")); $parser->setFunctionHook( 'usergroups', array(__CLASS__, "usergroups")); $parser->setFunctionHook( 'useredits', array(__CLASS__, "useredits")); } function addMagicWord(&$magicWords, $langCode) { $magicWords['realname'] = array(0, 'realname'); $magicWords['email'] = array(0, 'email'); $magicWords['nickname'] = array(0, 'nickname'); $magicWords['useroption'] = array(0, 'useroption'); $magicWords['userregistration'] = array(0, 'userregistration'); $magicWords['usergroups'] = array(0, 'usergroups'); $magicWords['useredits'] = array(0, 'useredits'); return true; } static function getUser($parser, $user) { $title = Title::newFromText($user); if(is_object($title) && $title->getNamespace() == NS_USER) $user = $title->getText(); $user = User::newFromName($user); if(!$user) { global $wgUser; $user = $wgUser; } return $user; } static function realname($parser, $user) { $user = WikiUserInfo_MediaWiki::getUser($parser, $user); if (!$user->getRealName()) return $user->getName(); return $user->getRealName(); } static function email($parser, $user) { global $wgUser, $wgOut; if(!$wgUser->isAllowed('showuseremail') && !$wgUser->isAllowed('lookupuser')) { $wgOut->permissionRequired('showuseremail'); return; } $user = WikiUserInfo_MediaWiki::getUser($parser, $user); return $user->getEmail(); } static function nickname($parser, $user) { return WikiUserInfo_MediaWiki::useroption($parser, $user, 'nickname'); } static function useroption($parser, $user, $option) { global $wgUser, $wgOut; if(!in_array($option, $wgWikiUserInfoSafeOptions) && !$wgUser->isAllowed('showuseroption') && !$wgUser->isAllowed('lookupuser')) { $wgOut->permissionRequired('showuseroption'); return; } $user = WikiUserInfo_MediaWiki::getUser($parser, $user); return $user->getOption($option); } static function userregistration($parser, $user) { global $wgUser, $wgOut; if(!$wgUser->isAllowed('showuseroption') && !$wgUser->isAllowed('lookupuser')) { $wgOut->permissionRequired('showuseroption'); return; } $user = WikiUserInfo_MediaWiki::getUser($parser, $user); return $user->getRegistration(); } static function usergroups($parser, $user) { $user = WikiUserInfo_MediaWiki::getUser($parser, $user); return join(',', $user->getGroups()); } static function useredits($parser, $user) { $user = WikiUserInfo_MediaWiki::getUser($parser, $user); return $user->getEditCount(); } }
Documentation [edit]
Rationale [edit]
There are standard function {{gender:..}}) that allow access to one of user options. This extension adds functions to access another options for completeness.
Declared functions [edit]
All of these functions get's user name as their first argument.
- {{#realname:username}}
- Displays 'Real name:' field from user properties.
- {{#nickname:username}}
- Displays 'New signature:' field from user properties.
- {{#userregistration:username}}
- Displays 'Registration time:' field from user properties.
- {{#useredits:username}}
- Displays 'Number of edits:' field from user properties.
- {{#usergroups:username}}
- Displays 'Member of:' field from user properties.
Dangerous functions [edit]
- {{#email:username}}
- Displays 'Email:' field from user properties.
This may be dangerous, so this function is protected by special &'showuseremail' right. - {{#useroption:username|option}}
- Displays selected field from user options.
This may be dangerous, so this function is protected by special &'showuseroption' right, excluding options mentioned in $wgWikiUserInfoSafeOptions array, which defaults to 'date', 'gender', 'language', 'nickname', 'skin' and 'timecorrection'.