%PDF- %PDF-
Direktori : /proc/985914/root/www/varak.net/wiki.varak.net/includes/ |
Current File : //proc/985914/root/www/varak.net/wiki.varak.net/includes/TrackingCategories.php |
<?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 */ /** * 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 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; } }