mediawiki/extensions$ ln -s ../../extensions-trunk/FooBar
Most extensions are available through Git:
- https://gerrit.wikimedia.org/r/#/admin/projects/?filter=mediawiki%252Fextensions%252F
- https://git.wikimedia.org/project/mediawiki
+ https://phabricator.wikimedia.org/diffusion/MEXT/
Please note that under POSIX systems (Linux...), parent of a symbolic path
* @param string|array|MessageSpecifier $value
* @return Message
* @throws InvalidArgumentException
+ * @since 1.27
*/
public static function newFromSpecifier( $value ) {
if ( $value instanceof RawMessage ) {
// We need a dummy HTMLForm for the validate callback...
$htmlForm = new HTMLForm( [], $this );
}
- $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
- $field->mParent = $htmlForm;
+ $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key], $htmlForm );
$validation = $field->validate( $value, $user->getOptions() );
break;
case 'registered-multiselect':
if ( !$line ) {
// completely ignore this RC entry if we don't want to render it
unset( $block[$i] );
+ continue;
}
// Roll up flags
$lines[] = $line;
}
+
// Further down are some assumptions that $block is a 0-indexed array
// with (count-1) as last key. Let's make sure it is.
$block = array_values( $block );
protected $mShowEmptyLabels = true;
/**
- * @var HTMLForm
+ * @var HTMLForm|null
*/
public $mParent;
* @return Message
*/
protected function getMessage( $value ) {
- return Message::newFromSpecifier( $value )->setContext( $this->mParent );
+ $message = Message::newFromSpecifier( $value );
+
+ if ( $this->mParent ) {
+ $message->setContext( $this->mParent );
+ }
+
+ return $message;
}
/**
/**
* Wrapper around wfMessage that sets the current context.
*
+ * @since 1.16
* @return Message
* @see wfMessage
*/
* @ingroup SpecialPage
*/
class SpecialBlock extends FormSpecialPage {
- /** @var User User to be blocked, as passed either by parameter (url?wpTarget=Foo)
+ /** @var User|string|null User to be blocked, as passed either by parameter (url?wpTarget=Foo)
* or as subpage (Special:Block/Foo) */
protected $target;
$otherBlockMessages = [];
if ( $this->target !== null ) {
+ $targetName = $this->target;
+ if ( $this->target instanceof User ) {
+ $targetName = $this->target->getName();
+ }
# Get other blocks, i.e. from GlobalBlocking or TorBlock extension
- Hooks::run( 'OtherBlockLogLink', [ &$otherBlockMessages, $this->target ] );
+ Hooks::run( 'OtherBlockLogLink', [ &$otherBlockMessages, $targetName ] );
if ( count( $otherBlockMessages ) ) {
$s = Html::rawElement(
mediawiki/skins$ ln -s ../../skins-trunk/FooBar
The default skin Vector can be installed by cloning from Git:
- git clone https://git.wikimedia.org/git/mediawiki/skins/Vector.git
+ git clone https://phabricator.wikimedia.org/diffusion/SVEC/Vector
Other skins are also available:
- https://gerrit.wikimedia.org/r/#/admin/projects/?filter=mediawiki%252Fskins%252F
- https://git.wikimedia.org/project/mediawiki
+ https://phabricator.wikimedia.org/diffusion/SKIN/
Please note that under POSIX systems (Linux...), parent of a symbolic path
<?php
use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerInterface;
/**
* @covers MediaWikiTestCase
public function testLoggersAreRestoredOnTearDown() {
// replacing an existing logger
$logger1 = LoggerFactory::getInstance( 'foo' );
- $this->setLogger( 'foo', $this->getMock( '\Psr\Log\LoggerInterface' ) );
+ $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
$logger2 = LoggerFactory::getInstance( 'foo' );
$this->tearDown();
$logger3 = LoggerFactory::getInstance( 'foo' );
$this->assertNotSame( $logger1, $logger2 );
// replacing a non-existing logger
- $this->setLogger( 'bar', $this->getMock( '\Psr\Log\LoggerInterface' ) );
+ $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
$logger1 = LoggerFactory::getInstance( 'bar' );
$this->tearDown();
$logger2 = LoggerFactory::getInstance( 'bar' );
// replacing same logger twice
$logger1 = LoggerFactory::getInstance( 'baz' );
- $this->setLogger( 'baz', $this->getMock( '\Psr\Log\LoggerInterface' ) );
- $this->setLogger( 'baz', $this->getMock( '\Psr\Log\LoggerInterface' ) );
+ $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
+ $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
$this->tearDown();
$logger2 = LoggerFactory::getInstance( 'baz' );