}
}
+# Initialise lists of wikis
+$sites = array(
+ 'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ),
+ 'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' )
+);
+$langlist = array_map( "trim", file( "/home/wikipedia/common/langlist" ) );
+
+$specials = array(
+ 'sourceswiki' => 'sources.wikipedia.org',
+ 'quotewiki' => 'wikiquote.org',
+ 'textbookwiki' => 'wikibooks.org',
+ 'sep11wiki' => 'sep11.wikipedia.org',
+ 'metawiki' => 'meta.wikipedia.org',
+);
+
+$extraLinks = array(
+ array( 'm', 'http://meta.wikipedia.org/wiki/$1', 1 ),
+ array( 'meta', 'http://meta.wikipedia.org/wiki/$1', 1 ),
+ array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ),
+);
+
+$languageAliases = array(
+ 'zh-cn' => 'zh',
+ 'zh-tw' => 'zh',
+);
+
+# Extract the intermap from meta
+
$row = wfGetArray( "metawiki.cur", array( "cur_text" ), array( "cur_namespace" => 0, "cur_title" => "Interwiki_map" ) );
if ( !$row ) {
}
}
-$langlist = array_map( "trim", file( "/home/wikipedia/common/langlist" ) );
# Insert links into special wikis
-# No interlanguage links, that's the definition of a special wiki
-# Just intermap links
-
-$specials = array(
- 'sourceswiki' => 'sources.wikipedia.org',
- 'quotewiki' => 'wikiquote.org',
- 'textbookwiki' => 'wikibooks.org',
- 'sep11wiki' => 'sep11.wikipedia.org',
- 'metawiki' => 'meta.wikipedia.org',
-);
+# These have intermap links and interlanguage links pointing to wikipedia
$sql = "-- Generated by rebuildInterwiki.php";
"INSERT INTO interwiki (iw_prefix, iw_url, iw_local) VALUES \n";
$first = true;
+ # Intermap links
foreach ( $iwArray as $iwEntry ) {
# Suppress links to self
if ( strpos( $iwEntry['iw_url'], $host ) === false ) {
- # Add comma
- if ( $first ) {
- $first = false;
- } else {
- $sql .= ",\n";
- }
- $sql .= "(" . Database::makeList( $iwEntry ) . ")";
+ $sql .= makeLink( $iwEntry, $first );
}
}
+ # w link
+ $sql .= makeLink( array("w", "http://en.wikipedia.org/wiki/$1", 1 ), $first );
+
+ # Interlanguage links to wikipedia
+ $sql .= makeLanguageLinks( $sites['wiki'], $first );
+
+ # Extra links
+ foreach ( $extraLinks as $link ) {
+ $sql .= makeLink( $link, $first );
+ }
+
$sql .= ";\n";
}
$sql .= "\n";
# Insert links into multilanguage sites
-$sites = array(
- new Site( 'wiki', 'w', 'wikipedia.org' ),
- new Site( 'wiktionary.org', 'wikt', 'wiktionary.org' )
-);
-
foreach ( $sites as $site ) {
$sql .= <<<EOS
# Intermap links
foreach ( $iwArray as $iwEntry ) {
# Suppress links to self
- if ( strpos( $iwEntry['iw_url'], $site->url ) === false ) {
- # Add comma
- if ( $first ) {
- $first = false;
- } else {
- $sql .= ",\n";
- }
- $sql .= "(" . Database::makeList( $iwEntry ) . ")";
+ if ( strpos( $iwEntry['iw_url'], $site->url ) === false ||
+ strpos( $iwEntry['iw_url'], 'meta.wikipedia.org' ) !== false ) {
+ $sql .= makeLink( $iwEntry, $first );
}
}
foreach ( $sites as $targetSite ) {
# Suppress link to self
if ( $targetSite->suffix != $site->suffix ) {
- if ( $first ) {
- $first = false;
- } else {
- $sql .= ",\n";
- }
- $link = array( $targetSite->lateral, $targetSite->getURL( $lang ), 1 );
- $sql .= "(" . Database::makeList( $link ) . ")";
+ $sql .= makeLink( array( $targetSite->lateral, $targetSite->getURL( $lang ), 1 ), $first );
}
}
# Interlanguage links
- foreach ( $langlist as $targetLang ) {
- if ( $first ) {
- $first = false;
- } else {
- $sql .= ",\n";
- }
- $link = array( $targetLang, $site->getURL( $targetLang ), 1 );
- $sql .= "(" . Database::makeList( $link ) . ")";
+ $sql .= makeLanguageLinks( $site, $first );
+
+ # w link within wikipedias
+ # Other sites already have it as a lateral link
+ if ( $site->suffix == "wiki" ) {
+ $sql .= makeLink( array("w", "http://en.wikipedia.org/wiki/$1", 1), $first );
+ }
+
+ # Extra links
+ foreach ( $extraLinks as $link ){
+ $sql .= makeLink( $link, $first );
}
$sql .= ";\n\n";
}
# To stdout
print $sql;
}
+
+# ------------------------------------------------------------------------------------------
+
+# Returns part of an INSERT statement, corresponding to all interlanguage links to a particular site
+function makeLanguageLinks( &$site, &$first ) {
+ global $langlist, $languageAliases;
+
+ $sql = "";
+
+ # Actual languages with their own databases
+ foreach ( $langlist as $targetLang ) {
+ $sql .= makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $first );
+ }
+
+ # Language aliases
+ foreach ( $languageAliases as $alias => $lang ) {
+ $sql .= makeLink( array( $alias, $site->getURL( $lang ), 1 ), $first );
+ }
+ return $sql;
+}
+
+# Make SQL for a single link from an array
+function makeLink( $entry, &$first ) {
+ $sql = "";
+ # Add comma
+ if ( $first ) {
+ $first = false;
+ } else {
+ $sql .= ",\n";
+ }
+ $sql .= "(" . Database::makeList( $entry ) . ")";
+ return $sql;
+}
+
?>