X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialEditWatchlist.php;h=3656b9cc73a955dc833d829e04592357b5356d85;hb=4fcdcc14aa1b4cf75355e3c94424ef4dc9dc418b;hp=355726ad580db30a2b55405c4ed70a3be365fe5f;hpb=b2645d82849ca74b0e6b8df6a3e28e81d0561a58;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialEditWatchlist.php b/includes/specials/SpecialEditWatchlist.php index 355726ad58..3656b9cc73 100644 --- a/includes/specials/SpecialEditWatchlist.php +++ b/includes/specials/SpecialEditWatchlist.php @@ -70,9 +70,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { $this->checkReadOnly(); $this->outputHeader(); - - $out->addSubtitle( $this->msg( 'watchlistfor2', $this->getUser()->getName() ) - ->rawParams( SpecialEditWatchlist::buildTools( null ) ) ); + $this->outputSubtitle(); # B/C: $mode used to be waaay down the parameter list, and the first parameter # was $wgUser @@ -104,24 +102,42 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { case self::EDIT_NORMAL: default: - $out->setPageTitle( $this->msg( 'watchlistedit-normal-title' ) ); - $form = $this->getNormalForm(); - if ( $form->show() ) { - $out->addHTML( $this->successMessage ); - $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) ); - } elseif ( $this->toc !== false ) { - $out->prependHTML( $this->toc ); - $out->addModules( 'mediawiki.toc' ); - } + $this->executeViewEditWatchlist(); break; } } + /** + * Renders a subheader on the watchlist page. + */ + protected function outputSubtitle() { + $out = $this->getOutput(); + $out->addSubtitle( $this->msg( 'watchlistfor2', $this->getUser()->getName() ) + ->rawParams( SpecialEditWatchlist::buildTools( null ) ) ); + } + + /** + * Executes an edit mode for the watchlist view, from which you can manage your watchlist + * + */ + protected function executeViewEditWatchlist() { + $out = $this->getOutput(); + $out->setPageTitle( $this->msg( 'watchlistedit-normal-title' ) ); + $form = $this->getNormalForm(); + if ( $form->show() ) { + $out->addHTML( $this->successMessage ); + $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) ); + } elseif ( $this->toc !== false ) { + $out->prependHTML( $this->toc ); + $out->addModules( 'mediawiki.toc' ); + } + } + /** * Return an array of subpages beginning with $search that this special page will accept. * * @param string $search Prefix to search for - * @param integer $limit Maximum number of results to return + * @param int $limit Maximum number of results to return * @return string[] Matching subpages */ public function prefixSearchSubpages( $search, $limit = 10 ) { @@ -331,7 +347,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { * * @return array */ - private function getWatchlistInfo() { + protected function getWatchlistInfo() { $titles = array(); $dbr = wfGetDB( DB_MASTER ); @@ -537,24 +553,35 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { $fields = array(); $count = 0; - foreach ( $this->getWatchlistInfo() as $namespace => $pages ) { - if ( $namespace >= 0 ) { - $fields['TitlesNs' . $namespace] = array( - 'class' => 'EditWatchlistCheckboxSeriesField', - 'options' => array(), - 'section' => "ns$namespace", - ); - } + // Allow subscribers to manipulate the list of watched pages (or use it + // to preload lots of details at once) + $watchlistInfo = $this->getWatchlistInfo(); + wfRunHooks( + 'WatchlistEditorBeforeFormRender', + array( &$watchlistInfo ) + ); + + foreach ( $watchlistInfo as $namespace => $pages ) { + $options = array(); foreach ( array_keys( $pages ) as $dbkey ) { $title = Title::makeTitleSafe( $namespace, $dbkey ); if ( $this->checkTitle( $title, $namespace, $dbkey ) ) { $text = $this->buildRemoveLine( $title ); - $fields['TitlesNs' . $namespace]['options'][$text] = $title->getPrefixedText(); + $options[$text] = $title->getPrefixedText(); $count++; } } + + // checkTitle can filter some options out, avoid empty sections + if ( count( $options ) > 0 ) { + $fields['TitlesNs' . $namespace] = array( + 'class' => 'EditWatchlistCheckboxSeriesField', + 'options' => $options, + 'section' => "ns$namespace", + ); + } } $this->cleanupWatchlist(); @@ -601,15 +628,10 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { private function buildRemoveLine( $title ) { $link = Linker::link( $title ); - if ( $title->isRedirect() ) { - // Linker already makes class mw-redirect, so this is redundant - $link = '' . $link . ''; - } - - $tools[] = Linker::link( $title->getTalkPage(), $this->msg( 'talkpagelinktext' )->escaped() ); + $tools['talk'] = Linker::link( $title->getTalkPage(), $this->msg( 'talkpagelinktext' )->escaped() ); if ( $title->exists() ) { - $tools[] = Linker::linkKnown( + $tools['history'] = Linker::linkKnown( $title, $this->msg( 'history_short' )->escaped(), array(), @@ -618,7 +640,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { } if ( $title->getNamespace() == NS_USER && !$title->isSubpage() ) { - $tools[] = Linker::linkKnown( + $tools['contributions'] = Linker::linkKnown( SpecialPage::getTitleFor( 'Contributions', $title->getText() ), $this->msg( 'contributions' )->escaped() ); @@ -626,9 +648,14 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { wfRunHooks( 'WatchlistEditorBuildRemoveLine', - array( &$tools, $title, $title->isRedirect(), $this->getSkin() ) + array( &$tools, $title, $title->isRedirect(), $this->getSkin(), &$link ) ); + if ( $title->isRedirect() ) { + // Linker already makes class mw-redirect, so this is redundant + $link = '' . $link . ''; + } + return $link . " (" . $this->getLanguage()->pipeList( $tools ) . ")"; } @@ -763,8 +790,8 @@ class EditWatchlistCheckboxSeriesField extends HTMLMultiSelectField { * form is open (bug 32126), but we know that invalid items will * be harmless so we can override it here. * - * @param string $value the value the field was submitted with - * @param array $alldata the data collected from the form + * @param string $value The value the field was submitted with + * @param array $alldata The data collected from the form * @return bool|string Bool true on success, or String error to display. */ function validate( $value, $alldata ) {