X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialEditWatchlist.php;h=f702bc0bcc3022cf1f7b589a18d658e2106e6472;hb=0d57b370dfe726af5f3ecf210f9f352ad9e26f0f;hp=e3c5d8c4a6a19c02316cc96cca2f8896c5e0d6b3;hpb=43d159d469e9cbe4050266c1f05a84559bd24dc1;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialEditWatchlist.php b/includes/specials/SpecialEditWatchlist.php index e3c5d8c4a6..f702bc0bcc 100644 --- a/includes/specials/SpecialEditWatchlist.php +++ b/includes/specials/SpecialEditWatchlist.php @@ -29,7 +29,6 @@ use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkTarget; use MediaWiki\MediaWikiServices; -use Wikimedia\Rdbms\DBReadOnlyError; /** * Provides the UI through which users can perform editing @@ -244,17 +243,12 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { $this->showTitles( $toUnwatch, $this->successMessage ); } } else { - $this->clearWatchlist(); - $this->getUser()->invalidateCache(); - if ( count( $current ) > 0 ) { - $this->successMessage = $this->msg( 'watchlistedit-raw-done' )->parse(); - } else { + if ( count( $current ) === 0 ) { return false; } - $this->successMessage .= ' ' . $this->msg( 'watchlistedit-raw-removed' ) - ->numParams( count( $current ) )->parse(); + $this->clearUserWatchedItems( $current, 'raw' ); $this->showTitles( $current, $this->successMessage ); } @@ -263,16 +257,28 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { public function submitClear( $data ) { $current = $this->getWatchlist(); - $this->clearWatchlist(); - $this->getUser()->invalidateCache(); - $this->successMessage = $this->msg( 'watchlistedit-clear-done' )->parse(); - $this->successMessage .= ' ' . $this->msg( 'watchlistedit-clear-removed' ) - ->numParams( count( $current ) )->parse(); + $this->clearUserWatchedItems( $current, 'clear' ); $this->showTitles( $current, $this->successMessage ); - return true; } + /** + * @param array $current + * @param string $messageFor 'raw' or 'clear' + */ + private function clearUserWatchedItems( $current, $messageFor ) { + $watchedItemStore = MediaWikiServices::getInstance()->getWatchedItemStore(); + if ( $watchedItemStore->clearUserWatchedItems( $this->getUser() ) ) { + $this->successMessage = $this->msg( 'watchlistedit-' . $messageFor . '-done' )->parse(); + $this->successMessage .= ' ' . $this->msg( 'watchlistedit-' . $messageFor . '-removed' ) + ->numParams( count( $current ) )->parse(); + $this->getUser()->invalidateCache(); + } else { + $watchedItemStore->clearUserWatchedItemsUsingJobQueue( $this->getUser() ); + $this->successMessage = $this->msg( 'watchlistedit-clear-jobqueue' )->parse(); + } + } + /** * Print out a list of linked titles * @@ -448,22 +454,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { } ); } - /** - * Remove all titles from a user's watchlist - */ - private function clearWatchlist() { - if ( $this->getConfig()->get( 'ReadOnlyWatchedItemStore' ) ) { - throw new DBReadOnlyError( null, 'The watchlist is currently readonly.' ); - } - - $dbw = wfGetDB( DB_MASTER ); - $dbw->delete( - 'watchlist', - [ 'wl_user' => $this->getUser()->getId() ], - __METHOD__ - ); - } - /** * Add a list of targets to a user's watchlist * @@ -667,7 +657,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage { * @return HTMLForm */ protected function getRawForm() { - $titles = implode( $this->getWatchlist(), "\n" ); + $titles = implode( "\n", $this->getWatchlist() ); $fields = [ 'Titles' => [ 'type' => 'textarea',