From: Rob Church Date: Sun, 2 Jul 2006 21:35:25 +0000 (+0000) Subject: * Introduce updateArticleCount maintenance script which uses a better check that... X-Git-Tag: 1.31.0-rc.0~56460 X-Git-Url: http://git.cyclocoop.org/%24image?a=commitdiff_plain;h=16f4261f289e80229ee1e8b2735b819b9bbd1c58;p=lhc%2Fweb%2Fwiklou.git * Introduce updateArticleCount maintenance script which uses a better check that reflects what Article::isCountable() tests for --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index d9a94bdc5b..809e00b894 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -630,6 +630,8 @@ Some default configuration options have changed: * (bug 6516) Update to Russian translation * New 'allpagesbadtitle' message for Special:Allpages, based on 'badtitletext'. * Rename "searchquery" to "searchsubtitle" and support wiki text in it +* Introduce updateArticleCount maintenance script which uses a better check that + reflects what Article::isCountable() tests for == Compatibility == diff --git a/maintenance/updateArticleCount.inc.php b/maintenance/updateArticleCount.inc.php new file mode 100644 index 0000000000..20546a78c2 --- /dev/null +++ b/maintenance/updateArticleCount.inc.php @@ -0,0 +1,68 @@ + + */ + +class ArticleCounter { + + var $dbr; + var $namespaces; + + function ArticleCounter() { + global $wgContentNamespaces; + $this->namespaces = $wgContentNamespaces; + $this->dbr =& wfGetDB( DB_SLAVE ); + } + + /** + * Produce a comma-delimited set of namespaces + * Includes paranoia + * + * @return string + */ + function makeNsSet() { + foreach( $this->namespaces as $namespace ) + $namespaces[] = intval( $namespace ); + return implode( ', ', $namespaces ); + } + + /** + * Produce SQL for the query + * + * @return string + */ + function makeSql() { + extract( $this->dbr->tableNames( 'page', 'pagelinks' ) ); + $nsset = $this->makeNsSet(); + return "SELECT COUNT(*) AS count FROM {$page} + LEFT JOIN {$pagelinks} ON pl_from = page_id + WHERE page_namespace IN ( $nsset ) + AND page_is_redirect = 0 + AND page_len > 0 + AND pl_namespace IS NOT NULL"; + } + + /** + * Count the number of valid content pages in the wiki + * + * @return mixed Integer, or false if there's a problem + */ + function count() { + $res = $this->dbr->query( $this->makeSql(), __METHOD__ ); + if( $res ) { + $row = $this->dbr->fetchObject( $res ); + $this->dbr->freeResult( $res ); + return (int)$row->count; + } else { + return false; # Look out for this when handling the result + } + } + +} + +?> \ No newline at end of file diff --git a/maintenance/updateArticleCount.php b/maintenance/updateArticleCount.php new file mode 100644 index 0000000000..112274d255 --- /dev/null +++ b/maintenance/updateArticleCount.php @@ -0,0 +1,42 @@ + + */ + +$options = array( 'update', 'help' ); +require_once( 'commandLine.inc' ); +require_once( 'updateArticleCount.inc.php' ); +echo( "Update Article Count\n\n" ); + +if( isset( $options['help'] ) && $options['help'] ) { + echo( "Usage: php updateArticleCount.php [--update]\n\n" ); + echo( "--update : Update site statistics table\n" ); + exit( 0 ); +} + +echo( "Counting articles..." ); +$counter = new ArticleCounter(); +$result = $counter->count(); + +if( $result !== false ) { + echo( "found {$result}.\n" ); + if( isset( $options['update'] ) && $options['update'] ) { + echo( "Updating site statistics table... " ); + $dbw =& wfGetDB( DB_MASTER ); + $dbw->update( 'site_stats', array( 'ss_good_articles' => $result ), array( 'ss_row_id' => 1 ), __METHOD__ ); + echo( "done.\n" ); + } else { + echo( "To update the site statistics table, run the script with the --update option.\n" ); + } +} else { + echo( "failed.\n" ); +} +echo( "\n" ); + +?> \ No newline at end of file