123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- <?php
- /**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Categories
- */
- use MediaWiki\MediaWikiServices;
- /**
- * This class performs some operations related to tracking categories, such as creating
- * a list of all such categories.
- * @since 1.29
- */
- class TrackingCategories {
- /** @var Config */
- private $config;
- /**
- * Tracking categories that exist in core
- *
- * @var array
- */
- private static $coreTrackingCategories = [
- 'index-category',
- 'noindex-category',
- 'duplicate-args-category',
- 'expensive-parserfunction-category',
- 'post-expand-template-argument-category',
- 'post-expand-template-inclusion-category',
- 'hidden-category-category',
- 'broken-file-category',
- 'node-count-exceeded-category',
- 'expansion-depth-exceeded-category',
- 'restricted-displaytitle-ignored',
- 'deprecated-self-close-category',
- 'template-loop-category',
- ];
- /**
- * @param Config $config
- */
- public function __construct( Config $config ) {
- $this->config = $config;
- }
- /**
- * Read the global and extract title objects from the corresponding messages
- * @return 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 = [];
- $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
- 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 = $nsInfo->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;
- }
- }
|