From a58285fd06c8113c45377c655dd43cef6337e815 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 11 Jan 2007 19:06:07 +0000 Subject: Aktualisierung auf MediaWiki 1.9.0 --- includes/SpecialWatchlist.php | 176 +++++++++++++++++++----------------------- 1 file changed, 80 insertions(+), 96 deletions(-) (limited to 'includes/SpecialWatchlist.php') diff --git a/includes/SpecialWatchlist.php b/includes/SpecialWatchlist.php index 87c925ac..33e19a2b 100644 --- a/includes/SpecialWatchlist.php +++ b/includes/SpecialWatchlist.php @@ -12,24 +12,23 @@ require_once( 'SpecialRecentchanges.php' ); /** * Constructor - * @todo Document $par parameter. - * @param $par String: FIXME + * + * @param $par Parameter passed to the page */ function wfSpecialWatchlist( $par ) { global $wgUser, $wgOut, $wgLang, $wgMemc, $wgRequest, $wgContLang; - global $wgUseWatchlistCache, $wgWLCacheTimeout; global $wgRCShowWatchingUsers, $wgEnotifWatchlist, $wgShowUpdatedMarker; global $wgEnotifWatchlist; $fname = 'wfSpecialWatchlist'; $skin =& $wgUser->getSkin(); - $specialTitle = Title::makeTitle( NS_SPECIAL, 'Watchlist' ); + $specialTitle = SpecialPage::getTitleFor( 'Watchlist' ); $wgOut->setRobotPolicy( 'noindex,nofollow' ); # Anons don't get a watchlist if( $wgUser->isAnon() ) { $wgOut->setPageTitle( wfMsg( 'watchnologin' ) ); - $llink = $skin->makeKnownLinkObj( Title::makeTitle( NS_SPECIAL, 'Userlogin' ), wfMsgHtml( 'loginreqlink' ), 'returnto=' . $specialTitle->getPrefixedUrl() ); + $llink = $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Userlogin' ), wfMsgHtml( 'loginreqlink' ), 'returnto=' . $specialTitle->getPrefixedUrl() ); $wgOut->addHtml( wfMsgWikiHtml( 'watchlistanontext', $llink ) ); return; } else { @@ -45,6 +44,7 @@ function wfSpecialWatchlist( $par ) { /* 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' ), + /* bool */ 'hideMinor' => (int)$wgUser->getBoolOption( 'watchlisthideminor' ), /* ? */ 'namespace' => 'all', ); @@ -55,12 +55,14 @@ function wfSpecialWatchlist( $par ) { $prefs['days' ] = floatval( $wgUser->getOption( 'watchlistdays' ) ); $prefs['hideown' ] = $wgUser->getBoolOption( 'watchlisthideown' ); $prefs['hidebots'] = $wgUser->getBoolOption( 'watchlisthidebots' ); + $prefs['hideminor'] = $wgUser->getBoolOption( 'watchlisthideminor' ); # Get query variables - $days = $wgRequest->getVal( 'days', $prefs['days'] ); - $hideOwn = $wgRequest->getBool( 'hideOwn', $prefs['hideown'] ); + $days = $wgRequest->getVal( 'days', $prefs['days'] ); + $hideOwn = $wgRequest->getBool( 'hideOwn', $prefs['hideown'] ); $hideBots = $wgRequest->getBool( 'hideBots', $prefs['hidebots'] ); - + $hideMinor = $wgRequest->getBool( 'hideMinor', $prefs['hideminor'] ); + # Get namespace value, if supplied, and prepare a WHERE fragment $nameSpace = $wgRequest->getIntOrNull( 'namespace' ); if( !is_null( $nameSpace ) ) { @@ -74,14 +76,14 @@ function wfSpecialWatchlist( $par ) { # Watchlist editing $action = $wgRequest->getVal( 'action' ); $remove = $wgRequest->getVal( 'remove' ); - $id = $wgRequest->getArray( 'id' ); + $id = $wgRequest->getArray( 'id' ); $uid = $wgUser->getID(); if( $wgEnotifWatchlist && $wgRequest->getVal( 'reset' ) && $wgRequest->wasPosted() ) { $wgUser->clearAllNotifications( $uid ); } - # Deleting items from watchlist + # Deleting items from watchlist if(($action == 'submit') && isset($remove) && is_array($id)) { $wgOut->addWikiText( wfMsg( 'removingchecked' ) ); $wgOut->addHTML( '

' ); @@ -102,23 +104,13 @@ function wfSpecialWatchlist( $par ) { $wgOut->addHTML( "

\n

" . wfMsg( 'wldone' ) . "

\n" ); } - if ( $wgUseWatchlistCache ) { - $memckey = wfMemcKey( 'watchlist', 'id', $wgUser->getId() ); - $cache_s = @$wgMemc->get( $memckey ); - if( $cache_s ){ - $wgOut->addWikiText( wfMsg('wlsaved') ); - $wgOut->addHTML( $cache_s ); - return; - } - } - - $dbr =& wfGetDB( DB_SLAVE ); - extract( $dbr->tableNames( 'page', 'revision', 'watchlist', 'recentchanges' ) ); + $dbr =& wfGetDB( DB_SLAVE, 'watchlist' ); + list( $page, $watchlist, $recentchanges ) = $dbr->tableNamesN( 'page', 'watchlist', 'recentchanges' ); $sql = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_user=$uid"; $res = $dbr->query( $sql, $fname ); $s = $dbr->fetchObject( $res ); - + # Patch *** A1 *** (see A2 below) # adjust for page X, talk:page X, which are both stored separately, but treated together $nitems = floor($s->n / 2); @@ -144,27 +136,24 @@ function wfSpecialWatchlist( $par ) { // Dump everything here $nondefaults = array(); - wfAppendToArrayIfNotDefault( 'days', $days, $defaults, $nondefaults); - wfAppendToArrayIfNotDefault( 'hideOwn', (int)$hideOwn, $defaults, $nondefaults); - wfAppendToArrayIfNotDefault( 'hideBots', (int)$hideBots, $defaults, $nondefaults); - wfAppendToArrayIfNotDefault( 'namespace', $nameSpace, $defaults, $nondefaults ); + wfAppendToArrayIfNotDefault('days' , $days , $defaults, $nondefaults); + wfAppendToArrayIfNotDefault('hideOwn' , (int)$hideOwn , $defaults, $nondefaults); + wfAppendToArrayIfNotDefault('hideBots' , (int)$hideBots, $defaults, $nondefaults); + wfAppendToArrayIfNotDefault( 'hideMinor', (int)$hideMinor, $defaults, $nondefaults ); + wfAppendToArrayIfNotDefault('namespace', $nameSpace , $defaults, $nondefaults); if ( $days <= 0 ) { - $docutoff = ''; - $cutoff = false; + $andcutoff = ''; $npages = wfMsg( 'watchlistall1' ); } else { - $docutoff = "AND rev_timestamp > '" . - ( $cutoff = $dbr->timestamp( time() - intval( $days * 86400 ) ) ) - . "'"; - /* - $sql = "SELECT COUNT(*) AS n FROM $page, $revision WHERE rev_timestamp>'$cutoff' AND page_id=rev_page"; - $res = $dbr->query( $sql, $fname ); - $s = $dbr->fetchObject( $res ); - $npages = $s->n; - */ - $npages = 40000 * $days; - + $andcutoff = "AND rc_timestamp > '".$dbr->timestamp( time() - intval( $days * 86400 ) )."'"; + /* + $sql = "SELECT COUNT(*) AS n FROM $page, $revision WHERE rev_timestamp>'$cutoff' AND page_id=rev_page"; + $res = $dbr->query( $sql, $fname ); + $s = $dbr->fetchObject( $res ); + $npages = $s->n; + */ + $npages = 40000 * $days; } /* Edit watchlist form */ @@ -182,15 +171,16 @@ function wfSpecialWatchlist( $par ) { $sql = "SELECT wl_namespace, wl_title, page_is_redirect FROM $watchlist LEFT JOIN $page ON wl_namespace = page_namespace AND wl_title = page_title WHERE wl_user=$uid"; $res = $dbr->query( $sql, $fname ); - + # Batch existence check $linkBatch = new LinkBatch(); while( $row = $dbr->fetchObject( $res ) ) $linkBatch->addObj( Title::makeTitleSafe( $row->wl_namespace, $row->wl_title ) ); $linkBatch->execute(); + if( $dbr->numRows( $res ) > 0 ) $dbr->dataSeek( $res, 0 ); # Let's do the time warp again! - + $sk = $wgUser->getSkin(); $list = array(); @@ -215,7 +205,6 @@ function wfSpecialWatchlist( $par ) { } else { global $wgContLang; $toolLinks = array(); - $titleText = $titleObj->getPrefixedText(); $pageLink = $sk->makeLinkObj( $titleObj ); $toolLinks[] = $sk->makeLinkObj( $titleObj->getTalkPage(), $wgLang->getNsText( NS_TALK ) ); if( $titleObj->exists() ) @@ -228,7 +217,7 @@ function wfSpecialWatchlist( $par ) { } else { $spanopen = $spanclosed = ''; } - + $wgOut->addHTML( "
  • {$checkbox}{$spanopen}{$pageLink}{$spanclosed} {$toolLinks}
  • \n" ); } } @@ -253,6 +242,7 @@ function wfSpecialWatchlist( $par ) { # Toggles $andHideOwn = $hideOwn ? "AND (rc_user <> $uid)" : ''; $andHideBots = $hideBots ? "AND (rc_bot = 0)" : ''; + $andHideMinor = $hideMinor ? 'AND rc_minor = 0' : ''; # Show watchlist header $header = ''; @@ -265,7 +255,7 @@ function wfSpecialWatchlist( $par ) { # Toggle watchlist content (all recent edits or just the latest) if( $wgUser->getOption( 'extendwatchlist' )) { - $andLatest=''; + $andLatest=''; $limitWatchlist = 'LIMIT ' . intval( $wgUser->getOption( 'wllimit' ) ); } else { $andLatest= 'AND rc_this_oldid=page_latest'; @@ -287,23 +277,17 @@ function wfSpecialWatchlist( $par ) { "\n\n" ); } - $sql = "SELECT - rc_namespace AS page_namespace, rc_title AS page_title, - rc_comment AS rev_comment, rc_cur_id AS page_id, - 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_id, rc_patrolled, - rc_new AS page_is_new,wl_notificationtimestamp + $sql = "SELECT * FROM $watchlist,$recentchanges,$page WHERE wl_user=$uid AND wl_namespace=rc_namespace AND wl_title=rc_title - AND rc_timestamp > '$cutoff' AND rc_cur_id=page_id + $andcutoff $andLatest $andHideOwn $andHideBots + $andHideMinor $nameSpaceClause ORDER BY rc_timestamp DESC $limitWatchlist"; @@ -325,40 +309,45 @@ function wfSpecialWatchlist( $par ) { $wgOut->addHTML( "\n" . wlCutoffLinks( $days, 'Watchlist', $nondefaults ) . "
    \n" ); # Spit out some control panel links - $thisTitle = Title::makeTitle( NS_SPECIAL, 'Watchlist' ); + $thisTitle = SpecialPage::getTitleFor( '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' ); + # Hide/show bot edits + $label = $hideBots ? wfMsgHtml( 'watchlist-show-bots' ) : wfMsgHtml( 'watchlist-hide-bots' ); + $linkBits = wfArrayToCGI( array( 'hideBots' => 1 - (int)$hideBots ), $nondefaults ); + $links[] = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits ); + + # Hide/show own edits + $label = $hideOwn ? wfMsgHtml( 'watchlist-show-own' ) : wfMsgHtml( 'watchlist-hide-own' ); $linkBits = wfArrayToCGI( array( 'hideOwn' => 1 - (int)$hideOwn ), $nondefaults ); - $link = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits ); - $links[] = wfMsgHtml( 'wlhideshowown', $link ); + $links[] = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits ); + + # Hide/show minor edits + $label = $hideMinor ? wfMsgHtml( 'watchlist-show-minor' ) : wfMsgHtml( 'watchlist-hide-minor' ); + $linkBits = wfArrayToCGI( array( 'hideMinor' => 1 - (int)$hideMinor ), $nondefaults ); + $links[] = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits ); $wgOut->addHTML( implode( ' | ', $links ) ); # Form for namespace filtering - $wgOut->addHTML( "\n" . - wfOpenElement( 'form', array( - 'method' => 'post', - 'action' => $thisTitle->getLocalURL(), - ) ) . - wfMsgExt( 'namespace', array( 'parseinline') ) . - HTMLnamespaceselector( $nameSpace, '' ) . "\n" . - ( $hideOwn ? wfHidden('hideown', 1)."\n" : '' ) . - ( $hideBots ? wfHidden('hidebots', 1)."\n" : '' ) . - wfHidden( 'days', $days ) . "\n" . - wfSubmitButton( wfMsgExt( 'allpagessubmit', array( 'escape') ) ) . "\n" . - wfCloseElement( 'form' ) . "\n" - ); - - if ( $numRows == 0 ) { - $wgOut->addWikitext( "
    " . wfMsg( 'watchnochange' ), false ); + $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $thisTitle->getLocalUrl() ) ); + $form .= '

    '; + $form .= Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' '; + $form .= Xml::namespaceSelector( $nameSpace, '' ) . ' '; + $form .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . '

    '; + $form .= Xml::hidden( 'days', $days ); + if( $hideOwn ) + $form .= Xml::hidden( 'hideOwn', 1 ); + if( $hideBots ) + $form .= Xml::hidden( 'hideBots', 1 ); + if( $hideMinor ) + $form .= Xml::hidden( 'hideMinor', 1 ); + $form .= Xml::closeElement( 'form' ); + $wgOut->addHtml( $form ); + + # If there's nothing to show, stop here + if( $numRows == 0 ) { + $wgOut->addWikiText( wfMsgNoTrans( 'watchnochange' ) ); return; } @@ -369,8 +358,8 @@ function wfSpecialWatchlist( $par ) { $s = $list->beginRecentChangesList(); $counter = 1; while ( $obj = $dbr->fetchObject( $res ) ) { - # Make fake RC entry - $rc = RecentChange::newFromCurRow( $obj, $obj->rc_last_oldid ); + # Make RC entry + $rc = RecentChange::newFromRow( $obj ); $rc->counter = $counter++; if ( $wgShowUpdatedMarker ) { @@ -381,8 +370,8 @@ function wfSpecialWatchlist( $par ) { } if ($wgRCShowWatchingUsers && $wgUser->getOption( 'shownumberswatching' )) { - $sql3 = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_title='" .wfStrencode($obj->page_title). "' AND wl_namespace='{$obj->page_namespace}'" ; - $res3 = $dbr->query( $sql3, DB_READ, $fname ); + $sql3 = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_title='" .$dbr->strencode($obj->page_title). "' AND wl_namespace='{$obj->page_namespace}'" ; + $res3 = $dbr->query( $sql3, $fname ); $x = $dbr->fetchObject( $res3 ); $rc->numberofWatchingusers = $x->n; } else { @@ -396,10 +385,6 @@ function wfSpecialWatchlist( $par ) { $dbr->freeResult( $res ); $wgOut->addHTML( $s ); - if ( $wgUseWatchlistCache ) { - $wgMemc->set( $memckey, $s, $wgWLCacheTimeout); - } - } function wlHoursLink( $h, $page, $options = array() ) { @@ -428,7 +413,6 @@ function wlDaysLink( $d, $page, $options = array() ) { function wlCutoffLinks( $days, $page = 'Watchlist', $options = array() ) { $hours = array( 1, 2, 6, 12 ); $days = array( 1, 3, 7 ); - $cl = ''; $i = 0; foreach( $hours as $h ) { $hours[$i++] = wlHoursLink( $h, $page, $options ); @@ -451,19 +435,19 @@ function wlCutoffLinks( $days, $page = 'Watchlist', $options = array() ) { * @return integer */ function wlCountItems( &$user, $talk = true ) { - $dbr =& wfGetDB( DB_SLAVE ); - + $dbr =& wfGetDB( DB_SLAVE, 'watchlist' ); + # Fetch the raw count $res = $dbr->select( 'watchlist', 'COUNT(*) AS count', array( 'wl_user' => $user->mId ), 'wlCountItems' ); $row = $dbr->fetchObject( $res ); $count = $row->count; $dbr->freeResult( $res ); - + # Halve to remove talk pages if needed if( !$talk ) $count = floor( $count / 2 ); - - return( $count ); + + return( $count ); } /** @@ -493,7 +477,7 @@ function wlHandleClear( &$out, &$request, $par ) { $out->returnToMain(); } else { # Confirming, so show a form - $wlTitle = Title::makeTitle( NS_SPECIAL, 'Watchlist' ); + $wlTitle = SpecialPage::getTitleFor( 'Watchlist' ); $out->addHTML( wfElement( 'form', array( 'method' => 'post', 'action' => $wlTitle->getLocalUrl( 'action=clear' ) ), NULL ) ); $out->addWikiText( wfMsgExt( 'watchlistcount', array( 'parsemag', 'escape'), $wgLang->formatNum( $count ) ) ); $out->addWikiText( wfMsg( 'watchlistcleartext' ) ); -- cgit v1.2.3-54-g00ecf