The documented return type was not what existing callers expected,
and not what the default implementation actually returned.
This patch fixes the interface documentation and the behavior of
an alternative implementation.
Change-Id: Ib09bffeba3ddc5b43da1c7c299f1fa946be4e2e2
- * Returns all interwiki prefixes
+ * Returns all interwiki prefix definitions.
*
* @deprecated since 1.28, unused. Use InterwikiLookup instead.
*
* @param string|null $local If set, limits output to local/non-local interwikis
*
* @deprecated since 1.28, unused. Use InterwikiLookup instead.
*
* @param string|null $local If set, limits output to local/non-local interwikis
- * @return array List of prefixes
+ * @return array[] List of interwiki rows
* @since 1.19
*/
public static function getAllPrefixes( $local = null ) {
* @since 1.19
*/
public static function getAllPrefixes( $local = null ) {
public function fetch( $prefix );
/**
public function fetch( $prefix );
/**
- * Returns all interwiki prefixes
+ * Returns information about all interwiki prefixes, in the form of rows
+ * of the interwiki table. Each row may have the following keys:
+ *
+ * - iw_prefix: the prefix. Always present.
+ * - iw_url: the URL to use for linking, with $1 as a placeholder for the target page.
+ * Always present.
+ * - iw_api: the URL of the API. Optional.
+ * - iw_wikiid: the wiki ID (usually the database name for local wikis). Optional.
+ * - iw_local: whether the wiki is local, and the "magic redirect" mechanism should apply.
+ * Defaults to false.
+ * - iw_trans: whether "scary transclusion" is allowed for this site.
+ * Defaults to false.
*
* @param string|null $local If set, limits output to local/non-local interwikis
*
* @param string|null $local If set, limits output to local/non-local interwikis
- * @return string[] List of prefixes
+ * @return array[] interwiki rows.
*/
public function getAllPrefixes( $local = null );
*/
public function getAllPrefixes( $local = null );
* See InterwikiLookup::getAllPrefixes
*
* @param string|null $local If set, limits output to local/non-local interwikis
* See InterwikiLookup::getAllPrefixes
*
* @param string|null $local If set, limits output to local/non-local interwikis
- * @return string[] List of prefixes
+ * @return array[] interwiki rows
*/
public function getAllPrefixes( $local = null ) {
*/
public function getAllPrefixes( $local = null ) {
- if ( $local === null ) {
- return array_keys( $this->getInterwikiMap() );
- }
$res = [];
foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
$res = [];
foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
- if ( $interwiki->isLocal() === $local ) {
- $res[] = $interwikiId;
+ if ( $local === null || $interwiki->isLocal() === $local ) {
+ $res[] = [
+ 'iw_prefix' => $interwikiId,
+ 'iw_url' => $interwiki->getURL(),
+ 'iw_api' => $interwiki->getAPI(),
+ 'iw_wikiid' => $interwiki->getWikiID(),
+ 'iw_local' => $interwiki->isLocal(),
+ 'iw_trans' => $interwiki->isTranscludable(),
+ ];
}
public function testGetAllPrefixes() {
}
public function testGetAllPrefixes() {
+ $foo = [
+ 'iw_prefix' => 'foo',
+ 'iw_url' => '',
+ 'iw_api' => '',
+ 'iw_wikiid' => 'foobar',
+ 'iw_local' => false,
+ 'iw_trans' => false,
+ ];
+ $enwt = [
+ 'iw_prefix' => 'enwt',
+ 'iw_url' => 'https://en.wiktionary.org/wiki/$1',
+ 'iw_api' => 'https://en.wiktionary.org/w/api.php',
+ 'iw_wikiid' => 'enwiktionary',
+ 'iw_local' => true,
+ 'iw_trans' => false,
+ ];
+
$this->interwikiLookup->getAllPrefixes(),
'getAllPrefixes()'
);
$this->assertEquals(
$this->interwikiLookup->getAllPrefixes(),
'getAllPrefixes()'
);
$this->assertEquals(
$this->interwikiLookup->getAllPrefixes( false ),
'get external prefixes'
);
$this->assertEquals(
$this->interwikiLookup->getAllPrefixes( false ),
'get external prefixes'
);
$this->assertEquals(
$this->interwikiLookup->getAllPrefixes( true ),
'get local prefixes'
);
$this->interwikiLookup->getAllPrefixes( true ),
'get local prefixes'
);