]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - extensions/Interwiki/Interwiki_hooks.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / extensions / Interwiki / Interwiki_hooks.php
diff --git a/extensions/Interwiki/Interwiki_hooks.php b/extensions/Interwiki/Interwiki_hooks.php
new file mode 100644 (file)
index 0000000..9121f56
--- /dev/null
@@ -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, [], $wgInterwikiCentralDB );
+                       $res = $dbr->selectRow(
+                               'interwiki',
+                               '*',
+                               [ '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;
+       }
+
+}