summaryrefslogtreecommitdiff
path: root/extensions/Interwiki/Interwiki_hooks.php
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/Interwiki/Interwiki_hooks.php')
-rw-r--r--extensions/Interwiki/Interwiki_hooks.php54
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;
+ }
+
+}