*
*/
require_once( 'SpecialRecentchanges.php' );
-require_once( 'WatchedItem.php' );
/**
- * constructor
+ * Constructor
+ * @todo Document $par parameter.
+ * @param $par String: FIXME
*/
function wfSpecialWatchlist( $par ) {
global $wgUser, $wgOut, $wgLang, $wgMemc, $wgRequest, $wgContLang;
global $wgUseWatchlistCache, $wgWLCacheTimeout, $wgDBname;
global $wgRCShowWatchingUsers, $wgEnotifWatchlist, $wgShowUpdatedMarker;
- global $wgEnotifWatchlist, $wgFilterRobotsWL;
+ global $wgEnotifWatchlist;
$fname = 'wfSpecialWatchlist';
$wgOut->setPagetitle( wfMsg( 'watchlist' ) );
}
$defaults = array(
- /* float */ 'days' => 3.0, /* or 0.5, watch further below */
- /* bool */ 'hideOwn' => false,
- /* bool */ 'hideBots' => false,
- 'namespace' => 'all',
+ /* float */ 'days' => floatval( $wgUser->getOption( 'watchlistdays' ) ), /* 3.0 or 0.5, watch further below */
+ /* bool */ 'hideOwn' => (int)$wgUser->getBoolOption( 'watchlisthideown' ),
+ /* bool */ 'hideBots' => (int)$wgUser->getBoolOption( 'watchlisthidebots' ),
+ /* ? */ 'namespace' => 'all',
);
extract($defaults);
# Extract variables from the request, falling back to user preferences or
# other default values if these don't exist
- $prefs['days'] = floatval( $wgUser->getOption( 'watchlistdays' ) );
- $prefs['hideown'] = $wgUser->getBoolOption( 'watchlisthideown' );
-
- # The hide bots thing is b0rk3d for now
- # $prefs['bots'] = $wgUser->getBoolOption( 'watchlisthidebots' );
+ $prefs['days' ] = floatval( $wgUser->getOption( 'watchlistdays' ) );
+ $prefs['hideown' ] = $wgUser->getBoolOption( 'watchlisthideown' );
+ $prefs['hidebots'] = $wgUser->getBoolOption( 'watchlisthidebots' );
# Get query variables
$days = $wgRequest->getVal( 'days', $prefs['days'] );
$hideOwn = $wgRequest->getBool( 'hideOwn', $prefs['hideown'] );
- $hideBots = $wgRequest->getBool( 'hideBots' );
+ $hideBots = $wgRequest->getBool( 'hideBots', $prefs['hidebots'] );
# Get namespace value, if supplied, and prepare a WHERE fragment
$nameSpace = $wgRequest->getIntOrNull( 'namespace' );
if( $wl->removeWatch() === false ) {
$wgOut->addHTML( "<br />\n" . wfMsg( 'couldntremove', htmlspecialchars($one) ) );
} else {
+ wfRunHooks('UnwatchArticle', array(&$wgUser, new Article($t)));
$wgOut->addHTML( ' (' . htmlspecialchars($one) . ')' );
}
} else {
$wgOut->addHTML( "<br />\n" . wfMsg( 'iteminvalidname', htmlspecialchars($one) ) );
}
}
- $wgOut->addHTML( "done.</p>\n" );
+ $wgOut->addHTML( "<br />\n" . wfMsg( 'wldone' ) . "</p>\n" );
}
if ( $wgUseWatchlistCache ) {
$nondefaults = array();
wfAppendToArrayIfNotDefault( 'days', $days, $defaults, $nondefaults);
- wfAppendToArrayIfNotDefault( 'hideOwn', $hideOwn, $defaults, $nondefaults);
- wfAppendToArrayIfNotDefault( 'hideBots', $hideBots, $defaults, $nondefaults);
+ wfAppendToArrayIfNotDefault( 'hideOwn', (int)$hideOwn, $defaults, $nondefaults);
+ wfAppendToArrayIfNotDefault( 'hideBots', (int)$hideBots, $defaults, $nondefaults);
wfAppendToArrayIfNotDefault( 'namespace', $nameSpace, $defaults, $nondefaults );
if ( $days <= 0 ) {
# Up estimate of watched items by 15% to compensate for talk pages...
+ # Toggles
$andHideOwn = $hideOwn ? "AND (rc_user <> $uid)" : '';
- if( $wgFilterRobotsWL ) {
- $andHideBotsOptional = $hideBots ? "AND (rc_bot = 0)" : '';
- } else {
- $andHideBotsOptional = "AND rc_this_oldid=page_latest";
- }
-
+ $andHideBots = $hideBots ? "AND (rc_bot = 0)" : '';
# Show watchlist header
$header = '';
$header .= wfMsg( 'wlheader-showupdated' ) . "\n";
}
+ # Toggle watchlist content (all recent edits or just the latest)
+ if( $wgUser->getOption( 'extendwatchlist' )) {
+ $andLatest='';
+ $limitWatchlist = 'LIMIT ' . intval( $wgUser->getOption( 'wllimit' ) );
+ } else {
+ $andLatest= 'AND rc_this_oldid=page_latest';
+ $limitWatchlist = '';
+ }
+
# TODO: Consider removing the third parameter
$header .= wfMsg( 'watchdetails', $wgLang->formatNum( $nitems ),
$wgLang->formatNum( $npages ), '',
rc_user AS rev_user, rc_user_text AS rev_user_text,
rc_timestamp AS rev_timestamp, rc_minor AS rev_minor_edit,
rc_this_oldid AS rev_id,
- rc_last_oldid,
+ rc_last_oldid, rc_id, rc_patrolled,
rc_new AS page_is_new,wl_notificationtimestamp
FROM $watchlist,$recentchanges,$page
WHERE wl_user=$uid
AND wl_title=rc_title
AND rc_timestamp > '$cutoff'
AND rc_cur_id=page_id
+ $andLatest
$andHideOwn
- $andHideBotsOptional
+ $andHideBots
$nameSpaceClause
- ORDER BY rc_timestamp DESC";
+ ORDER BY rc_timestamp DESC
+ $limitWatchlist";
$res = $dbr->query( $sql, $fname );
$numRows = $dbr->numRows( $res );
if($days >= 1)
$wgOut->addWikiText( wfMsg( 'rcnote', $wgLang->formatNum( $numRows ),
- $wgLang->formatNum( $days ) ) . '<br />' , false );
+ $wgLang->formatNum( $days ), $wgLang->timeAndDate( wfTimestampNow(), true ) ) . '<br />' , false );
elseif($days > 0)
$wgOut->addWikiText( wfMsg( 'wlnote', $wgLang->formatNum( $numRows ),
$wgLang->formatNum( round($days*24) ) ) . '<br />' , false );
$wgOut->addHTML( "\n" . wlCutoffLinks( $days, 'Watchlist', $nondefaults ) . "<br />\n" );
- $sk = $wgUser->getSkin();
- $s = $sk->makeKnownLink(
- $wgContLang->specialPage( 'Watchlist' ),
- (0 == $hideOwn) ? wfMsgHtml( 'wlhide' ) : wfMsgHtml( 'wlshow' ),
- wfArrayToCGI( array('hideOwn' => 1-$hideOwn ), $nondefaults ) );
- $wgOut->addHTML( wfMsgHtml( "wlhideshowown", $s ) );
-
- if( $wgFilterRobotsWL ) {
- $s = $sk->makeKnownLink(
- $wgContLang->specialPage( 'Watchlist' ),
- (0 == $hideBots) ? wfMsgHtml( 'wlhide' ) : wfMsgHtml( 'wlshow' ),
- wfArrayToCGI( array('hideBots' => 1-$hideBots ), $nondefaults ) );
- $wgOut->addHTML( wfMsgHtml( "wlhideshowbots", " $s" ) );
- }
+ # Spit out some control panel links
+ $thisTitle = Title::makeTitle( NS_SPECIAL, 'Watchlist' );
+ $skin = $wgUser->getSkin();
+ $linkElements = array( 'hideOwn' => 'wlhideshowown', 'hideBots' => 'wlhideshowbots' );
+
+ # Problems encountered using the fancier method
+ $label = $hideBots ? wfMsgHtml( 'show' ) : wfMsgHtml( 'hide' );
+ $linkBits = wfArrayToCGI( array( 'hideBots' => 1 - (int)$hideBots ), $nondefaults );
+ $link = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits );
+ $links[] = wfMsgHtml( 'wlhideshowbots', $link );
+
+ $label = $hideOwn ? wfMsgHtml( 'show' ) : wfMsgHtml( 'hide' );
+ $linkBits = wfArrayToCGI( array( 'hideOwn' => 1 - (int)$hideOwn ), $nondefaults );
+ $link = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits );
+ $links[] = wfMsgHtml( 'wlhideshowown', $link );
+
+ $wgOut->addHTML( implode( ' | ', $links ) );
# Form for namespace filtering
- $thisTitle = Title::makeTitle( NS_SPECIAL, 'Watchlist' );
$thisAction = $thisTitle->escapeLocalUrl();
$nsForm = "<form method=\"post\" action=\"{$thisAction}\">\n";
- $nsForm .= "<label for=\"namespace\">" . wfMsg( 'namespace' ) . "</label> ";
+ $nsForm .= "<label for=\"namespace\">" . wfMsgExt( 'namespace', array( 'parseinline') ) . "</label> ";
$nsForm .= HTMLnamespaceselector( $nameSpace, '' ) . "\n";
$nsForm .= ( $hideOwn ? "<input type=\"hidden\" name=\"hideown\" value=\"1\" />\n" : "" );
$nsForm .= ( $hideBots ? "<input type=\"hidden\" name=\"hidebots\" value=\"1\" />\n" : "" );
$nsForm .= "<input type=\"hidden\" name=\"days\" value=\"" . $days . "\" />\n";
- $nsForm .= "<input type=\"submit\" name=\"submit\" value=\"" . wfMsgHtml( 'allpagessubmit' ) . "\" />\n";
+ $nsForm .= "<input type=\"submit\" name=\"submit\" value=\"" . wfMsgExt( 'allpagessubmit', array( 'escape') ) . "\" />\n";
$nsForm .= "</form>\n";
$wgOut->addHTML( $nsForm );
return $s;
}
+/**
+ * Returns html
+ */
function wlCutoffLinks( $days, $page = 'Watchlist', $options = array() ) {
$hours = array( 1, 2, 6, 12 );
$days = array( 1, 3, 7 );
foreach( $days as $d ) {
$days[$i++] = wlDaysLink( $d, $page, $options );
}
- return wfMsg ('wlshowlast',
+ return wfMsgExt('wlshowlast',
+ array('parseinline', 'replaceafter'),
implode(' | ', $hours),
implode(' | ', $days),
wlDaysLink( 0, $page, $options ) );