From b7f509c7b6bef857425925a0616057e2245d0b51 Mon Sep 17 00:00:00 2001 From: Daniel Friesen Date: Sat, 17 May 2008 16:08:34 +0000 Subject: [PATCH] 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. --- includes/DefaultSettings.php | 12 ++++++ includes/Setup.php | 13 ++++++ includes/SpecialRecentchanges.php | 71 ++++++++++++++++++++----------- 3 files changed, 71 insertions(+), 25 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 1fa3104da6..08c0c025a9 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -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; diff --git a/includes/Setup.php b/includes/Setup.php index 92e310bd34..2ed4a41190 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -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; } diff --git a/includes/SpecialRecentchanges.php b/includes/SpecialRecentchanges.php index 0d8502df88..12f5aebdbd 100644 --- a/includes/SpecialRecentchanges.php +++ b/includes/SpecialRecentchanges.php @@ -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); -- 2.20.1