From f9e3a30af8c23e07ab63400b52ebdf0048349e23 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Sat, 19 May 2007 05:15:24 +0000 Subject: [PATCH] API: watchlist now reports a proper feed item when the user is not logged in. Also, fixed the date bug - automatically shows one last day. --- includes/api/ApiFeedWatchlist.php | 63 ++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/includes/api/ApiFeedWatchlist.php b/includes/api/ApiFeedWatchlist.php index 97d1f79897..55b568116c 100644 --- a/includes/api/ApiFeedWatchlist.php +++ b/includes/api/ApiFeedWatchlist.php @@ -45,8 +45,8 @@ class ApiFeedWatchlist extends ApiBase { $feedformat = null; extract($this->extractRequestParams()); - // limit to 1 day - $startTime = wfTimestamp(TS_MW, time() - intval(1 * 86400)); + // limit to 1 day going from now back + $endTime = wfTimestamp(TS_MW, time() - intval(1 * 24 * 60 * 60)); // Prepare nested request $params = new FauxRequest(array ( @@ -55,29 +55,56 @@ class ApiFeedWatchlist extends ApiBase { 'siprop' => 'general', 'list' => 'watchlist', 'wlprop' => 'user|comment|timestamp', - 'wlstart' => $startTime, + 'wldir' => 'older', + 'wlend' => $endTime, 'wllimit' => 50 )); // Execute $module = new ApiMain($params); - $module->execute(); - // Get data array - $data = $module->getResultData(); - - $feedItems = array (); - foreach ($data['query']['watchlist'] as $info) { - $feedItems[] = $this->createFeedItem($info); + try { + $module->execute(); + + // Get data array + $data = $module->getResultData(); + + $feedItems = array (); + foreach ($data['query']['watchlist'] as $info) { + $feedItems[] = $this->createFeedItem($info); + } + + global $wgFeedClasses, $wgSitename, $wgContLanguageCode; + $feedTitle = $wgSitename . ' - ' . wfMsgForContent('watchlist') . ' [' . $wgContLanguageCode . ']'; + $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullUrl(); + + $feed = new $wgFeedClasses[$feedformat] ($feedTitle, htmlspecialchars(wfMsgForContent('watchlist')), $feedUrl); + + ApiFormatFeedWrapper :: setResult($this->getResult(), $feed, $feedItems); + + } catch (Exception $e) { + + // Error results should not be cached + $this->getMain()->setCacheMaxAge(0); + + global $wgFeedClasses, $wgSitename, $wgContLanguageCode; + $feedTitle = $wgSitename . ' - Error - ' . wfMsgForContent('watchlist') . ' [' . $wgContLanguageCode . ']'; + $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullUrl(); + + $feed = new $wgFeedClasses[$feedformat] ($feedTitle, htmlspecialchars(wfMsgForContent('watchlist')), $feedUrl); + + + if ($e instanceof UsageException) { + $errorCode = $e->getCodeString(); + } else { + // Something is seriously wrong + $errorCode = 'internal_api_error'; + } + + $errorText = $e->getMessage(); + $feedItems[] = new FeedItem("Error ($errorCode)", $errorText, "", "", ""); + ApiFormatFeedWrapper :: setResult($this->getResult(), $feed, $feedItems); } - - global $wgFeedClasses, $wgSitename, $wgContLanguageCode; - $feedTitle = $wgSitename . ' - ' . wfMsgForContent('watchlist') . ' [' . $wgContLanguageCode . ']'; - $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullUrl(); - - $feed = new $wgFeedClasses[$feedformat] ($feedTitle, htmlspecialchars(wfMsgForContent('watchlist')), $feedUrl); - - ApiFormatFeedWrapper :: setResult($this->getResult(), $feed, $feedItems); } private function createFeedItem($info) { -- 2.20.1