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.
This commit is contained in:
Daniel Friesen 2008-05-17 16:08:34 +00:00
parent beedd5c5f3
commit b7f509c7b6
3 changed files with 71 additions and 25 deletions

View file

@ -1933,6 +1933,18 @@ $wgPutIPinRC = true;
*/
$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;

View file

@ -159,6 +159,19 @@ if ( $wgCommandLineMode ) {
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;
}

View file

@ -477,24 +477,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;
}
@ -503,19 +505,31 @@ 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.
$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 @@ 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;"' : '' );
}
/**
@ -547,7 +562,7 @@ function makeOptionsLink( $title, $override, $options ) {
* @param $nondefaults
*/
function rcOptionsPanel( $defaults, $nondefaults ) {
global $wgLang, $wgUser;
global $wgLang, $wgUser, $wgRCLinkLimits, $wgRCLinkDays;
$options = $nondefaults + $defaults;
@ -561,19 +576,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);