<?php
+use Wikimedia\Rdbms\IDatabase;
use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\Assert\Assert;
use Wikimedia\ScopedCallback;
use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\DBUnexpectedError;
/**
* Storage layer class for WatchedItems.
* Database interaction.
*
- * @author Addshore
+ * Uses database because this uses User::isAnon
+ *
+ * @group Database
*
+ * @author Addshore
* @since 1.27
*/
class WatchedItemStore implements StatsdAwareInterface {
*/
private $loadBalancer;
+ /**
+ * @var ReadOnlyMode
+ */
+ private $readOnlyMode;
+
/**
* @var HashBagOStuff
*/
/**
* @param LoadBalancer $loadBalancer
* @param HashBagOStuff $cache
+ * @param ReadOnlyMode $readOnlyMode
*/
public function __construct(
LoadBalancer $loadBalancer,
- HashBagOStuff $cache
+ HashBagOStuff $cache,
+ ReadOnlyMode $readOnlyMode
) {
$this->loadBalancer = $loadBalancer;
$this->cache = $cache;
+ $this->readOnlyMode = $readOnlyMode;
$this->stats = new NullStatsdDataFactory();
$this->deferredUpdatesAddCallableUpdateCallback = [ 'DeferredUpdates', 'addCallableUpdate' ];
$this->revisionGetTimestampFromIdCallback = [ 'Revision', 'getTimestampFromId' ];
* @return bool success
*/
public function addWatchBatchForUser( User $user, array $targets ) {
- if ( $this->loadBalancer->getReadOnlyReason() !== false ) {
+ if ( $this->readOnlyMode->isReadOnly() ) {
return false;
}
// Only loggedin user can have a watchlist
*/
public function removeWatch( User $user, LinkTarget $target ) {
// Only logged in user can have a watchlist
- if ( $this->loadBalancer->getReadOnlyReason() !== false || $user->isAnon() ) {
+ if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
return false;
}
*/
public function resetNotificationTimestamp( User $user, Title $title, $force = '', $oldid = 0 ) {
// Only loggedin user can have a watchlist
- if ( $this->loadBalancer->getReadOnlyReason() !== false || $user->isAnon() ) {
+ if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
return false;
}