diff --git a/.gitignore b/.gitignore index 5caec79..0fc8781 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ gpl-2.0.txt Maintenance.php doxygen_sqlite3.db +/LinkTitles.phpproj +/LinkTitles.phpproj.user +/LinkTitles.sln +/LinkTitles.v12.suo diff --git a/LinkTitles_Maintenance.php b/LinkTitles_Maintenance.php index e30e14d..fccbf29 100755 --- a/LinkTitles_Maintenance.php +++ b/LinkTitles_Maintenance.php @@ -65,6 +65,26 @@ class Cli extends \Maintenance { true, // requires argument "s" ); + $this->addOption( + "page", + "page to process", + false, // not required + true, // requires argument + "p" + ); + $this->addOption( + "log", + "enables logging to console", + false, // not required + false, // requires no argument + "l" + ); + $this->addOption( + "debug", + "enables debug logging to console", + false, // not required + false // requires no argument + ); } /// Main function of the maintenance script. @@ -72,20 +92,43 @@ class Cli extends \Maintenance { /// if the `--start` option is given) and call LinkTitles::processPage() for /// each page. public function execute() { + global $wgLinkTitlesNamespaces; + $index = intval($this->getOption('start', 0)); if ( $index < 0 ) { $this->error('FATAL: Start index must be 0 or greater.', 1); }; + if ($this->hasOption('log')) + { + LinkTitles::$ltConsoleOutput = true; + } + if ($this->hasOption('debug')) + { + LinkTitles::$ltConsoleOutputDebug = true; + } + + $pagename = strval($this->getOption('page')); + if ($pagename != null) + { + + $curTitle = Title::newFromDBkey( $pagename ); + LinkTitles::processPage($curTitle,RequestContext::getMain() ); + $this->output("\nFinished parsing.\n"); + return; + } + // get our Namespaces + $namespacesClause = str_replace( '_', ' ','(' . implode( ', ',$wgLinkTitlesNamespaces ) . ')' ); + // Connect to the database $dbr = $this->getDB( DB_SLAVE ); // Retrieve page names from the database. $res = $dbr->select( 'page', - 'page_title', + array('page_title', 'page_namespace'), array( - 'page_namespace = 0', + 'page_namespace IN ' . $namespacesClause, ), __METHOD__, array( @@ -100,7 +143,7 @@ class Cli extends \Maintenance { // Iterate through the pages; break if a time limit is exceeded. foreach ( $res as $row ) { $index += 1; - $curTitle = $row->page_title; + $curTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title); $this->output( sprintf("\rPage #%d (%02.0f%%)", $index, $index / $numPages * 100) ); diff --git a/extension.json b/extension.json index 87e5933..e5fd6cc 100644 --- a/extension.json +++ b/extension.json @@ -24,6 +24,9 @@ "LinkTitlesWordStartOnly": true, "LinkTitlesWordEndOnly": true, "LinkTitlesBatchTimeLimit": 1 + "LinkTitlesNamespaces": [ + 2 + ] }, "AutoloadClasses": { "LinkTitles\\Extension": "includes/LinkTitles_Extension.php", diff --git a/includes/LinkTitles_Special.php b/includes/LinkTitles_Special.php index ed8ff0c..b02e5eb 100644 --- a/includes/LinkTitles_Special.php +++ b/includes/LinkTitles_Special.php @@ -84,6 +84,10 @@ class Special extends \SpecialPage { /// @param OutputPage $output Output page for the special page. private function process( \WebRequest &$request, \OutputPage &$output) { global $wgLinkTitlesTimeLimit; + global $wgLinkTitlesNamespaces; + + // get our Namespaces + $namespacesClause = str_replace( '_', ' ','(' . implode( ', ',$wgLinkTitlesNamespaces ) . ')' ); // Start the stopwatch $startTime = microtime(true); @@ -106,7 +110,7 @@ class Special extends \SpecialPage { else { // No end index was given. Therefore, count pages now. - $end = $this->countPages($dbr); + $end = $this->countPages($dbr, $namespacesClause ); }; array_key_exists('r', $postValues) ? @@ -116,9 +120,9 @@ class Special extends \SpecialPage { // Retrieve page names from the database. $res = $dbr->select( 'page', - 'page_title', + array('page_title', 'page_namespace'), array( - 'page_namespace = 0', + 'page_namespace IN ' . $namespacesClause, ), __METHOD__, array( @@ -129,8 +133,8 @@ class Special extends \SpecialPage { // Iterate through the pages; break if a time limit is exceeded. foreach ( $res as $row ) { - $curTitle = $row->page_title; - Extension::processPage( $curTitle, $this->getContext() ); + $curTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title); + Extension::processPage($curTitle, $this->getContext()); $start += 1; // Check if the time limit is exceeded @@ -280,16 +284,21 @@ EOF /// Counts the number of pages in a read-access wiki database ($dbr). /// @param $dbr Read-only `Database` object. /// @returns Number of pages in the default namespace (0) of the wiki. +<<<<<<< HEAD:includes/LinkTitles_Special.php private function countPages( &$dbr ) { +======= + private function countPages(&$dbr, $namespacesClause) { +>>>>>>> 085a4032f07ef9200370e7561b5b22b4c05e287c:SpecialLinkTitles.php $res = $dbr->select( 'page', - 'page_id', + array('pagecount' => "COUNT(page_id)"), array( - 'page_namespace = 0', + 'page_namespace IN ' . $namespacesClause, ), __METHOD__ ); - return $res->numRows(); + + return $res->current()->pagecount; } }