Special:Export contributor list back in (default:off)
authorMagnus Manske <magnusmanske@users.mediawiki.org>
Thu, 23 Mar 2006 08:50:31 +0000 (08:50 +0000)
committerMagnus Manske <magnusmanske@users.mediawiki.org>
Thu, 23 Mar 2006 08:50:31 +0000 (08:50 +0000)
Set $wgExportAllowListContributors=true to turn it on

RELEASE-NOTES
includes/DefaultSettings.php
includes/Export.php
includes/SpecialExport.php

index 7660375..1585a8b 100644 (file)
@@ -379,6 +379,7 @@ Special Pages:
 * JavaScript filter for Special:Allmessages
 * (bug 3047) Don't mention talk pages on Special:Movepage when there isn't one
 * Show links to user page, talk page and contributions page on Special:Newpages
+* Special:Export can now export a list of all contributors to an article (off by default)
 
 Misc.:
 * PHP 4.1 compatibility fix: don't use new_link parameter to mysql_connect
index 79b6f7f..d83104f 100644 (file)
@@ -1390,6 +1390,7 @@ $wgImportSources = array();
  * disabled on Wikimedia's sites.
  */
 $wgExportAllowHistory = true;
+$wgExportAllowListContributors = false ;
 
 
 /** Text matching this regular expression will be recognised as spam
index dee2e04..1e2ad7f 100644 (file)
@@ -40,6 +40,10 @@ define( 'MW_EXPORT_STUB',     1 );
  * @subpackage SpecialPage
  */
 class WikiExporter {
+       
+       var $list_authors = false ; # Return distinct author list (when not returning full history)
+       var $author_list = "" ;
+       
        /**
         * If using MW_EXPORT_STREAM to stream a large amount of data,
         * provide a database connection which is not managed by
@@ -133,6 +137,30 @@ class WikiExporter {
 
        // -------------------- private implementation below --------------------
 
+       # Generates the distinct list of authors of an article
+       # Not called by default (depends on $this->list_authors)
+       # Can be set by Special:Export when not exporting whole history
+       function do_list_authors ( $page , $revision , $cond ) {
+               $fname = "do_list_authors" ;
+               wfProfileIn( $fname );
+               $this->author_list = "<contributors>";
+               $sql = "SELECT DISTINCT rev_user_text,rev_user FROM {$page},{$revision} WHERE page_id=rev_page AND " . $cond ;
+               $result = $this->db->query( $sql, $fname );
+               $resultset = $this->db->resultObject( $result );
+               while( $row = $resultset->fetchObject() ) {
+                       $this->author_list .= "<contributor>" . 
+                               "<username>" . 
+                               htmlentities( $row->rev_user_text )  . 
+                               "</username>" . 
+                               "<id>" . 
+                               $row->rev_user .
+                               "</id>" . 
+                               "</contributor>";
+               }
+               wfProfileOut( $fname );
+               $this->author_list .= "</contributors>";
+       }
+
        function dumpFrom( $cond = '' ) {
                $fname = 'WikiExporter::dumpFrom';
                wfProfileIn( $fname );
@@ -140,10 +168,13 @@ class WikiExporter {
                $page     = $this->db->tableName( 'page' );
                $revision = $this->db->tableName( 'revision' );
                $text     = $this->db->tableName( 'text' );
-
+               
                if( $this->history == MW_EXPORT_FULL ) {
                        $join = 'page_id=rev_page';
                } elseif( $this->history == MW_EXPORT_CURRENT ) {
+                       if ( $this->list_authors && $cond != '' )  { // List authors, if so desired
+                               $this->do_list_authors ( $page , $revision , $cond );
+                       }
                        $join = 'page_id=rev_page AND page_latest=rev_id';
                } else {
                        wfProfileOut( $fname );
@@ -179,6 +210,10 @@ class WikiExporter {
                $result = $this->db->query( $sql, $fname );
                $wrapper = $this->db->resultObject( $result );
                $this->outputStream( $wrapper );
+               
+               if ( $this->list_authors ) {
+                       $this->outputStream( $wrapper );
+               }
 
                if( $this->buffer == MW_EXPORT_STREAM ) {
                        $this->db->bufferResults( $prev );
@@ -218,7 +253,7 @@ class WikiExporter {
                        $this->sink->writeRevision( $row, $output );
                }
                if( isset( $last ) ) {
-                       $output = $this->writer->closePage();
+                       $output = $this->author_list . $this->writer->closePage();
                        $this->sink->writeClosePage( $output );
                }
                $resultset->free();
index fe9a1e3..15d11d4 100644 (file)
@@ -30,7 +30,7 @@ require_once( 'Export.php' );
  *
  */
 function wfSpecialExport( $page = '' ) {
-       global $wgOut, $wgRequest;
+       global $wgOut, $wgRequest, $wgExportAllowListContributors;
        global $wgExportAllowHistory;
 
        if( $wgRequest->getVal( 'action' ) == 'submit') {
@@ -44,6 +44,9 @@ function wfSpecialExport( $page = '' ) {
                # Pre-check the 'current version only' box in the UI
                $curonly = true;
        }
+       
+       $list_authors = $wgRequest->getCheck( 'listauthors' );
+       if ( !$curonly || !$wgExportAllowListContributors ) $list_authors = false ;
 
        if( $page != '' ) {
                $wgOut->disable();
@@ -53,6 +56,7 @@ function wfSpecialExport( $page = '' ) {
                $db =& wfGetDB( DB_SLAVE );
                $history = $curonly ? MW_EXPORT_CURRENT : MW_EXPORT_FULL;
                $exporter = new WikiExporter( $db, $history );
+               $exporter->list_authors = $list_authors ;
                $exporter->openStream();
                $exporter->pagesByName( $pages );
                $exporter->closeStream();