config = $config; } /** * Read the global and extract title objects from the corresponding messages * @return array Array( 'msg' => Title, 'cats' => Title[] ) */ public function getTrackingCategories() { $categories = array_merge( self::$coreTrackingCategories, ExtensionRegistry::getInstance()->getAttribute( 'TrackingCategories' ), $this->config->get( 'TrackingCategories' ) // deprecated ); // Only show magic link tracking categories if they are enabled $enableMagicLinks = $this->config->get( 'EnableMagicLinks' ); if ( $enableMagicLinks['ISBN'] ) { $categories[] = 'magiclink-tracking-isbn'; } if ( $enableMagicLinks['RFC'] ) { $categories[] = 'magiclink-tracking-rfc'; } if ( $enableMagicLinks['PMID'] ) { $categories[] = 'magiclink-tracking-pmid'; } $trackingCategories = []; foreach ( $categories as $catMsg ) { /* * Check if the tracking category varies by namespace * Otherwise only pages in the current namespace will be displayed * If it does vary, show pages considering all namespaces */ $msgObj = wfMessage( $catMsg )->inContentLanguage(); $allCats = []; $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg ); if ( !$catMsgTitle ) { continue; } // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}. // False positives are ok, this is just an efficiency shortcut if ( strpos( $msgObj->plain(), '{{' ) !== false ) { $ns = MWNamespace::getValidNamespaces(); foreach ( $ns as $namesp ) { $tempTitle = Title::makeTitleSafe( $namesp, $catMsg ); if ( !$tempTitle ) { continue; } $catName = $msgObj->title( $tempTitle )->text(); # Allow tracking categories to be disabled by setting them to "-" if ( $catName !== '-' ) { $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName ); if ( $catTitle ) { $allCats[] = $catTitle; } } } } else { $catName = $msgObj->text(); # Allow tracking categories to be disabled by setting them to "-" if ( $catName !== '-' ) { $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName ); if ( $catTitle ) { $allCats[] = $catTitle; } } } $trackingCategories[$catMsg] = [ 'cats' => $allCats, 'msg' => $catMsgTitle, ]; } return $trackingCategories; } }