diff options
Diffstat (limited to 'extensions/Interwiki/Interwiki_hooks.php')
-rw-r--r-- | extensions/Interwiki/Interwiki_hooks.php | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/extensions/Interwiki/Interwiki_hooks.php b/extensions/Interwiki/Interwiki_hooks.php new file mode 100644 index 00000000..0a7e38a6 --- /dev/null +++ b/extensions/Interwiki/Interwiki_hooks.php @@ -0,0 +1,54 @@ +<?php + +class InterwikiHooks { + public static function onExtensionFunctions() { + global $wgInterwikiViewOnly; + + if ( $wgInterwikiViewOnly === false ) { + global $wgAvailableRights, $wgLogTypes, $wgLogActionsHandlers; + + // New user right, required to modify the interwiki table through Special:Interwiki + $wgAvailableRights[] = 'interwiki'; + + // Set up the new log type - interwiki actions are logged to this new log + $wgLogTypes[] = 'interwiki'; + // interwiki, iw_add, iw_delete, iw_edit + $wgLogActionsHandlers['interwiki/*'] = 'InterwikiLogFormatter'; + } + + return true; + } + + public static function onInterwikiLoadPrefix( $prefix, &$iwData ) { + global $wgInterwikiCentralDB; + // docs/hooks.txt says: Return true without providing an interwiki to continue interwiki search. + if ( $wgInterwikiCentralDB === null || $wgInterwikiCentralDB === wfWikiId() ) { + // No global set or this is global, nothing to add + return true; + } + if ( !Language::fetchLanguageName( $prefix ) ) { + // Check if prefix exists locally and skip + foreach ( Interwiki::getAllPrefixes( null ) as $id => $localPrefixInfo ) { + if ( $prefix === $localPrefixInfo['iw_prefix'] ) { + return true; + } + } + $dbr = wfGetDB( DB_SLAVE, array(), $wgInterwikiCentralDB ); + $res = $dbr->selectRow( + 'interwiki', + '*', + array( 'iw_prefix' => $prefix ), + __METHOD__ + ); + if ( !$res ) { + return true; + } + // Excplicitly make this an array since it's expected to be one + $iwData = (array)$res; + // At this point, we can safely return false because we know that we have something + return false; + } + return true; + } + +} |