Tell regexp parser to use extra analysis on external link regexp;
[lhc/web/wiklou.git] / includes / SpecialLog.php
index 3b86bfc..e3c0b5a 100644 (file)
@@ -19,6 +19,8 @@
 
 /**
  *
+ * @package MediaWiki
+ * @subpackage SpecialPage
  */
 
 /**
@@ -36,16 +38,26 @@ function wfSpecialLog( $par = '' ) {
 
 /**
  *
+ * @package MediaWiki
+ * @subpackage SpecialPage
  */
 class LogReader {
        var $db, $joinClauses, $whereClauses;
        var $type = '', $user = '', $title = null;
        
+       /**
+        * @param WebRequest $request For internal use use a FauxRequest object to pass arbitrary parameters.
+        */
        function LogReader( $request ) {
                $this->db =& wfGetDB( DB_SLAVE );
                $this->setupQuery( $request );
        }
        
+       /**
+        * Basic setup and applies the limiting factors from the WebRequest object.
+        * @param WebRequest $request
+        * @private
+        */
        function setupQuery( $request ) {
                $cur = $this->db->tableName( 'cur' );
                $user = $this->db->tableName( 'user' );
@@ -61,6 +73,11 @@ class LogReader {
                list( $this->limit, $this->offset ) = $request->getLimitOffset();
        }
        
+       /**
+        * Set the log reader to return only entries of the given type.
+        * @param string $type A log type ('upload', 'delete', etc)
+        * @private
+        */
        function limitType( $type ) {
                if( empty( $type ) ) {
                        return false;
@@ -70,8 +87,13 @@ class LogReader {
                $this->whereClauses[] = "log_type='$safetype'";
        }
        
+       /**
+        * Set the log reader to return only entries by the given user.
+        * @param string $name Valid user name
+        * @private
+        */
        function limitUser( $name ) {
-               $title = Title::makeTitleSafe( NS_USER, $name );
+               $title = Title::makeTitle( NS_USER, $name );
                if( empty( $name ) || is_null( $title ) ) {
                        return false;
                }
@@ -81,6 +103,12 @@ class LogReader {
                $this->whereClauses[] = "user_name='$safename'";
        }
        
+       /**
+        * Set the log reader to return only entries affecting the given page.
+        * (For the block and rights logs, this is a user page.)
+        * @param string $page Title name as text
+        * @private
+        */
        function limitTitle( $page ) {
                $title = Title::newFromText( $page );
                if( empty( $page ) || is_null( $title )  ) {
@@ -92,6 +120,12 @@ class LogReader {
                $this->whereClauses[] = "log_namespace=$ns AND log_title='$safetitle'";
        }
        
+       /**
+        * Set the log reader to return only entries in a given time range.
+        * @param string $time Timestamp of one endpoint
+        * @param string $direction either ">=" or "<=" operators
+        * @private
+        */
        function limitTime( $time, $direction ) {
                # Direction should be a comparison operator
                if( empty( $time ) ) {
@@ -101,13 +135,18 @@ class LogReader {
                $this->whereClauses[] = "log_timestamp $direction '$safetime'";
        }
        
+       /**
+        * Build an SQL query from all the set parameters.
+        * @return string the SQL query
+        * @private
+        */
        function getQuery() {
                $logging = $this->db->tableName( "logging" );
                $user = $this->db->tableName( 'user' );
                $sql = "SELECT log_type, log_action, log_timestamp,
                        log_user, user_name,
                        log_namespace, log_title, cur_id,
-                       log_comment FROM $logging, $user ";
+                       log_comment FROM $user, $logging ";
                if( !empty( $this->joinClauses ) ) {
                        $sql .= implode( ',', $this->joinClauses );
                }
@@ -119,18 +158,31 @@ class LogReader {
                return $sql;
        }
        
+       /**
+        * Execute the query and start returning results.
+        * @return ResultWrapper result object to return the relevant rows
+        */
        function getRows() {
                return $this->db->resultObject( $this->db->query( $this->getQuery() ) );
        }
        
+       /**
+        * @return string The query type that this LogReader has been limited to.
+        */
        function queryType() {
                return $this->type;
        }
        
+       /**
+        * @return string The username type that this LogReader has been limited to, if any.
+        */
        function queryUser() {
                return $this->user;
        }
        
+       /**
+        * @return string The text of the title that this LogReader has been limited to.
+        */
        function queryTitle() {
                if( is_null( $this->title ) ) {
                        return '';
@@ -142,16 +194,27 @@ class LogReader {
 
 /**
  *
+ * @package MediaWiki
+ * @subpackage SpecialPage
  */
 class LogViewer {
-       var $reader, $skin;
+       /**
+        * @var LogReader $reader
+        */
+       var $reader;
        
+       /**
+        * @param LogReader &$reader where to get our data from
+        */
        function LogViewer( &$reader ) {
                global $wgUser;
                $this->skin =& $wgUser->getSkin();
                $this->reader =& $reader;
        }
        
+       /**
+        * Take over the whole output page in $wgOut with the log display.
+        */
        function show() {
                global $wgOut;
                $this->showHeader( $wgOut );
@@ -161,6 +224,12 @@ class LogViewer {
                $this->showPrevNext( $wgOut );
        }
        
+       /**
+        * Output just the list of entries given by the linked LogReader,
+        * with extraneous UI elements. Use for displaying log fragments in
+        * another page (eg at Special:Undelete)
+        * @param OutputPage $out where to send output
+        */
        function showList( &$out ) {
                $html = "";
                $result = $this->reader->getRows();
@@ -171,13 +240,11 @@ class LogViewer {
                $out->addHTML( $html );
        }
        
-       # wfMsg( unprotectedarticle, $text )
-       # wfMsg( 'protectedarticle', $text )
-       # wfMsg( 'deletedarticle', $text )
-       # wfMsg( 'uploadedimage', $text )
-       # wfMsg( "blocklogentry", $this->BlockAddress, $this->BlockExpiry );
-       # wfMsg( "bureaucratlogentry", $this->mUser, implode( " ", $rightsNotation ) );
-       # wfMsg( "undeletedarticle", $this->mTarget ),
+       /**
+        * @param Object $s a single row from the result set
+        * @return string Formatted HTML list item
+        * @private
+        */
        function logLine( $s ) {
                global $wgLang;
                $title = Title::makeTitle( $s->log_namespace, $s->log_title );
@@ -200,6 +267,10 @@ class LogViewer {
                return $out;
        }
        
+       /**
+        * @param OutputPage &$out where to send output
+        * @private
+        */
        function showHeader( &$out ) {
                $type = $this->reader->queryType();
                if( LogPage::isLogType( $type ) ) {
@@ -208,6 +279,10 @@ class LogViewer {
                }
        }
        
+       /**
+        * @param OutputPage &$out where to send output
+        * @private
+        */
        function showOptions( &$out ) {
                global $wgScript;
                $action = htmlspecialchars( $wgScript );
@@ -222,6 +297,10 @@ class LogViewer {
                        "</form>" );
        }
        
+       /**
+        * @return string Formatted HTML
+        * @private
+        */
        function getTypeMenu() {
                $out = "<select name='type'>\n";
                foreach( LogPage::validTypes() as $type ) {
@@ -233,18 +312,30 @@ class LogViewer {
                return $out;
        }
        
+       /**
+        * @return string Formatted HTML
+        * @private
+        */
        function getUserInput() {
                $user = htmlspecialchars( $this->reader->queryUser() );
                return "User: <input type='text' name='user' size='12' value=\"$user\" />\n";
        }
        
+       /**
+        * @return string Formatted HTML
+        * @private
+        */
        function getTitleInput() {
                $title = htmlspecialchars( $this->reader->queryTitle() );
                return "Title: <input type='text' name='page' size='20' value=\"$title\" />\n";
        }
        
+       /**
+        * @param OutputPage &$out where to send output
+        * @private
+        */
        function showPrevNext( &$out ) {
-               global $wgLang;
+               global $wgContLang;
                $pieces = array();
                $pieces[] = 'type=' . htmlspecialchars( $this->reader->queryType() );
                $pieces[] = 'user=' . htmlspecialchars( $this->reader->queryUser() );
@@ -255,7 +346,7 @@ class LogViewer {
                # TODO: use timestamps instead of offsets to make it more natural
                # to go huge distances in time
                $html = wfViewPrevNext( $offset, $limit,
-                       $wgLang->specialpage( 'Log' ),
+                       $wgContLang->specialpage( 'Log' ),
                        $bits,
                        false);
                $out->addHTML( '<p>' . $html . '</p>' );