Revert r35848 per Brion's WONTFIX of bug 14536: "This would just mean that there...
[lhc/web/wiklou.git] / includes / SpecialRecentchanges.php
index 1d2e108..cd1dac0 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- *
- * @addtogroup SpecialPage
+ * @file
+ * @ingroup SpecialPage
  */
 
 /**
@@ -16,7 +16,6 @@ function wfSpecialRecentchanges( $par, $specialPage ) {
        global $wgUser, $wgOut, $wgRequest, $wgUseRCPatrol;
        global $wgRCShowWatchingUsers, $wgShowUpdatedMarker;
        global $wgAllowCategorizedRecentChanges ;
-       $fname = 'wfSpecialRecentchanges';
 
        # Get query parameters
        $feedFormat = $wgRequest->getVal( 'feed' );
@@ -56,10 +55,7 @@ function wfSpecialRecentchanges( $par, $specialPage ) {
        # As a feed, use limited settings only
        if( $feedFormat ) {
                global $wgFeedLimit;
-               if( $limit > $wgFeedLimit ) {
-                       $limit = $wgFeedLimit;
-               }
-
+               $limit = min( $wgFeedLimit, $limit );
        } else {
 
                $namespace = $wgRequest->getIntOrNull( 'namespace' );
@@ -102,11 +98,8 @@ function wfSpecialRecentchanges( $par, $specialPage ) {
 
        if ( $limit < 0 || $limit > 5000 ) $limit = $defaults['limit'];
 
-
        # Database connection and caching
        $dbr = wfGetDB( DB_SLAVE );
-       list( $recentchanges, $watchlist ) = $dbr->tableNamesN( 'recentchanges', 'watchlist' );
-
 
        $cutoff_unixtime = time() - ( $days * 86400 );
        $cutoff_unixtime = $cutoff_unixtime - ($cutoff_unixtime % 86400);
@@ -122,7 +115,7 @@ function wfSpecialRecentchanges( $par, $specialPage ) {
 
        # Get last modified date, for client caching
        # Don't use this if we are using the patrol feature, patrol changes don't update the timestamp
-       $lastmod = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)', false, $fname );
+       $lastmod = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)', false, __FUNCTION__ );
        if ( $feedFormat || !$wgUseRCPatrol ) {
                if( $lastmod && $wgOut->checkLastModified( $lastmod ) ){
                        # Client cache fresh and headers sent, nothing more to do.
@@ -152,15 +145,15 @@ function wfSpecialRecentchanges( $par, $specialPage ) {
        $hidem .= $forcebot ? ' AND rc_bot = 1' : '';
 
        if( $hidemyself ) {
-               if( $wgUser->getID() ) {
-                       $hidem .= ' AND rc_user != ' . $wgUser->getID();
+               if( $wgUser->getId() ) {
+                       $hidem .= ' AND rc_user != ' . $wgUser->getId();
                } else {
                        $hidem .= ' AND rc_user_text != ' . $dbr->addQuotes( $wgUser->getName() );
                }
        }
 
        // JOIN on watchlist for users
-       $uid = $wgUser->getID();
+       $uid = $wgUser->getId();
        if( $uid ) {
                $tables = array( 'recentchanges', 'watchlist' );
                $join_conds = array( 'watchlist' => array('LEFT JOIN',"wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace") );
@@ -170,10 +163,10 @@ function wfSpecialRecentchanges( $par, $specialPage ) {
        }
        
        # Namespace filtering
-       $hidem = is_null($namespace) ?  '' : ' AND rc_namespace' . ($invert ? '!=' : '=') . $namespace;
+       $hidem .= is_null($namespace) ?  '' : ' AND rc_namespace' . ($invert ? '!=' : '=') . $namespace;
        
        // Is there either one namespace selected or excluded?
-       // Also, if this is the main namespace, just use timestamp index.
+       // Also, if this is "all" or main namespace, just use timestamp index.
        if( is_null($namespace) || $invert || $namespace == NS_MAIN ) {
                $res = $dbr->select( $tables, '*',
                        array( "rc_timestamp >= '{$cutoff}' {$hidem}" ),
@@ -480,24 +473,26 @@ function rcDoOutputFeed( $rows, &$feed ) {
 /**
  *
  */
-function rcCountLink( $lim, $d, $page='Recentchanges', $more='' ) {
+function rcCountLink( $lim, $d, $page='Recentchanges', $more='', $active = false ) {
        global $wgUser, $wgLang, $wgContLang;
        $sk = $wgUser->getSkin();
        $s = $sk->makeKnownLink( $wgContLang->specialPage( $page ),
          ($lim ? $wgLang->formatNum( "{$lim}" ) : wfMsg( 'recentchangesall' ) ), "{$more}" .
-         ($d ? "days={$d}&" : '') . 'limit='.$lim );
+         ($d ? "days={$d}&" : '') . 'limit='.$lim, '', '',
+         $active ? 'style="font-weight: bold;"' : '' );
        return $s;
 }
 
 /**
  *
  */
-function rcDaysLink( $lim, $d, $page='Recentchanges', $more='' ) {
+function rcDaysLink( $lim, $d, $page='Recentchanges', $more='', $active = false ) {
        global $wgUser, $wgLang, $wgContLang;
        $sk = $wgUser->getSkin();
        $s = $sk->makeKnownLink( $wgContLang->specialPage( $page ),
          ($d ? $wgLang->formatNum( "{$d}" ) : wfMsg( 'recentchangesall' ) ), $more.'days='.$d .
-         ($lim ? '&limit='.$lim : '') );
+         ($lim ? '&limit='.$lim : ''), '', '',
+         $active ? 'style="font-weight: bold;"' : '' );
        return $s;
 }
 
@@ -506,19 +501,32 @@ function rcDaysLink( $lim, $d, $page='Recentchanges', $more='' ) {
  */
 function rcDayLimitLinks( $days, $limit, $page='Recentchanges', $more='', $doall = false, $minorLink = '',
        $botLink = '', $liuLink = '', $patrLink = '', $myselfLink = '' ) {
+       global $wgRCLinkLimits, $wgRCLinkDays;
        if ($more != '') $more .= '&';
-       $cl = rcCountLink( 50, $days, $page, $more ) . ' | ' .
-         rcCountLink( 100, $days, $page, $more  ) . ' | ' .
-         rcCountLink( 250, $days, $page, $more  ) . ' | ' .
-         rcCountLink( 500, $days, $page, $more  ) .
-         ( $doall ? ( ' | ' . rcCountLink( 0, $days, $page, $more ) ) : '' );
-       $dl = rcDaysLink( $limit, 1, $page, $more  ) . ' | ' .
-         rcDaysLink( $limit, 3, $page, $more  ) . ' | ' .
-         rcDaysLink( $limit, 7, $page, $more  ) . ' | ' .
-         rcDaysLink( $limit, 14, $page, $more  ) . ' | ' .
-         rcDaysLink( $limit, 30, $page, $more  ) .
-         ( $doall ? ( ' | ' . rcDaysLink( $limit, 0, $page, $more ) ) : '' );
-
+       
+       # Sort data for display and make sure it's unique after we've added user data.
+       # FIXME: why does this piss around with globals like this? Why is $limit added on globally?
+       $wgRCLinkLimits[] = $limit;
+       $wgRCLinkDays[] = $days;
+       sort($wgRCLinkLimits);
+       sort($wgRCLinkDays);
+       $wgRCLinkLimits = array_unique($wgRCLinkLimits);
+       $wgRCLinkDays = array_unique($wgRCLinkDays);
+       
+       $cl = array();
+       foreach( $wgRCLinkLimits as $countLink ) {
+               $cl[] = rcCountLink( $countLink, $days, $page, $more, $countLink == $limit );
+       }
+       if( $doall ) $cl[] = rcCountLink( 0, $days, $page, $more );
+       $cl = implode( ' | ', $cl);
+       
+       $dl = array();
+       foreach( $wgRCLinkDays as $daysLink ) {
+               $dl[] = rcDaysLink( $limit, $daysLink, $page, $more, $daysLink == $days );
+       }
+       if( $doall ) $dl[] = rcDaysLink( $limit, 0, $page, $more );
+       $dl = implode( ' | ', $dl);
+       
        $linkParts = array( 'minorLink' => 'minor', 'botLink' => 'bots', 'liuLink' => 'liu', 'patrLink' => 'patr', 'myselfLink' => 'mine' );
        foreach( $linkParts as $linkVar => $linkMsg ) {
                if( $$linkVar != '' )
@@ -537,11 +545,12 @@ function rcDayLimitLinks( $days, $limit, $page='Recentchanges', $more='', $doall
  * @param $override
  * @param $options
  */
-function makeOptionsLink( $title, $override, $options ) {
+function makeOptionsLink( $title, $override, $options, $active = false ) {
        global $wgUser, $wgContLang;
        $sk = $wgUser->getSkin();
        return $sk->makeKnownLink( $wgContLang->specialPage( 'Recentchanges' ),
-               htmlspecialchars( $title ), wfArrayToCGI( $override, $options ) );
+               htmlspecialchars( $title ), wfArrayToCGI( $override, $options ), '', '',
+               $active ? 'style="font-weight: bold;"' : '' );
 }
 
 /**
@@ -550,7 +559,7 @@ function makeOptionsLink( $title, $override, $options ) {
  * @param $nondefaults
  */
 function rcOptionsPanel( $defaults, $nondefaults ) {
-       global $wgLang, $wgUser;
+       global $wgLang, $wgUser, $wgRCLinkLimits, $wgRCLinkDays;
 
        $options = $nondefaults + $defaults;
 
@@ -564,19 +573,25 @@ function rcOptionsPanel( $defaults, $nondefaults ) {
                        $wgLang->formatNum( $options['days'] ),
                        $wgLang->timeAndDate( wfTimestampNow(), true ) );
 
+       # Sort data for display and make sure it's unique after we've added user data.
+       $wgRCLinkLimits[] = $options['limit'];
+       $wgRCLinkDays[] = $options['days'];
+       sort($wgRCLinkLimits);
+       sort($wgRCLinkDays);
+       $wgRCLinkLimits = array_unique($wgRCLinkLimits);
+       $wgRCLinkDays = array_unique($wgRCLinkDays);
+       
        // limit links
-       $options_limit = array(50, 100, 250, 500);
-       foreach( $options_limit as $value ) {
+       foreach( $wgRCLinkLimits as $value ) {
                $cl[] = makeOptionsLink( $wgLang->formatNum( $value ),
-                       array( 'limit' => $value ), $nondefaults) ;
+                       array( 'limit' => $value ), $nondefaults, $value == $options['limit'] ) ;
        }
        $cl = implode( ' | ', $cl);
 
        // day links, reset 'from' to none
-       $options_days = array(1, 3, 7, 14, 30);
-       foreach( $options_days as $value ) {
+       foreach( $wgRCLinkDays as $value ) {
                $dl[] = makeOptionsLink( $wgLang->formatNum( $value ),
-                       array( 'days' => $value, 'from' => ''  ), $nondefaults) ;
+                       array( 'days' => $value, 'from' => '' ), $nondefaults, $value == $options['days'] ) ;
        }
        $dl = implode( ' | ', $dl);
 
@@ -694,8 +709,7 @@ function rcFormatDiff( $row ) {
 
 function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiontext='' ) {
        global $wgFeedDiffCutoff, $wgContLang, $wgUser;
-       $fname = 'rcFormatDiff';
-       wfProfileIn( $fname );
+       wfProfileIn( __FUNCTION__ );
 
        $skin = $wgUser->getSkin();
        # log enties
@@ -712,7 +726,7 @@ function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiont
 
        if( $title->getNamespace() >= 0 && !$accErrors ) {
                if( $oldid ) {
-                       wfProfileIn( "$fname-dodiff" );
+                       wfProfileIn( __FUNCTION__."-dodiff" );
 
                        $de = new DifferenceEngine( $title, $oldid, $newid );
                        #$diffText = $de->getDiff( wfMsg( 'revisionasof',
@@ -742,7 +756,7 @@ function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiont
                                $diffText = UtfNormal::cleanUp( $diffText );
                                $diffText = rcApplyDiffStyle( $diffText );
                        }
-                       wfProfileOut( "$fname-dodiff" );
+                       wfProfileOut( __FUNCTION__."-dodiff" );
                } else {
                        $rev = Revision::newFromId( $newid );
                        if( is_null( $rev ) ) {
@@ -756,7 +770,7 @@ function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiont
                $completeText .= $diffText;
        }
 
-       wfProfileOut( $fname );
+       wfProfileOut( __FUNCTION__ );
        return $completeText;
 }