Followup r78924: keep track of exception/warning comments separately, to prevent...
[lhc/web/wiklou.git] / includes / WatchlistEditor.php
index 72b12c2..b5a994d 100644 (file)
@@ -100,15 +100,17 @@ class WatchlistEditor {
                $titles = array();
                if( !is_array( $list ) ) {
                        $list = explode( "\n", trim( $list ) );
-                       if( !is_array( $list ) )
+                       if( !is_array( $list ) ) {
                                return array();
+                       }
                }
                foreach( $list as $text ) {
                        $text = trim( $text );
                        if( strlen( $text ) > 0 ) {
                                $title = Title::newFromText( $text );
-                               if( $title instanceof Title && $title->isWatchable() )
+                               if( $title instanceof Title && $title->isWatchable() ) {
                                        $titles[] = $title->getPrefixedText();
+                               }
                        }
                }
                return array_unique( $titles );
@@ -129,8 +131,9 @@ class WatchlistEditor {
                // Do a batch existence check
                $batch = new LinkBatch();
                foreach( $titles as $title ) {
-                       if( !$title instanceof Title )
+                       if( !$title instanceof Title ) {
                                $title = Title::newFromText( $title );
+                       }
                        if( $title instanceof Title ) {
                                $batch->addObj( $title );
                                $batch->addObj( $title->getTalkPage() );
@@ -140,8 +143,9 @@ class WatchlistEditor {
                // Print out the list
                $output->addHTML( "<ul>\n" );
                foreach( $titles as $title ) {
-                       if( !$title instanceof Title )
+                       if( !$title instanceof Title ) {
                                $title = Title::newFromText( $title );
+                       }
                        if( $title instanceof Title ) {
                                $output->addHTML( "<li>" . $skin->link( $title )
                                . ' (' . $skin->link( $title->getTalkPage(), $talk ) . ")</li>\n" );
@@ -182,7 +186,7 @@ class WatchlistEditor {
                        __METHOD__
                );
                if( $res->numRows() > 0 ) {
-                       while( $row = $res->fetchObject() ) {
+                       foreach ( $res as $row ) {
                                $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title );
                                if( $title instanceof Title && !$title->isTalkPage() )
                                        $list[] = $title->getPrefixedText();
@@ -203,26 +207,32 @@ class WatchlistEditor {
        private function getWatchlistInfo( $user ) {
                $titles = array();
                $dbr = wfGetDB( DB_MASTER );
-               $uid = intval( $user->getId() );
-               list( $watchlist, $page ) = $dbr->tableNamesN( 'watchlist', 'page' );
-               $sql = "SELECT wl_namespace, wl_title, page_id, page_len, 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, __METHOD__ );
+
+               $res = $dbr->select(
+                                       array( 'watchlist', 'page' ),
+                                       array( 'wl_namespace', 'wl_title', 'page_id', 'page_len', 'page_is_redirect', 'page_latest' ),
+                                       array( 'wl_user' => $user->getId() ),
+                                       __METHOD__,
+                                       array( 'ORDER BY' => 'wl_namespace, wl_title' ),
+                                       array( 'page' =>
+                                               array( 'LEFT JOIN', 'wl_namespace = page_namespace AND wl_title = page_title' ) )
+                               );
+
                if( $res && $dbr->numRows( $res ) > 0 ) {
                        $cache = LinkCache::singleton();
-                       while( $row = $dbr->fetchObject( $res ) ) {
+                       foreach ( $res as $row ) {                      
                                $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title );
                                if( $title instanceof Title ) {
                                        // Update the link cache while we're at it
                                        if( $row->page_id ) {
-                                               $cache->addGoodLinkObj( $row->page_id, $title, $row->page_len, $row->page_is_redirect );
+                                               $cache->addGoodLinkObj( $row->page_id, $title, $row->page_len, $row->page_is_redirect, $row->page_latest );
                                        } else {
                                                $cache->addBadLinkObj( $title );
                                        }
                                        // Ignore non-talk
-                                       if( !$title->isTalkPage() )
+                                       if( !$title->isTalkPage() ) {
                                                $titles[$row->wl_namespace][$row->wl_title] = $row->page_is_redirect;
+                                       }
                                }
                        }
                }
@@ -270,8 +280,9 @@ class WatchlistEditor {
                $dbw = wfGetDB( DB_MASTER );
                $rows = array();
                foreach( $titles as $title ) {
-                       if( !$title instanceof Title )
+                       if( !$title instanceof Title ) {
                                $title = Title::newFromText( $title );
+                       }
                        if( $title instanceof Title ) {
                                $rows[] = array(
                                        'wl_user' => $user->getId(),
@@ -302,8 +313,9 @@ class WatchlistEditor {
        private function unwatchTitles( $titles, $user ) {
                $dbw = wfGetDB( DB_MASTER );
                foreach( $titles as $title ) {
-                       if( !$title instanceof Title )
+                       if( !$title instanceof Title ) {
                                $title = Title::newFromText( $title );
+                       }
                        if( $title instanceof Title ) {
                                $dbw->delete(
                                        'watchlist',
@@ -337,11 +349,12 @@ class WatchlistEditor {
         */
        private function showNormalForm( $output, $user ) {
                global $wgUser;
-               if( ( $count = $this->showItemCount( $output, $user ) ) > 0 ) {
+               $count = $this->showItemCount( $output, $user );
+               if( $count > 0 ) {
                        $self = SpecialPage::getTitleFor( 'Watchlist' );
                        $form  = Xml::openElement( 'form', array( 'method' => 'post',
                                'action' => $self->getLocalUrl( array( 'action' => 'edit' ) ) ) );
-                       $form .= Xml::hidden( 'token', $wgUser->editToken( 'watchlistedit' ) );
+                       $form .= Html::hidden( 'token', $wgUser->editToken( 'watchlistedit' ) );
                        $form .= "<fieldset>\n<legend>" . wfMsgHtml( 'watchlistedit-normal-legend' ) . "</legend>";
                        $form .= wfMsgExt( 'watchlistedit-normal-explain', 'parse' );
                        $form .= $this->buildRemoveList( $user, $wgUser->getSkin() );
@@ -410,8 +423,9 @@ class WatchlistEditor {
                global $wgLang;
 
                $link = $skin->link( $title );
-               if( $redirect )
+               if( $redirect ) {
                        $link = '<span class="watchlistredir">' . $link . '</span>';
+               }
                $tools[] = $skin->link( $title->getTalkPage(), wfMsgHtml( 'talkpagelinktext' ) );
                if( $title->exists() ) {
                        $tools[] = $skin->link(
@@ -449,9 +463,9 @@ class WatchlistEditor {
                global $wgUser;
                $this->showItemCount( $output, $user );
                $self = SpecialPage::getTitleFor( 'Watchlist' );
-               $form  = Xml::openElement( 'form', array( 'method' => 'post',
+               $form = Xml::openElement( 'form', array( 'method' => 'post',
                        'action' => $self->getLocalUrl( array( 'action' => 'raw' ) ) ) );
-               $form .= Xml::hidden( 'token', $wgUser->editToken( 'watchlistedit' ) );
+               $form .= Html::hidden( 'token', $wgUser->editToken( 'watchlistedit' ) );
                $form .= '<fieldset><legend>' . wfMsgHtml( 'watchlistedit-raw-legend' ) . '</legend>';
                $form .= wfMsgExt( 'watchlistedit-raw-explain', 'parse' );
                $form .= Xml::label( wfMsg( 'watchlistedit-raw-titles' ), 'titles' );
@@ -459,8 +473,9 @@ class WatchlistEditor {
                $form .= Xml::openElement( 'textarea', array( 'id' => 'titles', 'name' => 'titles',
                        'rows' => $wgUser->getIntOption( 'rows' ), 'cols' => $wgUser->getIntOption( 'cols' ) ) );
                $titles = $this->getWatchlist( $user );
-               foreach( $titles as $title )
+               foreach( $titles as $title ) {
                        $form .= htmlspecialchars( $title ) . "\n";
+               }
                $form .= '</textarea>';
                $form .= '<p>' . Xml::submitButton( wfMsg( 'watchlistedit-raw-submit' ) ) . '</p>';
                $form .= '</fieldset></form>';
@@ -503,14 +518,13 @@ class WatchlistEditor {
                $modes = array( 'view' => false, 'edit' => 'edit', 'raw' => 'raw' );
                foreach( $modes as $mode => $subpage ) {
                        // can use messages 'watchlisttools-view', 'watchlisttools-edit', 'watchlisttools-raw'
-                       $tools[] = $skin->link(
+                       $tools[] = $skin->linkKnown(
                                SpecialPage::getTitleFor( 'Watchlist', $subpage ),
-                               wfMsgHtml( "watchlisttools-{$mode}" ),
-                               array(),
-                               array(),
-                               array( 'known', 'noclasses' )
+                               wfMsgHtml( "watchlisttools-{$mode}" )
                        );
                }
-               return $wgLang->pipeList( $tools );
+               return Html::rawElement( 'span',
+                                       array( 'class' => 'mw-watchlist-toollinks' ),
+                                       wfMsg( 'parentheses', $wgLang->pipeList( $tools ) ) );
        }
 }