actualStore = $actualStore; } public function countWatchedItems( UserIdentity $user ) { return $this->actualStore->countWatchedItems( $user ); } public function countWatchers( LinkTarget $target ) { return $this->actualStore->countWatchers( $target ); } public function countVisitingWatchers( LinkTarget $target, $threshold ) { return $this->actualStore->countVisitingWatchers( $target, $threshold ); } public function countWatchersMultiple( array $targets, array $options = [] ) { return $this->actualStore->countVisitingWatchersMultiple( $targets, $options ); } public function countVisitingWatchersMultiple( array $targetsWithVisitThresholds, $minimumWatchers = null ) { return $this->actualStore->countVisitingWatchersMultiple( $targetsWithVisitThresholds, $minimumWatchers ); } public function getWatchedItem( UserIdentity $user, LinkTarget $target ) { return $this->actualStore->getWatchedItem( $user, $target ); } public function loadWatchedItem( UserIdentity $user, LinkTarget $target ) { return $this->actualStore->loadWatchedItem( $user, $target ); } public function getWatchedItemsForUser( UserIdentity $user, array $options = [] ) { return $this->actualStore->getWatchedItemsForUser( $user, $options ); } public function isWatched( UserIdentity $user, LinkTarget $target ) { return $this->actualStore->isWatched( $user, $target ); } public function getNotificationTimestampsBatch( UserIdentity $user, array $targets ) { return $this->actualStore->getNotificationTimestampsBatch( $user, $targets ); } public function countUnreadNotifications( UserIdentity $user, $unreadLimit = null ) { return $this->actualStore->countUnreadNotifications( $user, $unreadLimit ); } public function duplicateAllAssociatedEntries( LinkTarget $oldTarget, LinkTarget $newTarget ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function duplicateEntry( LinkTarget $oldTarget, LinkTarget $newTarget ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function addWatch( UserIdentity $user, LinkTarget $target ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function addWatchBatchForUser( UserIdentity $user, array $targets ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function removeWatch( UserIdentity $user, LinkTarget $target ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function setNotificationTimestampsForUser( UserIdentity $user, $timestamp, array $targets = [] ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function updateNotificationTimestamp( UserIdentity $editor, LinkTarget $target, $timestamp ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function resetAllNotificationTimestampsForUser( UserIdentity $user ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function resetNotificationTimestamp( UserIdentity $user, LinkTarget $title, $force = '', $oldid = 0 ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function clearUserWatchedItems( UserIdentity $user ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function clearUserWatchedItemsUsingJobQueue( UserIdentity $user ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function removeWatchBatchForUser( UserIdentity $user, array $titles ) { throw new DBReadOnlyError( null, self::DB_READONLY_ERROR ); } public function getLatestNotificationTimestamp( $timestamp, UserIdentity $user, LinkTarget $target ) { return wfTimestampOrNull( TS_MW, $timestamp ); } }