mirror of
				https://github.com/diocloid/LinkTitles.git
				synced 2025-10-22 05:42:32 +02:00 
			
		
		
		
	Added Namespace support
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -5,3 +5,7 @@
 | 
			
		||||
gpl-2.0.txt
 | 
			
		||||
Maintenance.php
 | 
			
		||||
doxygen_sqlite3.db
 | 
			
		||||
/LinkTitles.phpproj
 | 
			
		||||
/LinkTitles.phpproj.user
 | 
			
		||||
/LinkTitles.sln
 | 
			
		||||
/LinkTitles.v12.suo
 | 
			
		||||
 
 | 
			
		||||
@@ -108,6 +108,7 @@
 | 
			
		||||
			global $wgLinkTitlesFirstOnly;
 | 
			
		||||
			global $wgLinkTitlesSmartMode;
 | 
			
		||||
			global $wgCapitalLinks;
 | 
			
		||||
            global $wgLinkTitlesNamespaces;
 | 
			
		||||
 | 
			
		||||
			( $wgLinkTitlesPreferShortTitles ) ? $sort_order = 'ASC' : $sort_order = 'DESC';
 | 
			
		||||
			( $wgLinkTitlesFirstOnly ) ? $limit = 1 : $limit = -1;
 | 
			
		||||
@@ -121,6 +122,23 @@
 | 
			
		||||
				'("' . implode( '", "',$wgLinkTitlesBlackList ) . '", "' .
 | 
			
		||||
				LinkTitles::$currentTitle->getDbKey() . '")' );
 | 
			
		||||
 | 
			
		||||
            $currentNamespace = $title->getNamespace();
 | 
			
		||||
 | 
			
		||||
            // Build our weight list. Make sure current namespace is first element
 | 
			
		||||
            $namespaces = array_unshift( array($currentNamespace), array_diff($wgLinkTitlesNamespaces, array($currentNamespace)) );
 | 
			
		||||
            
 | 
			
		||||
            // No need for sanitiy check. we are sure that we have at least one element in the array
 | 
			
		||||
            $weightSelect = "CASE page_namespace ";
 | 
			
		||||
            $currentWeight = 0;
 | 
			
		||||
            foreach ($namespaces as &$namspacevalue) {
 | 
			
		||||
                $currentWeight = $currentWeight + 100;
 | 
			
		||||
                $weightSelect = $weightSelect . " WHEN " . $namspacevalue . " THEN " . $currentWeight . PHP_EOL;
 | 
			
		||||
            }
 | 
			
		||||
            $weightSelect = $weightSelect . " END ";
 | 
			
		||||
 | 
			
		||||
            $namespacesClause = str_replace( '_', ' ',
 | 
			
		||||
				'("' . implode( '", "',$namespaces ) . '")' );
 | 
			
		||||
 | 
			
		||||
			// Build an SQL query and fetch all page titles ordered by length from 
 | 
			
		||||
			// shortest to longest. Only titles from 'normal' pages (namespace uid 
 | 
			
		||||
			// = 0) are returned. Since the db may be sqlite, we need a try..catch 
 | 
			
		||||
@@ -129,21 +147,20 @@
 | 
			
		||||
			try {
 | 
			
		||||
				$res = $dbr->select( 
 | 
			
		||||
					'page', 
 | 
			
		||||
					'page_title', 
 | 
			
		||||
					array( 
 | 
			
		||||
						'page_namespace = 0', 
 | 
			
		||||
					array( 'page_title', "page_namespace" , "weight" => $weightSelect),
 | 
			
		||||
					array( 						
 | 
			
		||||
						'CHAR_LENGTH(page_title) >= ' . $wgLinkTitlesMinimumTitleLength,
 | 
			
		||||
						'page_title NOT IN ' . $blackList,
 | 
			
		||||
					), 
 | 
			
		||||
					__METHOD__, 
 | 
			
		||||
					array( 'ORDER BY' => 'CHAR_LENGTH(page_title) ' . $sort_order )
 | 
			
		||||
					array( 'ORDER BY' => 'weight ASC, CHAR_LENGTH(page_title) ' . $sort_order )
 | 
			
		||||
				);
 | 
			
		||||
			} catch (Exception $e) {
 | 
			
		||||
				$res = $dbr->select( 
 | 
			
		||||
					'page', 
 | 
			
		||||
					'page_title', 
 | 
			
		||||
					array( 
 | 
			
		||||
						'page_namespace = 0', 
 | 
			
		||||
						'page_namespace IN ' . $namespacesClause, 
 | 
			
		||||
						'LENGTH(page_title) >= ' . $wgLinkTitlesMinimumTitleLength,
 | 
			
		||||
						'page_title NOT IN ' . $blackList,
 | 
			
		||||
					), 
 | 
			
		||||
@@ -154,7 +171,7 @@
 | 
			
		||||
 | 
			
		||||
			// Iterate through the page titles
 | 
			
		||||
			foreach( $res as $row ) {
 | 
			
		||||
				LinkTitles::newTarget( $row->page_title );
 | 
			
		||||
				LinkTitles::newTarget($row->page_namespace, $row->page_title );
 | 
			
		||||
 | 
			
		||||
				// split the page content by [[...]] groups
 | 
			
		||||
				// credits to inhan @ StackOverflow for suggesting preg_split
 | 
			
		||||
@@ -249,7 +266,7 @@
 | 
			
		||||
		// Build an anonymous callback function to be used in simple mode.
 | 
			
		||||
		private static function simpleModeCallback( array $matches ) {
 | 
			
		||||
			if ( LinkTitles::checkTargetPage() ) {
 | 
			
		||||
				return '[[' . $matches[0] . ']]';
 | 
			
		||||
				return '[[' . LinkTitles::$targetTitle . "|" . $matches[0] . ']]';
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
@@ -305,9 +322,9 @@
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// Sets member variables for the current target page.
 | 
			
		||||
		private static function newTarget( $title ) {
 | 
			
		||||
		private static function newTarget($ns, $title ) {
 | 
			
		||||
			// @todo Make this wiki namespace aware.
 | 
			
		||||
			LinkTitles::$targetTitle = Title::makeTitle( NS_MAIN, $title);
 | 
			
		||||
			LinkTitles::$targetTitle = Title::makeTitle( $ns, $title);
 | 
			
		||||
			LinkTitles::$targetContent = null;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -189,6 +189,10 @@
 | 
			
		||||
	/// @ingroup config
 | 
			
		||||
	$wgLinkTitlesTimeLimit = 0.2;
 | 
			
		||||
 | 
			
		||||
    /// Namespaces to search in weighted order.
 | 
			
		||||
    /// Namespace of the page will always to highest weight, rest in given order
 | 
			
		||||
    $wgLinkTitlesNamespaces = array(NS_USER);
 | 
			
		||||
 | 
			
		||||
	/// @cond
 | 
			
		||||
  $wgExtensionCredits['parserhook'][] = array(
 | 
			
		||||
    'path'           => __FILE__,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user