(added in 1.13)
$status: Status object, modify this to throw an error. Overridden by $error
(added in 1.20)
+$suppress: Whether this is a suppression deletion or not (added in 1.27)
'ArticleDeleteAfterSuccess': Output after an article has been deleted.
$title: Title of the article that has been deleted.
* @return string
*/
function wfFormatStackFrame( $frame ) {
- return isset( $frame['class'] ) ?
- $frame['class'] . '::' . $frame['function'] :
+ if ( !isset( $frame['function'] ) ) {
+ return 'NO_FUNCTION_GIVEN';
+ }
+ return isset( $frame['class'] ) && isset( $frame['type'] ) ?
+ $frame['class'] . $frame['type'] . $frame['function'] :
$frame['function'];
}
* Deprecated for public use, use Title::makeTitle() with fragment parameter.
* Still in active use privately.
*
+ * @private
* @param string $fragment Text
*/
public function setFragment( $fragment ) {
}
}
+ /**
+ * Format a line
+ *
+ * @since 1.27
+ *
+ * @param RecentChange $rc Passed by reference
+ * @param bool $watched (default false)
+ * @param int $linenumber (default null)
+ *
+ * @return string|bool
+ */
+ public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
+ throw new RuntimeException( 'recentChangesLine should be implemented' );
+ }
+
/**
* Sets the list to use a "<li class='watchlist-(namespace)-(page)'>" tag
* @param bool $value
/**
* Format a line for enhanced recentchange (aka with javascript and block of lines).
*
- * @param RecentChange $baseRC
+ * @param RecentChange $rc
* @param bool $watched
+ * @param int $linenumber (default null)
*
* @return string
*/
- public function recentChangesLine( &$baseRC, $watched = false ) {
+ public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
$date = $this->getLanguage()->userDate(
- $baseRC->mAttribs['rc_timestamp'],
+ $rc->mAttribs['rc_timestamp'],
$this->getUser()
);
$this->lastdate = $date;
}
- $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $baseRC, $watched );
+ $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $rc, $watched );
$this->addCacheEntry( $cacheEntry );
return $ret;
}
$x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
- // @codingStandardsIgnoreFile Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
+ // @codingStandardsIgnoreStart Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
for ( ; $x < $x1; $x++ ) {
// @codingStandardsIgnoreEnd
$line = $flip ? $this->yv[$x] : $this->xv[$x];
if ( $y > $this->seq[$k - 1] ) {
assert( '$y < $this->seq[$k]' );
// Optimization: this is a common case:
- // next match is just replacing previous match.
+ // next match is just replacing previous match.
$this->in_seq[$this->seq[$k]] = false;
$this->seq[$k] = $y;
$this->in_seq[$y] = 1;
$text .= "{$pad}#{$level} [internal function]: ";
}
- if ( isset( $frame['class'] ) ) {
+ if ( isset( $frame['class'] ) && isset( $frame['type'] ) && isset( $frame['function'] ) ) {
$text .= $frame['class'] . $frame['type'] . $frame['function'];
- } else {
+ } elseif ( isset( $frame['function'] ) ) {
$text .= $frame['function'];
+ } else {
+ $text .= 'NO_FUNCTION_GIVEN';
}
if ( isset( $frame['args'] ) ) {
<?php
-// @codingStandardsIgnoreFile
-// PHPCS can't handle the level of nesting in this file
/**
* Formatting of image metadata values into human readable form.
*
application/x-tar [ARCHIVE]
application/x-stuffit [ARCHIVE]
application/x-opc+zip [ARCHIVE]
-
+application/x-7z-compressed [ARCHIVE]
text/javascript application/x-javascript application/x-ecmascript text/ecmascript [EXECUTABLE]
application/x-bash [EXECUTABLE]
application/vnd.wap.wmlc wmlc
application/vnd.wap.wmlscriptc wmlsc
application/voicexml+xml vxml
+application/x-7z-compressed 7z
application/x-bcpio bcpio
application/x-bzip bz
application/x-bzip2 bz2
$user = is_null( $user ) ? $wgUser : $user;
if ( !Hooks::run( 'ArticleDelete',
- array( &$this, &$user, &$reason, &$error, &$status )
+ array( &$this, &$user, &$reason, &$error, &$status, $suppress )
) ) {
if ( $status->isOK() ) {
// Hook aborted but didn't set a fatal status
# either a GET parameter or a subpage-style parameter, so have a member
# variable for it.
protected $mTarget;
+ /*
+ * @var null|User $mFetchedUser The user object of the target username or null.
+ */
+ protected $mFetchedUser = null;
protected $isself = false;
public function __construct() {
// any groups, it's a bit silly to give them the user search prompt.
$user = $this->getUser();
+ $request = $this->getRequest();
+ $out = $this->getOutput();
/*
* If the user is blocked and they only have "partial" access
throw new UserBlockedError( $user->getBlock() );
}
- $request = $this->getRequest();
-
if ( $par !== null ) {
$this->mTarget = $par;
} else {
$this->isself = true;
}
+ $fetchedStatus = $this->fetchUser( $this->mTarget );
+ if ( $fetchedStatus->isOk() ) {
+ $this->mFetchedUser = $fetchedStatus->value;
+ }
+
if ( !$this->userCanChangeRights( $user, true ) ) {
if ( $this->isself && $request->getCheck( 'success' ) ) {
// bug 48609: if the user just removed its own rights, this would
// leads it in a "permissions error" page. In that case, show a
// message that it can't anymore use this page instead of an error
$this->setHeaders();
- $out = $this->getOutput();
$out->wrapWikiMsg( "<div class=\"successbox\">\n$1\n</div>", 'userrights-removed-self' );
$out->returnToMain();
throw new PermissionsError( null, array( array( $msg ) ) );
}
+ // show a successbox, if the user rights was saved successfully
+ if ( $request->getCheck( 'success' ) && $this->mFetchedUser !== null ) {
+ $out->wrapWikiMsg(
+ "<div class=\"successbox\">\n$1\n</div>",
+ array( 'savedrights', $this->mFetchedUser->getName() )
+ );
+ }
+
$this->checkReadOnly();
$this->setHeaders();
$this->outputHeader();
- $out = $this->getOutput();
$out->addModuleStyles( 'mediawiki.special' );
$this->addHelpLink( 'Help:Assigning permissions' );
$user->matchEditToken( $request->getVal( 'wpEditToken' ), $this->mTarget )
) {
// save settings
- $status = $this->fetchUser( $this->mTarget );
- if ( !$status->isOK() ) {
- $this->getOutput()->addWikiText( $status->getWikiText() );
+ if ( !$fetchedStatus->isOK() ) {
+ $this->getOutput()->addWikiText( $fetchedStatus->getWikiText() );
return;
}
- $targetUser = $status->value;
+ $targetUser = $this->mFetchedUser;
if ( $targetUser instanceof User ) { // UserRightsProxy doesn't have this method (bug 61252)
$targetUser->clearInstanceCache(); // bug 38989
}
"prefs-help-recentchangescount": "This includes recent changes, page histories, and logs.",
"prefs-help-watchlist-token2": "This is the secret key to the web feed of your watchlist.\nAnyone who knows it will be able to read your watchlist, so do not share it.\nIf you need to, [[Special:ResetTokens|you can reset it]].",
"savedprefs": "Your preferences have been saved.",
+ "savedrights": "The user rights of {{GENDER:$1|$1}} have been saved.",
"timezonelegend": "Time zone:",
"localtime": "Local time:",
"timezoneuseserverdefault": "Use wiki default ($1)",
"prefs-help-recentchangescount": "Used in [[Special:Preferences]], tab \"Recent changes\".",
"prefs-help-watchlist-token2": "Used in [[Special:Preferences]], tab Watchlist. (Formerly in {{msg-mw|prefs-help-watchlist-token}}.)",
"savedprefs": "This message appears after saving changes to your user preferences.",
+ "savedrights": "This message appears after saving the user rights on [[Special:UserRights]].\n* $1 - The user name of the user which rights was saved.",
"timezonelegend": "{{Identical|Time zone}}",
"localtime": "Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].",
"timezoneuseserverdefault": "[[Special:Preferences]] > Date and time > Time zone\n\nThis option lets your time zone setting use the one that is used on the wiki (often UTC).\n\nParameters:\n* $1 - timezone name, or timezone offset (in \"%+03d:%02d\" format)",
// if you hack it just right are kinda pathological,
// and unreliable cross-platform or on IE which means they're
// unlikely to appear on intranets.
- //
// Those will survive the algorithm but with results that
// are less consistent.
*/
class WfGetCallerTest extends MediaWikiTestCase {
public function testZero() {
- $this->assertEquals( __METHOD__, wfGetCaller( 1 ) );
+ $this->assertEquals( 'WfGetCallerTest->testZero', wfGetCaller( 1 ) );
}
function callerOne() {
}
public function testOne() {
- $this->assertEquals( 'WfGetCallerTest::testOne', self::callerOne() );
+ $this->assertEquals( 'WfGetCallerTest->testOne', self::callerOne() );
}
- function intermediateFunction( $level = 2, $n = 0 ) {
+ static function intermediateFunction( $level = 2, $n = 0 ) {
if ( $n > 0 ) {
return self::intermediateFunction( $level, $n - 1 );
}
}
public function testTwo() {
- $this->assertEquals( 'WfGetCallerTest::testTwo', self::intermediateFunction() );
+ $this->assertEquals( 'WfGetCallerTest->testTwo', self::intermediateFunction() );
}
public function testN() {
- $this->assertEquals( 'WfGetCallerTest::testN', self::intermediateFunction( 2, 0 ) );
+ $this->assertEquals( 'WfGetCallerTest->testN', self::intermediateFunction( 2, 0 ) );
$this->assertEquals(
'WfGetCallerTest::intermediateFunction',
self::intermediateFunction( 1, 0 )
array( array(
'msg' => 'logging a string',
'type' => 'log',
- 'caller' => __METHOD__,
+ 'caller' => 'MWDebugTest->testAddLog',
) ),
MWDebug::getLog()
);