API: Change acprop description to allow for future expansion
[lhc/web/wiklou.git] / includes / SpecialLog.php
index 7b021c9..5c28340 100644 (file)
@@ -74,7 +74,8 @@ class LogReader {
                
                // XXX This all needs to use Pager, ugly hack for now.
                global $wgMiserMode;
-               if ($wgMiserMode && ($this->offset >10000)) $this->offset=10000;
+               if( $wgMiserMode )
+                       $this->offset = min( $this->offset, 10000 );
        }
 
        /**
@@ -121,14 +122,17 @@ class LogReader {
         * @private
         */
        function limitTitle( $page , $pattern ) {
+               global $wgMiserMode;
+               
                $title = Title::newFromText( $page );
-               if( empty( $page ) || is_null( $title )  ) {
+               
+               if( strlen( $page ) == 0 || !$title instanceof Title )
                        return false;
-               }
+
                $this->title =& $title;
                $this->pattern = $pattern;
                $ns = $title->getNamespace();
-               if ( $pattern ) {
+               if ( $pattern && !$wgMiserMode ) {
                        $safetitle = $this->db->escapeLike( $title->getDBkey() ); // use escapeLike to avoid expensive search patterns like 't%st%'
                        $this->whereClauses[] = "log_namespace=$ns AND log_title LIKE '$safetitle%'";
                } else {
@@ -179,7 +183,7 @@ class LogReader {
         * @return ResultWrapper result object to return the relevant rows
         */
        function getRows() {
-               $res = $this->db->query( $this->getQuery(), 'LogReader::getRows' );
+               $res = $this->db->query( $this->getQuery(), __METHOD__ );
                return $this->db->resultObject( $res );
        }
 
@@ -214,6 +218,23 @@ class LogReader {
                        return $this->title->getPrefixedText();
                }
        }
+       
+       /**
+        * Is there at least one row?
+        *
+        * @return bool
+        */
+       public function hasRows() {
+               # Little hack...
+               $limit = $this->limit;
+               $this->limit = 1;
+               $res = $this->db->query( $this->getQuery() );
+               $this->limit = $limit;
+               $ret = $this->db->numRows( $res ) > 0;
+               $this->db->freeResult( $res );
+               return $ret;
+       }
+       
 }
 
 /**
@@ -221,19 +242,25 @@ class LogReader {
  * @addtogroup SpecialPage
  */
 class LogViewer {
+       const NO_ACTION_LINK = 1;
+       
        /**
         * @var LogReader $reader
         */
        var $reader;
        var $numResults = 0;
+       var $flags = 0;
 
        /**
         * @param LogReader &$reader where to get our data from
+        * @param integer $flags Bitwise combination of flags:
+        *     self::NO_ACTION_LINK   Don't show restore/unblock/block links
         */
-       function LogViewer( &$reader ) {
+       function LogViewer( &$reader, $flags = 0 ) {
                global $wgUser;
                $this->skin = $wgUser->getSkin();
                $this->reader =& $reader;
+               $this->flags = $flags;
        }
 
        /**
@@ -315,7 +342,7 @@ class LogViewer {
        }
 
        function showError( &$out ) {
-               $out->addWikiText( wfMsg( 'logempty' ) );
+               $out->addWikiMsg( 'logempty' );
        }
 
        /**
@@ -324,7 +351,7 @@ class LogViewer {
         * @private
         */
        function logLine( $s ) {
-               global $wgLang, $wgUser;;
+               global $wgLang, $wgUser, $wgContLang;
                $skin = $wgUser->getSkin();
                $title = Title::makeTitle( $s->log_namespace, $s->log_title );
                $time = $wgLang->timeanddate( wfTimestamp(TS_MW, $s->log_timestamp), true );
@@ -339,45 +366,49 @@ class LogViewer {
                }
 
                $userLink = $this->skin->userLink( $s->log_user, $s->user_name ) . $this->skin->userToolLinksRedContribs( $s->log_user, $s->user_name );
-               $comment = $this->skin->commentBlock( $s->log_comment );
+               $comment = $wgContLang->getDirMark() . $this->skin->commentBlock( $s->log_comment );
                $paramArray = LogPage::extractParams( $s->log_params );
                $revert = '';
                // show revertmove link
-               if ( $s->log_type == 'move' && isset( $paramArray[0] ) ) {
-                       $destTitle = Title::newFromText( $paramArray[0] );
-                       if ( $destTitle ) {
-                               $reviewlink = $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Movepage' ),
-                                       wfMsg( 'revertmove' ),
-                                       'wpOldTitle=' . urlencode( $destTitle->getPrefixedDBkey() ) .
-                                       '&wpNewTitle=' . urlencode( $title->getPrefixedDBkey() ) .
-                                       '&wpReason=' . urlencode( wfMsgForContent( 'revertmove' ) ) .
-                                       '&wpMovetalk=0' );
+               if ( !( $this->flags & self::NO_ACTION_LINK ) ) {
+                       if ( $s->log_type == 'move' && isset( $paramArray[0] ) && $wgUser->isAllowed( 'move' ) ) {
+                               $destTitle = Title::newFromText( $paramArray[0] );
+                               if ( $destTitle ) {
+                                       $revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Movepage' ),
+                                               wfMsg( 'revertmove' ),
+                                               'wpOldTitle=' . urlencode( $destTitle->getPrefixedDBkey() ) .
+                                               '&wpNewTitle=' . urlencode( $title->getPrefixedDBkey() ) .
+                                               '&wpReason=' . urlencode( wfMsgForContent( 'revertmove' ) ) .
+                                               '&wpMovetalk=0' ) . ')';
+                               }
+                       // show undelete link
+                       } elseif ( $s->log_action == 'delete' && $wgUser->isAllowed( 'delete' ) ) {
+                               $revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete' ),
+                                       wfMsg( 'undeletelink' ) ,
+                                       'target='. urlencode( $title->getPrefixedDBkey() ) ) . ')';
+                       // show unblock link
+                       } elseif ( $s->log_action == 'block' && $wgUser->isAllowed( 'block' ) ) {
+                               $revert = '(' .  $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Ipblocklist' ),
+                                       wfMsg( 'unblocklink' ),
+                                       'action=unblock&ip=' . urlencode( $s->log_title ) ) . ')';
+                       // show change protection link
+                       } elseif ( ( $s->log_action == 'protect' || $s->log_action == 'modify' ) && $wgUser->isAllowed( 'protect' ) ) {
+                               $revert = '(' .  $skin->makeKnownLinkObj( $title, wfMsg( 'protect_change' ), 'action=unprotect' ) . ')';
+                       // Show unmerge link
+                       } elseif ( $s->log_action == 'merge' ) {
+                               $merge = SpecialPage::getTitleFor( 'Mergehistory' );
+                               $revert = '(' .  $this->skin->makeKnownLinkObj( $merge, wfMsg('revertmerge'),
+                                       wfArrayToCGI( 
+                                               array('target' => $paramArray[0], 'dest' => $title->getPrefixedText(), 'mergepoint' => $paramArray[1] ) 
+                                       ) 
+                               ) . ')';
+                       } elseif ( wfRunHooks( 'LogLine', array( $s->log_type, $s->log_action, $title, $paramArray, &$comment, &$revert, $s->log_timestamp ) ) ) {
+                               // wfDebug( "Invoked LogLine hook for " $s->log_type . ", " . $s->log_action . "\n" );
+                               // Do nothing. The implementation is handled by the hook modifiying the passed-by-ref parameters.
                        }
-               // show undelete link
-               } elseif ( $s->log_action == 'delete' && $wgUser->isAllowed( 'delete' ) ) {
-                       $revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete' ),
-                               wfMsg( 'undeletebtn' ) ,
-                               'target='. urlencode( $title->getPrefixedDBkey() ) ) . ')';
-               
-               // show unblock link
-               } elseif ( $s->log_action == 'block' && $wgUser->isAllowed( 'block' ) ) {
-                       $revert = '(' .  $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Ipblocklist' ),
-                               wfMsg( 'unblocklink' ),
-                               'action=unblock&ip=' . urlencode( $s->log_title ) ) . ')';
-               // show change protection link
-               } elseif ( $s->log_action == 'protect' && $wgUser->isAllowed( 'protect' ) ) {
-                       $revert = '(' .  $skin->makeKnownLink( $title->getPrefixedDBkey() ,
-                               wfMsg( 'protect_change' ),
-                               'action=unprotect' ) . ')';
-               // show user tool links for self created users
-               } elseif ( $s->log_action == 'create2' ) {
-                       $revert = $this->skin->userToolLinksRedContribs( $s->log_user, $s->log_title );
-                       // do not show $comment for self created accounts. It includes wrong user tool links:
-                       // 'blockip' for users w/o block allowance and broken links for very long usernames (bug 4756)
-                       $comment = '';
                }
 
-               $action = LogPage::actionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, true, true );
+               $action = LogPage::actionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, true );
                $out = "<li>$time $userLink $action $comment $revert</li>\n";
                return $out;
        }
@@ -399,7 +430,7 @@ class LogViewer {
         * @private
         */
        function showOptions( &$out ) {
-               global $wgScript;
+               global $wgScript, $wgMiserMode;
                $action = htmlspecialchars( $wgScript );
                $title = SpecialPage::getTitleFor( 'Log' );
                $special = htmlspecialchars( $title->getPrefixedDBkey() );
@@ -410,7 +441,7 @@ class LogViewer {
                        $this->getTypeMenu() . "\n" .
                        $this->getUserInput() . "\n" .
                        $this->getTitleInput() . "\n" .
-                       $this->getTitlePattern() . "\n" .
+                       (!$wgMiserMode?($this->getTitlePattern()."\n"):"") .
                        Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" .
                        "</fieldset></form>" );
        }
@@ -468,7 +499,7 @@ class LogViewer {
         */
        function getTitlePattern() {
                $pattern = $this->reader->queryPattern();
-               return Xml::checkLabel( wfMsg( 'title-pattern' ), 'pattern', 'pattern', $pattern );
+               return Xml::checkLabel( wfMsg( 'log-title-wildcard' ), 'pattern', 'pattern', $pattern );
        }
 
        /**
@@ -494,6 +525,3 @@ class LogViewer {
                $out->addHTML( '<p>' . $html . '</p>' );
        }
 }
-
-
-?>