MediaWiki  master
WatchedItemStore Class Reference

Storage layer class for WatchedItems. More...

Inheritance diagram for WatchedItemStore:
Collaboration diagram for WatchedItemStore:

Public Member Functions

 __construct (ServiceOptions $options, ILBFactory $lbFactory, JobQueueGroup $queueGroup, BagOStuff $stash, HashBagOStuff $cache, ReadOnlyMode $readOnlyMode, NamespaceInfo $nsInfo, RevisionLookup $revisionLookup, HookContainer $hookContainer, LinkBatchFactory $linkBatchFactory, UserFactory $userFactory, TitleFactory $titleFactory)
 
 addWatch (UserIdentity $user, $target, ?string $expiry=null)
 
 addWatchBatchForUser (UserIdentity $user, array $targets, ?string $expiry=null)
 Add multiple items to the user's watchlist. More...
 
 clearUserWatchedItems (UserIdentity $user)
 Deletes ALL watched items for the given user when under $updateRowsPerQuery entries exist. More...
 
 clearUserWatchedItemsUsingJobQueue (UserIdentity $user)
 Queues a job that will clear the users watchlist using the Job Queue. More...
 
 countExpired ()
 Get the number of watchlist items that expire before the current time.
Since
1.35
Returns
int
More...
 
 countUnreadNotifications (UserIdentity $user, $unreadLimit=null)
 
 countVisitingWatchers ( $target, $threshold)
 
 countVisitingWatchersMultiple (array $targetsWithVisitThresholds, $minimumWatchers=null)
 
 countWatchedItems (UserIdentity $user)
 
 countWatchers ( $target)
 
 countWatchersMultiple (array $targets, array $options=[])
 
 duplicateAllAssociatedEntries ( $oldTarget, $newTarget)
 
 duplicateEntry ( $oldTarget, $newTarget)
 
 enqueueWatchlistExpiryJob (float $watchlistPurgeRate)
 Probabilistically add a job to purge the expired watchlist items.
Since
1.35
Deprecated:
since 1.36, use maybeEnqueueWatchlistExpiryJob
Parameters
float$watchlistPurgeRateThe value of the $wgWatchlistPurgeRate configuration variable.
More...
 
 getLatestNotificationTimestamp ( $timestamp, UserIdentity $user, $target)
 
 getMaxId ()
 
 getNotificationTimestampsBatch (UserIdentity $user, array $targets)
 
 getWatchedItem (UserIdentity $user, $target)
 
 getWatchedItemsForUser (UserIdentity $user, array $options=[])
 
 isTempWatched (UserIdentity $user, $target)
 Check if the user is temporarily watching the page. More...
 
 isWatched (UserIdentity $user, $target)
 
 loadWatchedItem (UserIdentity $user, $target)
 
 loadWatchedItemsBatch (UserIdentity $user, array $targets)
 
 maybeEnqueueWatchlistExpiryJob ()
 Probabilistically add a job to purge the expired watchlist items, if watchlist expiration is enabled, based on the value of $wgWatchlistPurgeRate.
Since
1.36
More...
 
 mustClearWatchedItemsUsingJobQueue (UserIdentity $user)
 Does the size of the users watchlist require clearUserWatchedItemsUsingJobQueue() to be used instead of clearUserWatchedItems() More...
 
 overrideDeferredUpdatesAddCallableUpdateCallback (callable $callback)
 Overrides the DeferredUpdates::addCallableUpdate callback This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined. More...
 
 removeExpired (int $limit, bool $deleteOrphans=false)
 Remove some number of expired watchlist items.
Since
1.35
Parameters
int$limitThe number of items to remove.
bool$deleteOrphansWhether to also delete watchlist_expiry rows that have no related watchlist rows (because not all code knows about the expiry table yet). This runs two extra queries, so is only done from the purgeExpiredWatchlistItems.php maintenance script.
More...
 
 removeWatch (UserIdentity $user, $target)
 
 removeWatchBatchForUser (UserIdentity $user, array $titles)
 
 resetAllNotificationTimestampsForUser (UserIdentity $user, $timestamp=null)
 Schedule a DeferredUpdate that sets all of the "last viewed" timestamps for a given user to the same value. More...
 
 resetNotificationTimestamp (UserIdentity $user, $title, $force='', $oldid=0)
 
 setNotificationTimestampsForUser (UserIdentity $user, $timestamp, array $targets=[])
 Set the "last viewed" timestamps for certain titles on a user's watchlist. More...
 
 setStatsdDataFactory (StatsdDataFactoryInterface $stats)
 
 updateNotificationTimestamp (UserIdentity $editor, $target, $timestamp)
 

Public Attributes

const CONSTRUCTOR_OPTIONS
 
- Public Attributes inherited from WatchedItemStoreInterface
const SORT_ASC = 'ASC'
 
const SORT_DESC = 'DESC'
 

Private Member Functions

 cache (WatchedItem $item)
 
 fetchWatchedItems (IDatabase $db, UserIdentity $user, array $vars, array $options=[], $target=null)
 Fetches either a single or all watched items for the given user, or a specific set of items. More...
 
 fetchWatchedItemsForPage (IDatabase $dbw, $target)
 
 getCached (UserIdentity $user, $target)
 
 getCacheKey (UserIdentity $user, $target)
 
 getConnectionRef ( $dbIndex)
 
 getNotificationTimestamp (UserIdentity $user, $title, $item, $force, $oldid)
 
 getPageSeenKey ( $target)
 
 getPageSeenTimestamps (UserIdentity $user)
 
 getPageSeenTimestampsKey (UserIdentity $user)
 
 getTitleDbKeysGroupedByNamespace (array $titles)
 
 getVisitingWatchersCondition (IDatabase $db, array $targetsWithVisitThresholds)
 Generates condition for the query used in a batch count visiting watchers. More...
 
 getWatchedItemFromRow (UserIdentity $user, $target, stdClass $row)
 Construct a new WatchedItem given a row from watchlist/watchlist_expiry. More...
 
 uncache (UserIdentity $user, $target)
 
 uncacheAllItemsForUser (UserIdentity $user)
 
 uncacheLinkTarget ( $target)
 
 uncacheTitlesForUser (UserIdentity $user, array $titles)
 
 uncacheUser (UserIdentity $user)
 
 updateExpiries (IDatabase $dbw, string $expiry, string $cond)
 Update the expiries for items found with the given $cond. More...
 
 updateExpiriesAfterMove (IDatabase $dbw, array $expiries, int $namespace, string $dbKey)
 
 updateOrDeleteExpiries (IDatabase $dbw, int $userId, array $rows, ?string $expiry=null)
 Insert/update expiries, or delete them if the expiry is 'infinity'. More...
 

Private Attributes

HashBagOStuff $cache
 
array[][] $cacheIndex = []
 Looks like $cacheIndex[Namespace ID][Target DB Key][User Id] => 'key' The index is needed so that on mass changes all relevant items can be un-cached. More...
 
callable null $deferredUpdatesAddCallableUpdateCallback
 
bool $expiryEnabled
 Correlates to $wgWatchlistExpiry feature flag. More...
 
HookRunner $hookRunner
 
HashBagOStuff $latestUpdateCache
 
ILBFactory $lbFactory
 
LinkBatchFactory $linkBatchFactory
 
LoadBalancer $loadBalancer
 
string null $maxExpiryDuration
 Maximum configured relative expiry. More...
 
NamespaceInfo $nsInfo
 
JobQueueGroup $queueGroup
 
ReadOnlyMode $readOnlyMode
 
RevisionLookup $revisionLookup
 
BagOStuff $stash
 
StatsdDataFactoryInterface $stats
 
TitleFactory $titleFactory
 
int $updateRowsPerQuery
 
UserFactory $userFactory
 
float $watchlistPurgeRate
 corresponds to $wgWatchlistPurgeRate value More...
 

Detailed Description

Storage layer class for WatchedItems.

Database interaction & caching TODO caching should be factored out into a CachingWatchedItemStore class

Author
Addshore
Since
1.27

Definition at line 29 of file WatchedItemStore.php.

Constructor & Destructor Documentation

◆ __construct()

WatchedItemStore::__construct ( ServiceOptions  $options,
ILBFactory  $lbFactory,
JobQueueGroup  $queueGroup,
BagOStuff  $stash,
HashBagOStuff  $cache,
ReadOnlyMode  $readOnlyMode,
NamespaceInfo  $nsInfo,
RevisionLookup  $revisionLookup,
HookContainer  $hookContainer,
LinkBatchFactory  $linkBatchFactory,
UserFactory  $userFactory,
TitleFactory  $titleFactory 
)
Parameters
ServiceOptions$options
ILBFactory$lbFactory
JobQueueGroup$queueGroup
BagOStuff$stash
HashBagOStuff$cache
ReadOnlyMode$readOnlyMode
NamespaceInfo$nsInfo
RevisionLookup$revisionLookup
HookContainer$hookContainer
LinkBatchFactory$linkBatchFactory
UserFactory$userFactory
TitleFactory$titleFactory

Definition at line 153 of file WatchedItemStore.php.

References $cache, $lbFactory, $linkBatchFactory, $nsInfo, $queueGroup, $readOnlyMode, $revisionLookup, $stash, $titleFactory, $userFactory, MediaWiki\Config\ServiceOptions\assertRequiredOptions(), cache(), MediaWiki\Config\ServiceOptions\get(), and Wikimedia\Rdbms\ILBFactory\getMainLB().

Member Function Documentation

◆ addWatch()

WatchedItemStore::addWatch ( UserIdentity  $user,
  $target,
?string  $expiry = null 
)
Since
1.27 Method added.
1.35 Accepts $expiry parameter.
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
string | null$expiryOptional expiry in any format acceptable to wfTimestamp(). null will not create an expiry, or leave it unchanged should one already exist.

Implements WatchedItemStoreInterface.

Definition at line 1049 of file WatchedItemStore.php.

◆ addWatchBatchForUser()

WatchedItemStore::addWatchBatchForUser ( UserIdentity  $user,
array  $targets,
?string  $expiry = null 
)

Add multiple items to the user's watchlist.

If you know you're adding a single page (and/or its talk page) use self::addWatch(), since it will add the WatchedItem to the process cache.

Since
1.27 Method added.
1.35 Accepts $expiry parameter.
Parameters
UserIdentity$user
LinkTarget[]$targets
string | null$expiryOptional expiry in a format acceptable to wfTimestamp(), null will not create expiries, or leave them unchanged should they already exist.
Returns
bool Whether database transactions were performed.

Implements WatchedItemStoreInterface.

Definition at line 1085 of file WatchedItemStore.php.

References DB_PRIMARY, MediaWiki\User\UserIdentity\getId(), and MediaWiki\User\UserIdentity\isRegistered().

◆ cache()

◆ clearUserWatchedItems()

WatchedItemStore::clearUserWatchedItems ( UserIdentity  $user)

Deletes ALL watched items for the given user when under $updateRowsPerQuery entries exist.

Since
1.30
Parameters
UserIdentity$user
Returns
bool true on success, false when too many items are watched

Implements WatchedItemStoreInterface.

Definition at line 314 of file WatchedItemStore.php.

References DB_PRIMARY, MediaWiki\User\UserIdentity\getId(), mustClearWatchedItemsUsingJobQueue(), and uncacheAllItemsForUser().

◆ clearUserWatchedItemsUsingJobQueue()

WatchedItemStore::clearUserWatchedItemsUsingJobQueue ( UserIdentity  $user)

Queues a job that will clear the users watchlist using the Job Queue.

Since
1.31
Parameters
UserIdentity$user

Implements WatchedItemStoreInterface.

Definition at line 391 of file WatchedItemStore.php.

References $job, getMaxId(), and ClearUserWatchlistJob\newForUser().

◆ countExpired()

WatchedItemStore::countExpired ( )

Get the number of watchlist items that expire before the current time.

Since
1.35
Returns
int

Implements WatchedItemStoreInterface.

Definition at line 1847 of file WatchedItemStore.php.

References $dbr, and DB_REPLICA.

◆ countUnreadNotifications()

WatchedItemStore::countUnreadNotifications ( UserIdentity  $user,
  $unreadLimit = null 
)
Since
1.27
Parameters
UserIdentity$user
int | null$unreadLimit
Returns
int|bool

Implements WatchedItemStoreInterface.

Definition at line 1645 of file WatchedItemStore.php.

References $dbr, DB_REPLICA, and MediaWiki\User\UserIdentity\getId().

◆ countVisitingWatchers()

WatchedItemStore::countVisitingWatchers (   $target,
  $threshold 
)
Since
1.27
Parameters
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
string | int$threshold
Returns
int

Implements WatchedItemStoreInterface.

Definition at line 507 of file WatchedItemStore.php.

References $dbr, DB_REPLICA, and getConnectionRef().

◆ countVisitingWatchersMultiple()

WatchedItemStore::countVisitingWatchersMultiple ( array  $targetsWithVisitThresholds,
  $minimumWatchers = null 
)
Since
1.27
Parameters
array$targetsWithVisitThresholdsarray of LinkTarget[]|PageIdentity[] (not type hinted since it annoys phan) - deprecated passing LinkTarget[] since 1.36
int | null$minimumWatchers
Returns
array

Implements WatchedItemStoreInterface.

Definition at line 661 of file WatchedItemStore.php.

References $dbr, $res, DB_REPLICA, getConnectionRef(), and getVisitingWatchersCondition().

◆ countWatchedItems()

WatchedItemStore::countWatchedItems ( UserIdentity  $user)
Since
1.31
Parameters
UserIdentity$user
Returns
int

Implements WatchedItemStoreInterface.

Definition at line 445 of file WatchedItemStore.php.

References $dbr, DB_REPLICA, getConnectionRef(), and MediaWiki\User\UserIdentity\getId().

Referenced by mustClearWatchedItemsUsingJobQueue().

◆ countWatchers()

WatchedItemStore::countWatchers (   $target)
Since
1.27
Parameters
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
int

Implements WatchedItemStoreInterface.

Definition at line 474 of file WatchedItemStore.php.

References $dbr, DB_REPLICA, and getConnectionRef().

◆ countWatchersMultiple()

WatchedItemStore::countWatchersMultiple ( array  $targets,
array  $options = [] 
)
Since
1.27
Parameters
LinkTarget[] | PageIdentity[]$targetsdeprecated passing LinkTarget[] since 1.36
array$options
Returns
array

Implements WatchedItemStoreInterface.

Definition at line 606 of file WatchedItemStore.php.

References $dbr, $res, DB_REPLICA, and getConnectionRef().

◆ duplicateAllAssociatedEntries()

WatchedItemStore::duplicateAllAssociatedEntries (   $oldTarget,
  $newTarget 
)
Since
1.27
Parameters
LinkTarget | PageIdentity$oldTargetdeprecated passing LinkTarget since 1.36
LinkTarget | PageIdentity$newTargetdeprecated passing LinkTarget since 1.36

Implements WatchedItemStoreInterface.

Definition at line 1677 of file WatchedItemStore.php.

◆ duplicateEntry()

WatchedItemStore::duplicateEntry (   $oldTarget,
  $newTarget 
)
Since
1.27
Parameters
LinkTarget | PageIdentity$oldTargetdeprecated passing LinkTarget since 1.36
LinkTarget | PageIdentity$newTargetdeprecated passing LinkTarget since 1.36

Implements WatchedItemStoreInterface.

Definition at line 1695 of file WatchedItemStore.php.

References DB_PRIMARY.

◆ enqueueWatchlistExpiryJob()

WatchedItemStore::enqueueWatchlistExpiryJob ( float  $watchlistPurgeRate)

Probabilistically add a job to purge the expired watchlist items.

Since
1.35
Deprecated:
since 1.36, use maybeEnqueueWatchlistExpiryJob
Parameters
float$watchlistPurgeRateThe value of the $wgWatchlistPurgeRate configuration variable.

Implements WatchedItemStoreInterface.

Definition at line 399 of file WatchedItemStore.php.

References $watchlistPurgeRate, and wfDeprecated().

◆ fetchWatchedItems()

WatchedItemStore::fetchWatchedItems ( IDatabase  $db,
UserIdentity  $user,
array  $vars,
array  $options = [],
  $target = null 
)
private

Fetches either a single or all watched items for the given user, or a specific set of items.

If a $target is given, IDatabase::selectRow() is called, otherwise select(). If $wgWatchlistExpiry is enabled, expired items are not returned.

Parameters
IDatabase$db
UserIdentity$user
array$varswe_expiry is added when $wgWatchlistExpiry is enabled.
array$options
LinkTarget | LinkTarget[] | PageIdentity | PageIdentity[] | null$targetnull if selecting all watched items - deprecated passing LinkTarget or LinkTarget[] since 1.36
Returns
IResultWrapper|stdClass|false

Definition at line 909 of file WatchedItemStore.php.

References Wikimedia\Rdbms\IDatabase\addQuotes(), MediaWiki\User\UserIdentity\getId(), LIST_AND, LIST_OR, Wikimedia\Rdbms\IDatabase\makeList(), and Wikimedia\Rdbms\IDatabase\timestamp().

Referenced by getWatchedItemsForUser(), and loadWatchedItemsBatch().

◆ fetchWatchedItemsForPage()

WatchedItemStore::fetchWatchedItemsForPage ( IDatabase  $dbw,
  $target 
)
private
Parameters
IDatabase$dbw
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
IResultWrapper

Definition at line 1741 of file WatchedItemStore.php.

References Wikimedia\Rdbms\IDatabase\select().

◆ getCached()

WatchedItemStore::getCached ( UserIdentity  $user,
  $target 
)
private
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
WatchedItem|false

Definition at line 291 of file WatchedItemStore.php.

References cache(), and getCacheKey().

Referenced by getWatchedItem().

◆ getCacheKey()

WatchedItemStore::getCacheKey ( UserIdentity  $user,
  $target 
)
private
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
string

Definition at line 228 of file WatchedItemStore.php.

References cache(), and MediaWiki\User\UserIdentity\getId().

Referenced by cache(), getCached(), and uncache().

◆ getConnectionRef()

WatchedItemStore::getConnectionRef (   $dbIndex)
private

◆ getLatestNotificationTimestamp()

WatchedItemStore::getLatestNotificationTimestamp (   $timestamp,
UserIdentity  $user,
  $target 
)
Parameters
string | null$timestamp
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
bool|string|null

Implements WatchedItemStoreInterface.

Definition at line 1305 of file WatchedItemStore.php.

References wfTimestampOrNull().

Referenced by getWatchedItemFromRow().

◆ getMaxId()

WatchedItemStore::getMaxId ( )
Since
1.31
Returns
int The maximum current wl_id

Definition at line 430 of file WatchedItemStore.php.

References $dbr, DB_REPLICA, and getConnectionRef().

Referenced by clearUserWatchedItemsUsingJobQueue().

◆ getNotificationTimestamp()

WatchedItemStore::getNotificationTimestamp ( UserIdentity  $user,
  $title,
  $item,
  $force,
  $oldid 
)
private
Parameters
UserIdentity$user
LinkTarget | PageIdentity$titledeprecated passing LinkTarget since 1.36
WatchedItem$item
bool$force
int | bool$oldidThe ID of the last revision that the user viewed
Returns
bool|string|null

Definition at line 1582 of file WatchedItemStore.php.

References $title.

◆ getNotificationTimestampsBatch()

WatchedItemStore::getNotificationTimestampsBatch ( UserIdentity  $user,
array  $targets 
)
Since
1.27
Parameters
UserIdentity$user
LinkTarget[]$targets
Returns
array

Implements WatchedItemStoreInterface.

Definition at line 992 of file WatchedItemStore.php.

References $dbr, $res, DB_REPLICA, MediaWiki\User\UserIdentity\getId(), and MediaWiki\User\UserIdentity\isRegistered().

◆ getPageSeenKey()

WatchedItemStore::getPageSeenKey (   $target)
private
Parameters
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
string

Definition at line 1570 of file WatchedItemStore.php.

◆ getPageSeenTimestamps()

WatchedItemStore::getPageSeenTimestamps ( UserIdentity  $user)
private
Parameters
UserIdentity$user
Returns
MapCacheLRU|null The map contains prefixed title keys and TS_MW values

Definition at line 1542 of file WatchedItemStore.php.

◆ getPageSeenTimestampsKey()

WatchedItemStore::getPageSeenTimestampsKey ( UserIdentity  $user)
private
Parameters
UserIdentity$user
Returns
string

Definition at line 1558 of file WatchedItemStore.php.

References MediaWiki\User\UserIdentity\getId().

Referenced by uncacheUser().

◆ getTitleDbKeysGroupedByNamespace()

WatchedItemStore::getTitleDbKeysGroupedByNamespace ( array  $titles)
private
Parameters
LinkTarget[] | PageIdentity[]$titlesdeprecated passing LinkTarget[] since 1.36
Returns
array

Definition at line 1825 of file WatchedItemStore.php.

References $title.

Referenced by removeWatchBatchForUser().

◆ getVisitingWatchersCondition()

WatchedItemStore::getVisitingWatchersCondition ( IDatabase  $db,
array  $targetsWithVisitThresholds 
)
private

Generates condition for the query used in a batch count visiting watchers.

Parameters
IDatabase$db
array$targetsWithVisitThresholdsarray of pairs (LinkTarget|PageIdentity, last visit threshold) - deprecated passing LinkTarget since 1.36
Returns
string

Definition at line 718 of file WatchedItemStore.php.

References Wikimedia\Rdbms\IDatabase\addQuotes(), LIST_AND, LIST_OR, Wikimedia\Rdbms\IDatabase\makeList(), and Wikimedia\Rdbms\IDatabase\timestamp().

Referenced by countVisitingWatchersMultiple().

◆ getWatchedItem()

WatchedItemStore::getWatchedItem ( UserIdentity  $user,
  $target 
)
Since
1.27
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
WatchedItem|false

Implements WatchedItemStoreInterface.

Definition at line 761 of file WatchedItemStore.php.

References getCached(), MediaWiki\User\UserIdentity\isRegistered(), and loadWatchedItem().

◆ getWatchedItemFromRow()

WatchedItemStore::getWatchedItemFromRow ( UserIdentity  $user,
  $target,
stdClass  $row 
)
private

Construct a new WatchedItem given a row from watchlist/watchlist_expiry.

Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
stdClass$row
Returns
WatchedItem

Definition at line 882 of file WatchedItemStore.php.

References getLatestNotificationTimestamp(), and wfTimestampOrNull().

Referenced by getWatchedItemsForUser(), and loadWatchedItemsBatch().

◆ getWatchedItemsForUser()

WatchedItemStore::getWatchedItemsForUser ( UserIdentity  $user,
array  $options = [] 
)
Since
1.27
Parameters
UserIdentity$user
array$options
Returns
WatchedItem[]

Implements WatchedItemStoreInterface.

Definition at line 830 of file WatchedItemStore.php.

References $res, DB_PRIMARY, DB_REPLICA, fetchWatchedItems(), getConnectionRef(), and getWatchedItemFromRow().

◆ isTempWatched()

WatchedItemStore::isTempWatched ( UserIdentity  $user,
  $target 
)

Check if the user is temporarily watching the page.

Since
1.35
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 981 of file WatchedItemStore.php.

◆ isWatched()

WatchedItemStore::isWatched ( UserIdentity  $user,
  $target 
)
Since
1.27
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 970 of file WatchedItemStore.php.

◆ loadWatchedItem()

WatchedItemStore::loadWatchedItem ( UserIdentity  $user,
  $target 
)
Since
1.27
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
WatchedItem|false

Implements WatchedItemStoreInterface.

Definition at line 781 of file WatchedItemStore.php.

References loadWatchedItemsBatch().

Referenced by getWatchedItem().

◆ loadWatchedItemsBatch()

WatchedItemStore::loadWatchedItemsBatch ( UserIdentity  $user,
array  $targets 
)
Since
1.36
Parameters
UserIdentity$user
LinkTarget[] | PageIdentity[]$targetsdeprecated passing LinkTarget[] since 1.36
Returns
WatchedItem[]|false

Implements WatchedItemStoreInterface.

Definition at line 792 of file WatchedItemStore.php.

References $dbr, cache(), DB_REPLICA, fetchWatchedItems(), getConnectionRef(), getWatchedItemFromRow(), and MediaWiki\User\UserIdentity\isRegistered().

Referenced by loadWatchedItem().

◆ maybeEnqueueWatchlistExpiryJob()

WatchedItemStore::maybeEnqueueWatchlistExpiryJob ( )

Probabilistically add a job to purge the expired watchlist items, if watchlist expiration is enabled, based on the value of $wgWatchlistPurgeRate.

Since
1.36

Implements WatchedItemStoreInterface.

Definition at line 411 of file WatchedItemStore.php.

◆ mustClearWatchedItemsUsingJobQueue()

WatchedItemStore::mustClearWatchedItemsUsingJobQueue ( UserIdentity  $user)

Does the size of the users watchlist require clearUserWatchedItemsUsingJobQueue() to be used instead of clearUserWatchedItems()

Since
1.35
Parameters
UserIdentity$user
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 356 of file WatchedItemStore.php.

References $updateRowsPerQuery, and countWatchedItems().

Referenced by clearUserWatchedItems().

◆ overrideDeferredUpdatesAddCallableUpdateCallback()

WatchedItemStore::overrideDeferredUpdatesAddCallableUpdateCallback ( callable  $callback)

Overrides the DeferredUpdates::addCallableUpdate callback This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.

Parameters
callable$callback
See also
DeferredUpdates::addCallableUpdate for callback signiture
Returns
ScopedCallback to reset the overridden value
Exceptions
MWException

Definition at line 210 of file WatchedItemStore.php.

References $deferredUpdatesAddCallableUpdateCallback.

◆ removeExpired()

WatchedItemStore::removeExpired ( int  $limit,
bool  $deleteOrphans = false 
)

Remove some number of expired watchlist items.

Since
1.35
Parameters
int$limitThe number of items to remove.
bool$deleteOrphansWhether to also delete watchlist_expiry rows that have no related watchlist rows (because not all code knows about the expiry table yet). This runs two extra queries, so is only done from the purgeExpiredWatchlistItems.php maintenance script.

Implements WatchedItemStoreInterface.

Definition at line 1860 of file WatchedItemStore.php.

References $dbr, DB_PRIMARY, DB_REPLICA, and LIST_OR.

◆ removeWatch()

WatchedItemStore::removeWatch ( UserIdentity  $user,
  $target 
)
Since
1.27
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 1227 of file WatchedItemStore.php.

◆ removeWatchBatchForUser()

WatchedItemStore::removeWatchBatchForUser ( UserIdentity  $user,
array  $titles 
)
Parameters
UserIdentity$user
LinkTarget[] | PageIdentity[]$titlesdeprecated passing LinkTarget[] since 1.36
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 542 of file WatchedItemStore.php.

References DB_PRIMARY, getConnectionRef(), MediaWiki\User\UserIdentity\getId(), getTitleDbKeysGroupedByNamespace(), MediaWiki\User\UserIdentity\isRegistered(), and uncacheTitlesForUser().

◆ resetAllNotificationTimestampsForUser()

WatchedItemStore::resetAllNotificationTimestampsForUser ( UserIdentity  $user,
  $timestamp = null 
)

Schedule a DeferredUpdate that sets all of the "last viewed" timestamps for a given user to the same value.

Parameters
UserIdentity$user
string | int | null$timestampValue to set all timestamps to, null to clear them

Implements WatchedItemStoreInterface.

Definition at line 1333 of file WatchedItemStore.php.

References $job, MediaWiki\User\UserIdentity\getId(), and MediaWiki\User\UserIdentity\isRegistered().

◆ resetNotificationTimestamp()

WatchedItemStore::resetNotificationTimestamp ( UserIdentity  $user,
  $title,
  $force = '',
  $oldid = 0 
)
Since
1.27
Parameters
UserIdentity$user
LinkTarget | PageIdentity$titledeprecated passing LinkTarget since 1.36
string$force
int$oldid
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 1440 of file WatchedItemStore.php.

References $cache, $job, $title, MediaWiki\User\UserIdentity\getId(), MediaWiki\User\UserIdentity\isRegistered(), and wfTimestamp().

◆ setNotificationTimestampsForUser()

WatchedItemStore::setNotificationTimestampsForUser ( UserIdentity  $user,
  $timestamp,
array  $targets = [] 
)

Set the "last viewed" timestamps for certain titles on a user's watchlist.

If the $targets parameter is omitted or set to [], this method simply wraps resetAllNotificationTimestampsForUser(), and in that case you should instead call that method directly; support for omitting $targets is for backwards compatibility.

If $targets is omitted or set to [], timestamps will be updated for every title on the user's watchlist, and this will be done through a DeferredUpdate. If $targets is a non-empty array, only the specified titles will be updated, and this will be done immediately (not deferred).

Since
1.27
Parameters
UserIdentity$user
string | int$timestampValue to set the "last viewed" timestamp to (null to clear)
LinkTarget[]$targetsTitles to set the timestamp for; [] means the entire watchlist
Returns
bool

Implements WatchedItemStoreInterface.

Definition at line 1248 of file WatchedItemStore.php.

References DB_PRIMARY, MediaWiki\User\UserIdentity\getId(), and MediaWiki\User\UserIdentity\isRegistered().

◆ setStatsdDataFactory()

WatchedItemStore::setStatsdDataFactory ( StatsdDataFactoryInterface  $stats)
Parameters
StatsdDataFactoryInterface$stats

Implements StatsdAwareInterface.

Definition at line 195 of file WatchedItemStore.php.

References $stats.

◆ uncache()

WatchedItemStore::uncache ( UserIdentity  $user,
  $target 
)
private
Parameters
UserIdentity$user
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36

Definition at line 249 of file WatchedItemStore.php.

References cache(), getCacheKey(), and MediaWiki\User\UserIdentity\getId().

◆ uncacheAllItemsForUser()

WatchedItemStore::uncacheAllItemsForUser ( UserIdentity  $user)
private

Definition at line 360 of file WatchedItemStore.php.

References cache(), and MediaWiki\User\UserIdentity\getId().

Referenced by clearUserWatchedItems().

◆ uncacheLinkTarget()

WatchedItemStore::uncacheLinkTarget (   $target)
private
Parameters
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36

Definition at line 258 of file WatchedItemStore.php.

References cache().

◆ uncacheTitlesForUser()

WatchedItemStore::uncacheTitlesForUser ( UserIdentity  $user,
array  $titles 
)
private
Parameters
UserIdentity$user
LinkTarget[] | PageIdentity[]$titlesdeprecated passing LinkTarget[] since 1.36

Definition at line 1838 of file WatchedItemStore.php.

References $title.

Referenced by removeWatchBatchForUser().

◆ uncacheUser()

WatchedItemStore::uncacheUser ( UserIdentity  $user)
private

◆ updateExpiries()

WatchedItemStore::updateExpiries ( IDatabase  $dbw,
string  $expiry,
string  $cond 
)
private

Update the expiries for items found with the given $cond.

Parameters
IDatabase$dbw
string$expiry
string$cond
Returns
int Number of affected rows.

Definition at line 1194 of file WatchedItemStore.php.

References Wikimedia\Rdbms\IDatabase\affectedRows(), Wikimedia\Rdbms\IDatabase\selectFieldValues(), Wikimedia\Rdbms\IDatabase\timestamp(), and Wikimedia\Rdbms\IDatabase\upsert().

◆ updateExpiriesAfterMove()

WatchedItemStore::updateExpiriesAfterMove ( IDatabase  $dbw,
array  $expiries,
int  $namespace,
string  $dbKey 
)
private
Parameters
IDatabase$dbw
array$expiries
int$namespace
string$dbKey

Definition at line 1774 of file WatchedItemStore.php.

References $res, DeferredUpdates\addCallableUpdate(), Wikimedia\Rdbms\IDatabase\replace(), and Wikimedia\Rdbms\IDatabase\select().

◆ updateNotificationTimestamp()

WatchedItemStore::updateNotificationTimestamp ( UserIdentity  $editor,
  $target,
  $timestamp 
)
Since
1.27
Parameters
UserIdentity$editor
LinkTarget | PageIdentity$targetdeprecated passing LinkTarget since 1.36
string | int$timestamp
Returns
int[]

Implements WatchedItemStoreInterface.

Definition at line 1361 of file WatchedItemStore.php.

References DB_PRIMARY, and MediaWiki\User\UserIdentity\getId().

◆ updateOrDeleteExpiries()

WatchedItemStore::updateOrDeleteExpiries ( IDatabase  $dbw,
int  $userId,
array  $rows,
?string  $expiry = null 
)
private

Insert/update expiries, or delete them if the expiry is 'infinity'.

Parameters
IDatabase$dbw
int$userId
array$rows
string | null$expiry
Returns
int Number of affected rows.

Definition at line 1145 of file WatchedItemStore.php.

References Wikimedia\Rdbms\IDatabase\affectedRows(), Wikimedia\Rdbms\IDatabase\deleteJoin(), LIST_AND, LIST_OR, Wikimedia\Rdbms\IDatabase\makeList(), and wfIsInfinity().

Member Data Documentation

◆ $cache

HashBagOStuff WatchedItemStore::$cache
private

Definition at line 69 of file WatchedItemStore.php.

Referenced by __construct().

◆ $cacheIndex

array [][] WatchedItemStore::$cacheIndex = []
private

Looks like $cacheIndex[Namespace ID][Target DB Key][User Id] => 'key' The index is needed so that on mass changes all relevant items can be un-cached.

For example: Clearing a users watchlist of all items or updating notification timestamps for all users watching a single target.

Definition at line 83 of file WatchedItemStore.php.

◆ $deferredUpdatesAddCallableUpdateCallback

callable null WatchedItemStore::$deferredUpdatesAddCallableUpdateCallback
private

◆ $expiryEnabled

bool WatchedItemStore::$expiryEnabled
private

Correlates to $wgWatchlistExpiry feature flag.

Definition at line 113 of file WatchedItemStore.php.

◆ $hookRunner

HookRunner WatchedItemStore::$hookRunner
private

Definition at line 118 of file WatchedItemStore.php.

◆ $latestUpdateCache

HashBagOStuff WatchedItemStore::$latestUpdateCache
private

Definition at line 74 of file WatchedItemStore.php.

◆ $lbFactory

ILBFactory WatchedItemStore::$lbFactory
private

Definition at line 44 of file WatchedItemStore.php.

Referenced by __construct().

◆ $linkBatchFactory

LinkBatchFactory WatchedItemStore::$linkBatchFactory
private

Definition at line 123 of file WatchedItemStore.php.

Referenced by __construct().

◆ $loadBalancer

LoadBalancer WatchedItemStore::$loadBalancer
private

Definition at line 49 of file WatchedItemStore.php.

◆ $maxExpiryDuration

string null WatchedItemStore::$maxExpiryDuration
private

Maximum configured relative expiry.

Definition at line 134 of file WatchedItemStore.php.

◆ $nsInfo

NamespaceInfo WatchedItemStore::$nsInfo
private

Definition at line 98 of file WatchedItemStore.php.

Referenced by __construct().

◆ $queueGroup

JobQueueGroup WatchedItemStore::$queueGroup
private

Definition at line 54 of file WatchedItemStore.php.

Referenced by __construct().

◆ $readOnlyMode

ReadOnlyMode WatchedItemStore::$readOnlyMode
private

Definition at line 64 of file WatchedItemStore.php.

Referenced by __construct().

◆ $revisionLookup

RevisionLookup WatchedItemStore::$revisionLookup
private

Definition at line 103 of file WatchedItemStore.php.

Referenced by __construct().

◆ $stash

BagOStuff WatchedItemStore::$stash
private

Definition at line 59 of file WatchedItemStore.php.

Referenced by __construct().

◆ $stats

StatsdDataFactoryInterface WatchedItemStore::$stats
private

Definition at line 108 of file WatchedItemStore.php.

Referenced by setStatsdDataFactory().

◆ $titleFactory

TitleFactory WatchedItemStore::$titleFactory
private

Definition at line 129 of file WatchedItemStore.php.

Referenced by __construct().

◆ $updateRowsPerQuery

int WatchedItemStore::$updateRowsPerQuery
private

Definition at line 93 of file WatchedItemStore.php.

Referenced by mustClearWatchedItemsUsingJobQueue().

◆ $userFactory

UserFactory WatchedItemStore::$userFactory
private

Definition at line 126 of file WatchedItemStore.php.

Referenced by __construct().

◆ $watchlistPurgeRate

float WatchedItemStore::$watchlistPurgeRate
private

corresponds to $wgWatchlistPurgeRate value

Definition at line 137 of file WatchedItemStore.php.

Referenced by enqueueWatchlistExpiryJob().

◆ CONSTRUCTOR_OPTIONS

const WatchedItemStore::CONSTRUCTOR_OPTIONS
Initial value:
= [
'UpdateRowsPerQuery',
'WatchlistExpiry',
'WatchlistExpiryMaxDuration',
'WatchlistPurgeRate',
]
Access: internal
For use by ServiceWiring

Definition at line 34 of file WatchedItemStore.php.


The documentation for this class was generated from the following file: