MediaWiki r34983 - Code Review

Jump to: navigation, search
Repository:MediaWiki
Revision:r34982‎ | r34983 (on ViewVC)‎ | r34984 >
Date:16:08, 17 May 2008
Author:dantman
Status:old
Tags:
Comment:
Improve UI for Special:Recentchanges and Special:Recentchangeslinked.
* Allow configuration of the default limit and days links with the variables $wgRCLinkLimits and $wgRCLinkDays.
* When selecting a limit and a days on the special pages, if you use a number not within the default list it will be added to the display.
** The selected limit and days is bolded. (This can be considered the first step for bug 3327)
* Optional other configuration option $wgRCFilterByAge, when enabled the list of days will be filtered so that only links within what $wgRCMaxAge says will be stored in the database will be displayed. Note that this is disabled by default because MediaWiki doesn't quite seam to trim out old entries as quickly as $wgRCMaxAge says it should be and some people appear to use the extra 30days links to display older entries even though $wgRCMaxAge is set to 7days on said wiki.

This should also solve bug 9257.
Modified paths:

Diff [purge]

Index: trunk/phase3/includes/SpecialRecentchanges.php
===================================================================
--- trunk/phase3/includes/SpecialRecentchanges.php	(revision 34982)
+++ trunk/phase3/includes/SpecialRecentchanges.php	(revision 34983)
@@ -477,24 +477,26 @@
 /**
  *
  */
-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;
 }
 
@@ -503,19 +505,31 @@
  */
 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.
+	$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 != '' )
@@ -534,11 +548,12 @@
  * @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;"' : '' );
 }
 
 /**
@@ -547,7 +562,7 @@
  * @param $nondefaults
  */
 function rcOptionsPanel( $defaults, $nondefaults ) {
-	global $wgLang, $wgUser;
+	global $wgLang, $wgUser, $wgRCLinkLimits, $wgRCLinkDays;
 
 	$options = $nondefaults + $defaults;
 
@@ -561,19 +576,25 @@
 			$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);
 
Index: trunk/phase3/includes/Setup.php
===================================================================
--- trunk/phase3/includes/Setup.php	(revision 34982)
+++ trunk/phase3/includes/Setup.php	(revision 34983)
@@ -159,6 +159,19 @@
 	wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" );
 }
 
+if( $wgRCFilterByAge ) {
+	## Trim down $wgRCLinkDays so that it only lists links which are valid
+	## as determined by $wgRCMaxAge.
+	## Note that we allow 1 link higher than the max for things like 56 days but a 60 day link.
+	sort($wgRCLinkDays);
+	for( $i = 0; $i < count($wgRCLinkDays); $i++ ) {
+		if( $wgRCLinkDays[$i] >= $wgRCMaxAge / ( 3600 * 24 ) ) {
+			$wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i+1, false );
+			break;
+		}
+	}
+}
+
 if ( $wgSkipSkin ) {
 	$wgSkipSkins[] = $wgSkipSkin;
 }
Index: trunk/phase3/includes/DefaultSettings.php
===================================================================
--- trunk/phase3/includes/DefaultSettings.php	(revision 34982)
+++ trunk/phase3/includes/DefaultSettings.php	(revision 34983)
@@ -1933,7 +1933,19 @@
  */
 $wgRCMaxAge = 7 * 24 * 3600;
 
+/**
+ * Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers higher than what will be stored.
+ * Note that this is disabled by default because we sometimes do have RC data which is beyond the limit
+ * for some reason, and some users may use the high numbers to display that data which is still there.
+ */
+$wgRCFilterByAge = false;
 
+/**
+ * List of Days and Limits options to list in the Special:Recentchanges and Special:Recentchangeslinked pages.
+ */
+$wgRCLinkLimits = array( 50, 100, 250, 500 );
+$wgRCLinkDays   = array( 1, 3, 7, 14, 30 );
+
 # Send RC updates via UDP
 $wgRC2UDPAddress = false;
 $wgRC2UDPPort = false;

Follow-up revisions

Rev.Commit summaryAuthorDate
r34990Missing RELEASE-NOTES for r34983.dantman20:02, 17 May 2008
r41723Remove some redundant "starting from" message cruft (bug 3327)aaron03:49, 6 October 2008
r50930* (bug 9257) $wgRCMaxAge now defaults to three monthsnikerabbit08:42, 23 May 2009

Status & tagging log

  • 15:26, 12 September 2011 Meno25 (Talk | contribs) changed the status of r34983 [removed: ok added: old]
Personal tools
Namespaces
Variants
Views
Actions
Site
Support
Download
Development
Communication
Toolbox