Unexpected schema changes in the middle of code review and run-up to 1.14 freeze
);
# Delete restrictions for it
- $dbw->delete( 'page_restrictions', array( 'pr_page' => $id ), __METHOD__ );
- $dbw->delete( 'user_restrictions',
- array(
- 'ur_page_namespace' => $this->mTitle->getNamespace(),
- 'ur_page_title' => $this->mTitle->getDBKey()
- ), __METHOD__ );
+ $dbw->delete( 'page_restrictions', array ( 'pr_page' => $id ), __METHOD__ );
# Now that it's safely backed up, delete it
$dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__);
'UserArray' => 'includes/UserArray.php',
'UserArrayFromResult' => 'includes/UserArray.php',
'UserMailer' => 'includes/UserMailer.php',
- 'UserRestriction' => 'includes/UserRestriction.php',
- 'UserRestrictionsPager' => 'includes/specials/SpecialListUserRestrictions.php',
'UserRightsProxy' => 'includes/UserRightsProxy.php',
'WatchedItem' => 'includes/WatchedItem.php',
'WatchlistEditor' => 'includes/WatchlistEditor.php',
$wgGroupPermissions['sysop']['apihighlimits'] = true;
$wgGroupPermissions['sysop']['browsearchive'] = true;
$wgGroupPermissions['sysop']['noratelimit'] = true;
-$wgGroupPermissions['sysop']['restrict'] = true;
$wgGroupPermissions['sysop']['movefile'] = true;
#$wgGroupPermissions['sysop']['mergehistory'] = true;
'patrol',
'merge',
'suppress',
- 'restrict',
);
/**
'patrol' => 'patrol-log-page',
'merge' => 'mergelog',
'suppress' => 'suppressionlog',
- 'restrict' => 'restrictionlog',
);
/**
'patrol' => 'patrol-log-header',
'merge' => 'mergelogpagetext',
'suppress' => 'suppressionlogtext',
- 'restrict' => 'restrictionlogtext',
);
/**
'suppress/delete' => 'suppressedarticle',
'suppress/block' => 'blocklogentry',
'suppress/reblock' => 'reblock-logentry',
- 'restrict/restrict' => 'restrictentry',
- 'restrict/remove' => 'restrictremoveentry',
);
/**
'Preferences' => 'users',
'Resetpass' => 'users',
'DeletedContributions' => 'users',
- 'ListUserRestrictions' => 'users',
- 'RestrictUser' => 'users',
'Mostlinked' => 'highuse',
'Mostlinkedcategories' => 'highuse',
} else {
$rv = wfMsgForContent( $wgLogActions[$key], $titleLink );
}
- } elseif( $type == 'restrict' ) {
- if( $params[0] == UserRestriction::PAGE )
- $subj = wfMsgExt( 'restrictlogpage', 'parseinline', $params[1] );
- if( $params[0] == UserRestriction::NAMESPACE )
- $subj = wfMsgExt( 'restrictlognamespace', 'parseinline', $wgLang->getDisplayNsText( $params[1] ) );
- $expiry = '';
- if( $key == 'restrict/restrict' )
- $expiry = $wgLang->translateBlockExpiry( $params[2] );
- if ( $skin ) {
- $rv = wfMsg( $wgLogActions[$key], $titleLink, $subj, $expiry );
- } else {
- $rv = wfMsgForContent( $wgLogActions[$key], $titleLink, $subj, $expiry );
- }
} else {
$details = '';
array_unshift( $params, $titleLink );
}
break;
case 'rights':
- case 'restrict':
$text = $wgContLang->ucfirst( $title->getText() );
$titleLink = $skin->makeLinkObj( Title::makeTitle( NS_USER, $text ) );
break;
'Allpages' => 'SpecialAllpages',
'Prefixindex' => 'SpecialPrefixindex',
'Ipblocklist' => array( 'SpecialPage', 'Ipblocklist' ),
- 'ListUserRestrictions' => array( 'SpecialPage', 'ListUserRestrictions' ),
- 'RemoveRestrictions' => array( 'UnlistedSpecialPage', 'RemoveRestrictions', 'restrict' ),
- 'RestrictUser' => array( 'SpecialPage', 'RestrictUser', 'restrict' ),
'Specialpages' => array( 'UnlistedSpecialPage', 'Specialpages' ),
'Contributions' => 'SpecialContributions',
'Emailuser' => array( 'UnlistedSpecialPage', 'Emailuser' ),
}
$errors = $this->getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries );
- global $wgContLang, $wgLang, $wgEmailConfirmToEdit;
+ global $wgContLang;
+ global $wgLang;
+ global $wgEmailConfirmToEdit;
if ( $wgEmailConfirmToEdit && !$user->isEmailConfirmed() && $action != 'createaccount' ) {
$errors[] = array( 'confirmedittext' );
$blockTimestamp = $wgLang->timeanddate( wfTimestamp( TS_MW, $user->mBlock->mTimestamp ), true );
if ( $blockExpiry == 'infinity' ) {
- $blockExpiry = wfMsg( 'ipbinfinite' );
+ // Entry in database (table ipblocks) is 'infinity' but 'ipboptions' uses 'infinite' or 'indefinite'
+ $scBlockExpiryOptions = wfMsg( 'ipboptions' );
+
+ foreach ( explode( ',', $scBlockExpiryOptions ) as $option ) {
+ if ( strpos( $option, ':' ) == false )
+ continue;
+
+ list ($show, $value) = explode( ":", $option );
+
+ if ( $value == 'infinite' || $value == 'indefinite' ) {
+ $blockExpiry = $show;
+ break;
+ }
+ }
} else {
$blockExpiry = $wgLang->timeanddate( wfTimestamp( TS_MW, $blockExpiry ), true );
}
$errors[] = array( ($block->mAuto ? 'autoblockedtext' : 'blockedtext'), $link, $reason, $ip, $name,
$blockid, $blockExpiry, $intended, $blockTimestamp );
}
-
+
// Remove the errors being ignored.
-
+
foreach( $errors as $index => $error ) {
$error_key = is_array($error) ? $error[0] : $error;
* @return \type{\array} Array of arrays of the arguments to wfMsg to explain permissions problems.
*/
private function getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries = true ) {
- global $wgLang;
-
wfProfileIn( __METHOD__ );
$errors = array();
$errors[] = $return;
}
- // Check per-user restrictions
- if( $doExpensiveQueries && $action != 'read' ) {
- $rs = UserRestriction::fetchForTitle( $user, $this );
- if( !$rs )
- $rs = UserRestriction::fetchForNamespace( $user, $this->getNamespace() );
- if( $rs ) {
- $r = $rs[0];
- if( !$r->deleteIfExpired() ) {
- $error = array();
- $start = array( $wgLang->date( $r->getTimestamp() ), $wgLang->time( $r->getTimestamp() ) );
- if( $r->isPage() )
- $error = array( 'userrestricted-page', $this->getFullText(),
- $r->getBlockerText(), $r->getReason(), $start[0], $start[1] );
- elseif( $r->isNamespace() )
- $error = array( 'userrestricted-namespace', $wgLang->getDisplayNsText( $this->getNamespace() ),
- $r->getBlockerText(), $r->getReason(), $start[0], $start[1] );
-
- if( $r->getExpiry() == 'infinity' ) {
- $error[0] .= '-indef';
- } else {
- $error[] = $wgLang->date( $r->getExpiry() );
- $error[] = $wgLang->time( $r->getExpiry() );
- }
- $errors[] = $error;
- }
- }
- }
-
wfProfileOut( __METHOD__ );
return $errors;
}
$log->addEntry( 'move_prot', $nt, $comment, array($this->getPrefixedText()) ); // FIXME: $params?
}
- # Update user restrictions
- $dbw->update( 'user_restrictions',
- array( 'ur_page_namespace' => $nt->getNamespace(), 'ur_page_title' => $nt->getDBKey() ),
- array( 'ur_page_namespace' => $this->getNamespace(), 'ur_page_title' => $this->getDBKey() ),
- __METHOD__ );
-
# Update watchlists
$oldnamespace = $this->getNamespace() & ~1;
$newnamespace = $nt->getNamespace() & ~1;
'markbotedits',
'minoredit',
'move',
- 'movefile',
+ 'movepage',
'move-rootuserpages',
'move-subpages',
'nominornewtalk',
'proxyunbannable',
'purge',
'read',
- 'restrict',
'reupload',
'reupload-shared',
'rollback',
+++ /dev/null
-<?php
-
-/**
- * Object that represents a user restriction
- */
-class UserRestriction {
- const PAGE = 'page';
- const NAMESPACE = 'namespace';
-
- private $mId, $mType, $mNamespace, $mPage, $mSubjectText, $mSubjectId,
- $mBlockerId, $mBlockerText, $mReason, $mTimestamp, $mExpiry;
-
- public static function newFromRow( $row ) {
- if( !$row )
- return null;
-
- $obj = new UserRestriction();
- $obj->mId = $row->ur_id;
- $obj->mType = $row->ur_type;
- if( $obj->mType == self::PAGE ) {
- $obj->mPage = Title::makeTitle( $row->ur_page_namespace, $row->ur_page_title );
- } elseif( $obj->mType == self::NAMESPACE ) {
- $obj->mNamespace = $row->ur_namespace;
- } else {
- throw new MWException( "Unknown user restriction type: {$row->ur_type}" );
- }
-
- $obj->mSubjectId = $row->ur_user;
- $obj->mSubjectText = $row->ur_user_text;
- $obj->mBlockerId = $row->ur_by;
- $obj->mBlockerText = $row->ur_by_text;
- $obj->mReason = $row->ur_reason;
- $obj->mTimestamp = wfTimestamp( TS_MW, $row->ur_timestamp );
- $obj->mExpiry = $row->ur_expiry;
- return $obj;
- }
-
- public static function fetchForUser( $user, $forWrite = false ) {
- $dbr = wfGetDB( $forWrite ? DB_MASTER : DB_SLAVE );
- if( is_int( $user ) )
- $query = array( 'ur_user' => $user );
- else
- $query = array( 'ur_user_text' => $user );
- $res = $dbr->select( 'user_restrictions', '*', $query, __METHOD__ );
- $result = array();
- foreach( $res as $row ) {
- $result[] = self::newFromRow( $row );
- }
- return $result;
- }
-
- public static function fetchForTitle( $user, $title ) {
- $dbr = wfGetDB( DB_SLAVE );
- if( $user->isLoggedIn() )
- $query = array( 'ur_user' => $user->getId() );
- else
- $query = array( 'ur_user_text' => $user->getName() );
- $query['ur_page_namespace'] = $title->getNamespace();
- $query['ur_page_title'] = $title->getDBKey();
- $res = $dbr->select( 'user_restrictions', '*', $query, __METHOD__ );
- $result = array();
- foreach( $res as $row ) {
- $result[] = self::newFromRow( $row );
- }
- return $result;
- }
-
- public static function fetchForNamespace( $user, $ns ) {
- $dbr = wfGetDB( DB_SLAVE );
- if( $user->isLoggedIn() )
- $query = array( 'ur_user' => $user->getId() );
- else
- $query = array( 'ur_user_text' => $user->getName() );
- $query['ur_namespace'] = $ns;
- $res = $dbr->select( 'user_restrictions', '*', $query, __METHOD__ );
- $result = array();
- foreach( $res as $row ) {
- $result[] = self::newFromRow( $row );
- }
- return $result;
- }
-
- public static function newFromId( $id, $forWrite = false ) {
- $dbr = wfGetDB( $forWrite ? DB_MASTER : DB_SLAVE );
- if( !$id || !is_numeric( $id ) )
- return null;
- $res = $dbr->selectRow( 'user_restrictions', '*', array( 'ur_id' => $id ), __METHOD__ );
- return self::newFromRow( $res );
- }
-
- public function getId() { return $this->mId; }
- public function setId( $v ) { $this->mId = $v; }
- public function getType() { return $this->mType; }
- public function setType( $v ) { $this->mType = $v; }
- public function getNamespace() { return $this->mNamespace; }
- public function setNamespace( $v ) { $this->mNamespace = $v; }
- public function getPage() { return $this->mPage; }
- public function setPage( $v ) { $this->mPage = $v; }
- public function getSubjectId() { return $this->mSubjectId; }
- public function setSubjectId( $v ) { $this->mSubjectId = $v; }
- public function getSubjectText() { return $this->mSubjectText; }
- public function setSubjectText( $v ) { $this->mSubjectText = $v; }
- public function getBlockerId() { return $this->mBlockerId; }
- public function setBlockerId( $v ) { $this->mBlockerId = $v; }
- public function getBlockerText() { return $this->mBlockerText; }
- public function setBlockerText( $v ) { $this->mBlockerText = $v; }
- public function getReason() { return $this->mReason; }
- public function setReason( $v ) { $this->mReason = $v; }
- public function getTimestamp() { return $this->mTimestamp; }
- public function setTimestamp( $v ) { $this->mTimestamp = $v; }
- public function getExpiry() { return $this->mExpiry; }
- public function setExpiry( $v ) { $this->mExpiry = $v; }
-
- public function isPage() {
- return $this->mType == self::PAGE;
- }
- public function isNamespace() {
- return $this->mType == self::NAMESPACE;
- }
-
- public function isExpired() {
- return is_numeric( $this->mExpiry ) && $this->mExpiry < wfTimestampNow( TS_MW );
- }
-
- public function deleteIfExpired() {
- if( $this->isExpired() ) {
- $this->delete();
- return true;
- } else {
- return false;
- }
- }
-
- public function delete() {
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'user_restrictions', array( 'ur_id' => $this->mId ), __METHOD__ );
- return $dbw->affectedRows();
- }
-
- public static function purgeExpired() {
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'user_restrictions', array( 'ur_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
- }
-
- public function commit() {
- $dbw = wfGetDB( DB_MASTER );
- $this->setId( $dbw->nextSequenceValue('user_restrictions_ur_id_val') );
- $row = array(
- 'ur_id' => $this->mId,
- 'ur_type' => $this->mType,
- 'ur_user' => $this->mSubjectId,
- 'ur_user_text' => $this->mSubjectText,
- 'ur_by' => $this->mBlockerId,
- 'ur_by_text' => $this->mBlockerText,
- 'ur_reason' => $this->mReason,
- 'ur_timestamp' => $dbw->timestamp( $this->mTimestamp ),
- 'ur_expiry' => $this->mExpiry,
- );
- if( $this->isPage() ) {
- $row['ur_page_namespace'] = $this->mPage->getNamespace();
- $row['ur_page_title'] = $this->mPage->getDbKey();
- }
- if( $this->isNamespace() ) {
- $row['ur_namespace'] = $this->mNamespace;
- }
- $dbw->insert( 'user_restrictions', $row, __METHOD__ );
- }
-
- public static function formatType( $type ) {
- return wfMsg( 'userrestrictiontype-' . $type );
- }
-
- /**
- * Converts expiry which user input to the internal representation.
- * Returns false if invalid expiry is set, Block::infinity() on empty value,
- * Block::infinity() on infinity or 14-symbol timestamp
- */
- public static function convertExpiry( $expiry ) {
- if( !$expiry )
- return Block::infinity();
- if( in_array( $expiry, array( 'infinite', 'infinity', 'indefinite' ) ) )
- return Block::infinity();
- $unix = @strtotime( $expiry );
- if( !$unix || $unix === -1 )
- return false;
- else
- return wfTimestamp( TS_MW, $unix );
- }
-}
$subjlink = $sk->userLink( $r->getSubjectId(), $r->getSubjectText() ) .
$sk->userToolLinks( $r->getSubjectId(), $r->getSubjectText() );
$expiry = is_numeric( $r->getExpiry() ) ?
- wfMsg( 'listuserrestrictions-row-expiry', $wgLang->date( $r->getExpiry() ), $wgLang->time( $r->getExpiry() ) ) :
+ wfMsg( 'listuserrestrictions-row-expiry', $wgLang->timeanddate( $r->getExpiry() ) ) :
wfMsg( 'ipbinfinite' );
$msg = '';
if( $r->isNamespace() ) {
if( $r->isNamespace() )
$params[] = $r->getNamespace();
$log->addEntry( 'remove', Title::makeTitle( NS_USER, $r->getSubjectText() ), $reason, $params );
- $userObj = User::newFromName( $r->getSubjectText(), false );
- $userObj->invalidateCache();
return $result;
}
function wfSpecialRestrictUser( $par = null ) {
global $wgOut, $wgRequest;
- $wgOut->addHTML( wfMsgExt( 'restrictuser-description', 'parse' ) );
-
$user = $userOrig = null;
if( $par ) {
$userOrig = $par;
}
public static function existingRestrictions( $restrictions ) {
+ //TODO: autoload?
+ require_once( dirname( __FILE__ ) . '/SpecialListUserRestrictions.php' );
$s = Xml::fieldset( wfMsg( 'restrictuser-existing' ) ) . '<ul>';
foreach( $restrictions as $r )
$s .= UserRestrictionsPager::formatRestriction( $r );
$l = new LogPage( 'restrict' );
$l->addEntry( 'restrict', Title::makeTitle( NS_USER, $user ), $r->getReason(),
array( $r->getType(), $r->getPage()->getFullText(), $logExpiry) );
- self::invalidateCache( $user );
}
public static function namespaceRestrictionForm( $uid, $user, $oldRestrictions ) {
$wgUser->matchEditToken( $wgRequest->getVal( 'edittoken' ) ) ) {
$ns = $wgRequest->getVal( 'namespace' );
if( $wgContLang->getNsText( $ns ) === false )
- $error = array( 'restrictuser-badnamespace' );
+ $error = wfMsgExt( 'restrictuser-badnamespace', 'parseinline' );
elseif( UserRestriction::convertExpiry( $wgRequest->getVal( 'expiry' ) ) === false )
- $error = array( 'restrictuser-badexpiry', $wgRequest->getVal( 'expiry' ) );
+ $error = wfMsgExt( 'restrictuser-badexpiry', 'parseinline', $wgRequest->getVal( 'expiry' ) );
else
foreach( $oldRestrictions as $r )
if( $r->isNamespace() && $r->getNamespace() == $ns )
- $error = array( 'restrictuser-dupnamespace' );
+ $error = wfMsgExt( 'restrictuser-dupnamespace', 'parse' );
if( !$error ) {
self::doNamespaceRestriction( $uid, $user );
$success = array('restrictuser-success', $user);
$l = new LogPage( 'restrict' );
$l->addEntry( 'restrict', Title::makeTitle( NS_USER, $user ), $r->getReason(),
array( $r->getType(), $r->getNamespace(), $logExpiry ) );
- self::invalidateCache( $user );
- }
-
- private static function invalidateCache( $user ) {
- $userObj = User::newFromName( $user, false );
- $userObj->invalidateCache();
}
}
'LinkSearch' => array( 'LinkSearch' ),
'DeletedContributions' => array( 'DeletedContributions' ),
'Interwiki' => array( 'Interwiki' ),
- 'ListUserRestrictions' => array( 'ListUserRestrictions' ),
- 'RemoveRestrictions' => array( 'RemoveRestrictions' ),
- 'RestrictUser' => array( 'RestrictUser' ),
);
/**
'edit-no-change' => 'Your edit was ignored, because no change was made to the text.',
'edit-already-exists' => 'Could not create a new page.
It already exists.',
-'userrestricted-page' => '<big>\'\'\'Your user name or IP address has been restricted from editing page "$1".\'\'\'</big>
-
-The restriction was set by [[User:$2|$2]].
-The reason given is \'\'$3\'\'.
-
-The restriction was set on $4 at $5 and expires on $6 at $7.
-
-You can contact [[User:$2|$2]] or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the restriction.',
-'userrestricted-namespace' => "<big>'''Your user name or IP address has been restricted from editing the $1 namespace.'''</big>
-
-The restriction was put by [[User:$2|$2]].
-The reason given is ''$3''.
-
-Restriction was put on $4 at $5 and expires on $6 at $7.
-
-You can contact [[User:$2|$2]] or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the restriction.",
-'userrestricted-page-indef' => '<big>\'\'\'Your user name or IP address has been restricted from editing page "$1".\'\'\'</big>
-
-The restriction was set by [[User:$2|$2]].
-The reason given is \'\'$3\'\'.
-
-The restriction was set on $4 at $5 and will not expire.
-
-You can contact [[User:$2|$2]] or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the restriction.',
-'userrestricted-namespace-indef' => "<big>'''Your user name or IP address has been restricted from editing $1 namespace.'''</big>
-
-The restriction was put by [[User:$2|$2]].
-The reason given is ''$3''.
-
-Restriction was put on $4 at $5 and will not expire.
-
-You can contact [[User:$2|$2]] or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the restriction.",
# Parser/template warnings
'expensive-parserfunction-warning' => 'Warning: This page contains too many expensive parser function calls.
'ipbsubmit' => 'Block this user',
'ipbother' => 'Other time:',
'ipboptions' => '2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite', # display1:time1,display2:time2,...
-'ipbinfinite' => 'infinite',
'ipbotheroption' => 'other',
'ipbotherreason' => 'Other/additional reason:',
'ipbhidename' => 'Hide username from the block log, active block list and user list',
You cannot create an account',
'cant-block-while-blocked' => 'You cannot block other users while you are blocked.',
-# Special:ListUserRestrictions
-'listuserrestrictions' => 'List of user restrictions',
-'listuserrestrictions-intro' => 'This list contains all restrictions from editing certain pages and namespaces put on users.
-[[Special:Ipblocklist|Blocks]] are not listed here.',
-'listuserrestrictions-row-ns' => 'restricted $1 from editing $2 namespace ($3)',
-'listuserrestrictions-row-page' => 'restricted $1 from editing $2 ($3)',
-'listuserrestrictions-row-expiry' => 'expires on $1 at $2',
-'listuserrestrictions-legend' => 'Find a restriction',
-'listuserrestrictions-type' => 'Type:',
-'listuserrestrictions-user' => 'User:',
-'listuserrestrictions-namespace' => 'Namespace:',
-'listuserrestrictions-page' => 'Page:',
-'listuserrestrictions-submit' => 'Go',
-'listuserrestrictions-notfound' => 'There is no restriction that matches specified criteria.',
-'listuserrestrictions-empty' => 'This list is empty.',
-'listuserrestrictions-remove' => 'remove',
-'userrestrictiontype-none' => '(none)',
-'userrestrictiontype-namespace' => 'Namespace',
-'userrestrictiontype-page' => 'Page',
-
-# Special:RemoveRestrictions
-'removerestrictions' => 'Remove the restriction for a user',
-'removerestrictions-intro' => 'Use the form below to remove a restriction from a certain user.',
-'removerestrictions-noid' => 'No restriction ID was specified.',
-'removerestrictions-wrongid' => 'Restriction with that ID not found.
-Most probably someone has removed it or it expired.',
-'removerestrictions-legend' => 'Remove a restriction',
-'removerestrictions-user' => 'Restricted user:',
-'removerestrictions-type' => 'Restriction type:',
-'removerestrictions-page' => 'Page:',
-'removerestrictions-namespace' => 'Namespace:',
-'removerestrictions-reason' => 'Reason:',
-'removerestrictions-submit' => 'Remove the restriction',
-'removerestrictions-success' => 'Successfully removed the restriction from [[User:$1|$1]].',
-
-# Restrict user
-'restrictuser' => 'Restrict user',
-'restrictuser-userselect' => 'Select a user',
-'restrictuser-user' => 'User:',
-'restrictuser-go' => 'Restrict user',
-'restrictuser-notfound' => 'User not found',
-'restrictuser-existing' => 'Existing restrictions',
-'restrictuser-legend-page' => 'Restrict from editing a page',
-'restrictuser-legend-namespace' => 'Restrict from editing a namespace',
-'restrictuser-title' => 'Page to restrict:',
-'restrictuser-namespace' => 'Namespace:',
-'restrictuser-expiry' => 'Expires:',
-'restrictuser-reason' => 'Reason:',
-'restrictuser-submit' => 'Restrict user',
-'restrictuser-badtitle' => 'Invalid title specified: $1.',
-'restrictuser-badnamespace' => 'Invalid namespace specified.',
-'restrictuser-badexpiry' => 'Invalid expiry specified: $1.',
-'restrictuser-duptitle' => 'User is already restricted from editing this title.',
-'restrictuser-dupnamespace' => 'User is already restricted from editing this namespace.',
-'restrictuser-success' => 'Successfully restricted user $1.',
-'restrictuser-description' => 'Use the form below to block write access to a specific page or namespace from a specific IP address or username.
-This should be done only in accordance with policy. Fill in a specific reason below.',
-
-# Special:Log/restrict
-'restrictionlog' => 'User restriction log',
-'restrictionlogtext' => 'This log contains all restrictions put on users by administrators.',
-'restrictentry' => 'restricted $1 from editing $2 (expiry set to $3)',
-'restrictremoveentry' => 'removed restriction from $1 for editing $2',
-'restrictlognamespace' => '$1 namespace',
-'restrictlogpage' => '[[$1]]', # do not translate or duplicate this message to other languages
-
# Developer tools
'lockdb' => 'Lock database',
'unlockdb' => 'Unlock database',
+++ /dev/null
--- Allows admins to block user from editing certain namespaces or pages
-
-CREATE TABLE /*$wgDBprefix*/user_restrictions (
- -- ID of the restriction
- ur_id int NOT NULL auto_increment,
-
- -- Restriction type. Block from either editing namespace or page
- ur_type ENUM('namespace','page') NOT NULL,
- -- Namespace to restrict if ur_type = namespace
- ur_namespace int default NULL,
- -- Page to restrict if ur_type = page
- ur_page_namespace int default NULL,
- ur_page_title varchar(255) binary default '',
-
- -- User that is restricted
- ur_user int unsigned NOT NULL,
- ur_user_text varchar(255) NOT NULL,
-
- -- User who has done this restriction
- ur_by int unsigned NOT NULL,
- ur_by_text varchar(255) binary NOT NULL default '',
- -- Reason for this restriction
- ur_reason mediumblob NOT NULL,
-
- -- Time when this restriction was made
- ur_timestamp varbinary(14) NOT NULL default '',
- -- Expiry or "infinity"
- ur_expiry varbinary(14) NOT NULL default '',
-
- PRIMARY KEY ur_id (ur_id),
- -- For looking up restrictions for user and title
- INDEX ur_user_page(ur_user,ur_page_namespace,ur_page_title(255)),
- INDEX ur_user_namespace(ur_user,ur_namespace),
- -- For Special:ListUserRestrictions
- INDEX ur_type (ur_type,ur_timestamp),
- INDEX ur_namespace (ur_namespace,ur_timestamp),
- INDEX ur_page (ur_page_namespace,ur_page_title,ur_timestamp),
- INDEX ur_timestamp (ur_timestamp),
- -- For quick removal of expired restrictions
- INDEX ur_expiry (ur_expiry)
-) /*$wgDBTableOptions*/;
'edit-conflict',
'edit-no-change',
'edit-already-exists',
- 'userrestricted-page',
- 'userrestricted-namespace',
- 'userrestricted-page-indef',
- 'userrestricted-namespace-indef',
),
'parserwarnings' => array(
'expensive-parserfunction-warning',
'ipbsubmit',
'ipbother',
'ipboptions',
- 'ipbinfinite',
'ipbotheroption',
'ipbotherreason',
'ipbhidename',
'sorbs_create_account_reason',
'cant-block-while-blocked',
),
- 'listuserrestrictions' => array(
- 'listuserrestrictions',
- 'listuserrestrictions-intro',
- 'listuserrestrictions-row-ns',
- 'listuserrestrictions-row-page',
- 'listuserrestrictions-row-expiry',
- 'listuserrestrictions-legend',
- 'listuserrestrictions-type',
- 'listuserrestrictions-user',
- 'listuserrestrictions-namespace',
- 'listuserrestrictions-page',
- 'listuserrestrictions-submit',
- 'listuserrestrictions-notfound',
- 'listuserrestrictions-empty',
- 'listuserrestrictions-remove',
- 'userrestrictiontype-none',
- 'userrestrictiontype-namespace',
- 'userrestrictiontype-page',
- ),
- 'removerestrictions' => array(
- 'removerestrictions',
- 'removerestrictions-intro',
- 'removerestrictions-noid',
- 'removerestrictions-wrongid',
- 'removerestrictions-legend',
- 'removerestrictions-user',
- 'removerestrictions-type',
- 'removerestrictions-page',
- 'removerestrictions-namespace',
- 'removerestrictions-reason',
- 'removerestrictions-submit',
- 'removerestrictions-success',
- ),
- 'restrictuser' => array(
- 'restrictuser',
- 'restrictuser-userselect',
- 'restrictuser-user',
- 'restrictuser-go',
- 'restrictuser-notfound',
- 'restrictuser-existing',
- 'restrictuser-legend-page',
- 'restrictuser-legend-namespace',
- 'restrictuser-title',
- 'restrictuser-namespace',
- 'restrictuser-expiry',
- 'restrictuser-reason',
- 'restrictuser-submit',
- 'restrictuser-badtitle',
- 'restrictuser-badnamespace',
- 'restrictuser-badexpiry',
- 'restrictuser-duptitle',
- 'restrictuser-dupnamespace',
- 'restrictuser-success',
- 'restrictuser-description',
- ),
- 'restrictlog' => array(
- 'restrictionlog',
- 'restrictionlogtext',
- 'restrictentry',
- 'restrictremoveentry',
- 'restrictlognamespace',
- 'restrictlogpage',
- ),
'developertools' => array(
'lockdb',
'unlockdb',
'sp-contributions' => '',
'whatlinkshere' => 'What links here',
'block' => 'Block/unblock',
- 'listuserrestrictions' => 'Special:ListUserRestrictions',
- 'removerestrictions' => 'Special:RemoveRestrictions',
- 'restrictuser' => 'Restrict user',
- 'restrictlog' => 'Special:Log/restrict',
'developertools' => 'Developer tools',
'movepage' => 'Move page',
'export' => 'Export',
'site_stats', 'hitcounter', 'ipblocks', 'image', 'oldimage',
'recentchanges', 'watchlist', 'math', 'interwiki',
'querycache', 'objectcache', 'job', 'redirect', 'querycachetwo',
- 'archive', 'user_groups', 'page_props', 'category', 'user_restrictions',
+ 'archive', 'user_groups', 'page_props', 'category'
);
if ($wgDBtype === 'mysql')
PRIMARY KEY (ul_key)
) /*$wgDBTableOptions*/;
--- Allows admins to block user from editing certain namespaces or pages
-CREATE TABLE /*$wgDBprefix*/user_restrictions (
- -- ID of the restriction
- ur_id int NOT NULL auto_increment,
-
- -- Restriction type. Block from either editing namespace or page
- ur_type ENUM('namespace','page') NOT NULL,
- -- Namespace to restrict if ur_type = namespace
- ur_namespace int default NULL,
- -- Page to restrict if ur_type = page
- ur_page_namespace int default NULL,
- ur_page_title varchar(255) binary default '',
-
- -- User that is restricted
- ur_user int unsigned NOT NULL,
- ur_user_text varchar(255) NOT NULL,
-
- -- User who has done this restriction
- ur_by int unsigned NOT NULL,
- ur_by_text varchar(255) binary NOT NULL default '',
- -- Reason for this restriction
- ur_reason mediumblob NOT NULL,
-
- -- Time when this restriction was made
- ur_timestamp varbinary(14) NOT NULL default '',
- -- Expiry or "infinity"
- ur_expiry varbinary(14) NOT NULL default '',
-
- PRIMARY KEY ur_id (ur_id),
- -- For looking up restrictions for user and title
- INDEX ur_user (ur_user),
- INDEX ur_user_page(ur_user,ur_page_namespace,ur_page_title(255)),
- INDEX ur_user_namespace(ur_user,ur_namespace),
- -- For Special:ListUserRestrictions
- INDEX ur_type (ur_type,ur_timestamp),
- INDEX ur_namespace (ur_namespace,ur_timestamp),
- INDEX ur_page (ur_page_namespace,ur_page_title,ur_timestamp),
- INDEX ur_timestamp (ur_timestamp),
- -- For quick removal of expired restrictions
- INDEX ur_expiry (ur_expiry)
-) /*$wgDBTableOptions*/;
-
-
-- vim: sw=2 sts=2 et
array( 'update_password_format' ),
// 1.14
- array( 'add_field', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ),
+ array( 'add_field', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ),
array( 'do_active_users_init' ),
- array( 'add_field', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
- array( 'add_table', 'user_restrictions', 'patch-user_restrictions.sql' ),
+ array( 'add_field', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' )
);