actualStore = $actualStore; } /** @inheritDoc */ public function countWatchedItems( UserIdentity $user ) { return $this->actualStore->countWatchedItems( $user ); } /** @inheritDoc */ public function countWatchers( $target ) { return $this->actualStore->countWatchers( $target ); } /** @inheritDoc */ public function countVisitingWatchers( $target, $threshold ) { return $this->actualStore->countVisitingWatchers( $target, $threshold ); } /** @inheritDoc */ public function countWatchersMultiple( array $targets, array $options = [] ) { return $this->actualStore->countWatchersMultiple( $targets, $options ); } /** @inheritDoc */ public function countVisitingWatchersMultiple( array $targetsWithVisitThresholds, $minimumWatchers = null ) { return $this->actualStore->countVisitingWatchersMultiple( $targetsWithVisitThresholds, $minimumWatchers ); } /** @inheritDoc */ public function getWatchedItem( UserIdentity $user, $target ) { return $this->actualStore->getWatchedItem( $user, $target ); } /** @inheritDoc */ public function loadWatchedItem( UserIdentity $user, $target ) { return $this->actualStore->loadWatchedItem( $user, $target ); } /** @inheritDoc */ public function loadWatchedItemsBatch( UserIdentity $user, array $targets ) { return $this->actualStore->loadWatchedItemsBatch( $user, $targets ); } /** @inheritDoc */ public function getWatchedItemsForUser( UserIdentity $user, array $options = [] ) { return $this->actualStore->getWatchedItemsForUser( $user, $options ); } /** @inheritDoc */ public function isWatched( UserIdentity $user, $target ) { return $this->actualStore->isWatched( $user, $target ); } /** @inheritDoc */ public function isTempWatched( UserIdentity $user, $target ): bool { return $this->actualStore->isTempWatched( $user, $target ); } /** @inheritDoc */ public function getNotificationTimestampsBatch( UserIdentity $user, array $targets ) { return $this->actualStore->getNotificationTimestampsBatch( $user, $targets ); } /** @inheritDoc */ public function countUnreadNotifications( UserIdentity $user, $unreadLimit = null ) { return $this->actualStore->countUnreadNotifications( $user, $unreadLimit ); } /** @inheritDoc */ public function duplicateAllAssociatedEntries( $oldTarget, $newTarget ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function duplicateEntry( $oldTarget, $newTarget ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function addWatch( UserIdentity $user, $target, ?string $expiry = null ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function addWatchBatchForUser( UserIdentity $user, array $targets, ?string $expiry = null ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function removeWatch( UserIdentity $user, $target ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function setNotificationTimestampsForUser( UserIdentity $user, $timestamp, array $targets = [] ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function updateNotificationTimestamp( UserIdentity $editor, $target, $timestamp ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function resetAllNotificationTimestampsForUser( UserIdentity $user, $timestamp = null ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function resetNotificationTimestamp( UserIdentity $user, $title, $force = '', $oldid = 0 ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function clearUserWatchedItems( UserIdentity $user ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function mustClearWatchedItemsUsingJobQueue( UserIdentity $user ): bool { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function clearUserWatchedItemsUsingJobQueue( UserIdentity $user ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function maybeEnqueueWatchlistExpiryJob(): void { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function removeWatchBatchForUser( UserIdentity $user, array $targets ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } /** @inheritDoc */ public function getLatestNotificationTimestamp( $timestamp, UserIdentity $user, $target ) { return wfTimestampOrNull( TS_MW, $timestamp ); } /** @inheritDoc */ public function countExpired(): int { return $this->actualStore->countExpired(); } /** @inheritDoc */ public function removeExpired( int $limit, bool $deleteOrphans = false ): void { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } } /** @deprecated class alias since 1.43 */ class_alias( NoWriteWatchedItemStore::class, 'NoWriteWatchedItemStore' );