MediaWiki REL1_34
MediaWiki\Storage\DerivedPageDataUpdater Class Reference

A handle for managing updates for derived page data on edit, import, purge, etc. More...

Inheritance diagram for MediaWiki\Storage\DerivedPageDataUpdater:
Collaboration diagram for MediaWiki\Storage\DerivedPageDataUpdater:

Public Member Functions

 __construct (WikiPage $wikiPage, RevisionStore $revisionStore, RevisionRenderer $revisionRenderer, SlotRoleRegistry $slotRoleRegistry, ParserCache $parserCache, JobQueueGroup $jobQueueGroup, MessageCache $messageCache, Language $contLang, ILBFactory $loadbalancerFactory)
 
 doParserCacheUpdate ()
 
 doSecondaryDataUpdates (array $options=[])
 Do secondary data updates (such as updating link tables).
 
 doUpdates ()
 Do standard updates after page edit, purge, or import.
 
 getCanonicalParserOptions ()
 
 getCanonicalParserOutput ()
 
 getModifiedSlotRoles ()
 Returns the role names of the slots modified by the new revision, not including removed roles.
 
 getPreparedEdit ()
 
 getRawContent ( $role)
 Returns the content of the given slot, with no audience checks.
 
 getRawSlot ( $role)
 Returns the slot, modified or inherited, after PST, with no audience checks applied.
 
 getRemovedSlotRoles ()
 Returns the role names of the slots removed by the new revision.
 
 getRenderedRevision ()
 
 getRevision ()
 Returns the update's target revision - that is, the revision that will be the current revision after the update.
 
 getSecondaryDataUpdates ( $recursive=false)
 
 getSlotParserOutput ( $role, $generateHtml=true)
 
 getSlots ()
 Returns the slots of the target revision, after PST.
 
 getTouchedSlotRoles ()
 Returns the role names of the slots touched by the new revision, including removed roles.
 
 grabCurrentRevision ()
 Returns the revision that was the page's current revision when grabCurrentRevision() was first called.
 
 isChange ()
 Whether the edit created, or should create, a new revision (that is, it's not a null-edit).
 
 isContentDeleted ()
 Whether the content is deleted and thus not visible to the public.
 
 isContentPrepared ()
 Whether prepareUpdate() or prepareContent() have been called on this instance.
 
 isCountable ()
 
 isCreation ()
 Whether the edit creates the page.
 
 isRedirect ()
 
 isReusableFor (UserIdentity $user=null, RevisionRecord $revision=null, RevisionSlotsUpdate $slotsUpdate=null, $parentId=null)
 Checks whether this DerivedPageDataUpdater can be re-used for running updates targeting the given revision.
 
 isUpdatePrepared ()
 Whether prepareUpdate() has been called on this instance.
 
 pageExisted ()
 Determines whether the page being edited already existed.
 
 prepareContent (User $user, RevisionSlotsUpdate $slotsUpdate, $useStash=true)
 Prepare updates based on an update which has not yet been saved.
 
 prepareUpdate (RevisionRecord $revision, array $options=[])
 Prepare derived data updates targeting the given Revision.
 
 setArticleCountMethod ( $articleCountMethod)
 
 setLogger (LoggerInterface $logger)
 
 setRcWatchCategoryMembership ( $rcWatchCategoryMembership)
 
 wasRedirect ()
 Whether the page was a redirect before the edit.
 

Private Member Functions

 assertHasPageState ( $method)
 
 assertHasRevision ( $method)
 
 assertPrepared ( $method)
 
 assertTransition ( $newStage)
 Asserts that a transition to the given stage is possible, without performing it.
 
 doTransition ( $newStage)
 Transition function for managing the life cycle of this instances.
 
 getContentHandler ( $role)
 
 getContentModel ( $role)
 Returns the content model of the given slot.
 
 getPageId ()
 
 getParentRevision ()
 Returns the parent revision of the new revision wrapped by this update.
 
 getRevisionSlotsUpdate ()
 Returns the RevisionSlotsUpdate for this updater.
 
 getTitle ()
 
 getWikiPage ()
 
 revisionIsRedirect (RevisionRecord $rev)
 
 useMaster ()
 

Private Attributes

string $articleCountMethod
 see $wgArticleCountMethod
 
Language $contLang
 
JobQueueGroup $jobQueueGroup
 
ILBFactory $loadbalancerFactory
 
LoggerInterface $logger
 
MessageCache $messageCache
 
 $options
 Stores (most of) the $options parameter of prepareUpdate().
 
array $pageState = null
 The state of the relevant row in page table before the edit.
 
RevisionRecord null $parentRevision = null
 
ParserCache $parserCache
 
boolean $rcWatchCategoryMembership = false
 see $wgRCWatchCategoryMembership
 
RenderedRevision $renderedRevision = null
 
RevisionRecord null $revision = null
 
RevisionRenderer $revisionRenderer
 
RevisionStore $revisionStore
 
SlotRoleRegistry $slotRoleRegistry
 
RevisionSlotsUpdate null $slotsUpdate = null
 
string $stage = 'new'
 A stage identifier for managing the life cycle of this instance.
 
UserIdentity null $user = null
 
WikiPage $wikiPage
 

Static Private Attributes

static array[] $transitions
 Transition table for managing the life cycle of DerivedPageDateUpdater instances.
 

Additional Inherited Members

- Public Attributes inherited from IDBAccessObject
const READ_LOCKING = self::READ_LATEST | 2
 Constants for object loading bitfield flags (higher => higher QoS)
 
const READ_NONE = -1
 

Detailed Description

A handle for managing updates for derived page data on edit, import, purge, etc.

Note
Avoid direct usage of DerivedPageDataUpdater.
Todo:
Define interfaces for the different use cases of DerivedPageDataUpdater, particularly providing access to post-PST content and ParserOutput to callbacks during revision creation, which currently use WikiPage::prepareContentForEdit, and allowing updates to be triggered on purge, import, and undeletion, which currently use WikiPage::doEditUpdates() and Content::getSecondaryDataUpdates().

DerivedPageDataUpdater instances are designed to be cached inside a WikiPage instance, and re-used by callback code over the course of an update operation. It's a stepping stone on the way to a more complete refactoring of WikiPage.

When using a DerivedPageDataUpdater, the following life cycle must be observed: grabCurrentRevision (optional), prepareContent (optional), prepareUpdate (required for doUpdates). getCanonicalParserOutput, getSlots, and getSecondaryDataUpdates require prepareContent or prepareUpdate to have been called first, to initialize the DerivedPageDataUpdater.

See also
docs/pageupdater.txt for more information.

MCR migration note: this replaces the relevant methods in WikiPage, and covers the use cases of PreparedEdit.

Definition at line 100 of file DerivedPageDataUpdater.php.

Constructor & Destructor Documentation

◆ __construct()

MediaWiki\Storage\DerivedPageDataUpdater::__construct ( WikiPage  $wikiPage,
RevisionStore  $revisionStore,
RevisionRenderer  $revisionRenderer,
SlotRoleRegistry  $slotRoleRegistry,
ParserCache  $parserCache,
JobQueueGroup  $jobQueueGroup,
MessageCache  $messageCache,
Language  $contLang,
ILBFactory  $loadbalancerFactory 
)

Member Function Documentation

◆ assertHasPageState()

MediaWiki\Storage\DerivedPageDataUpdater::assertHasPageState (   $method)
private

◆ assertHasRevision()

MediaWiki\Storage\DerivedPageDataUpdater::assertHasRevision (   $method)
private

◆ assertPrepared()

◆ assertTransition()

MediaWiki\Storage\DerivedPageDataUpdater::assertTransition (   $newStage)
private

Asserts that a transition to the given stage is possible, without performing it.

See also
docs/pageupdater.txt for documentation of the life cycle.
Parameters
string$newStagethe new stage
Exceptions
LogicExceptionIf this instance is not in the expected stage

Definition at line 340 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doTransition(), MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\grabCurrentRevision(), and MediaWiki\Storage\DerivedPageDataUpdater\prepareContent().

◆ doParserCacheUpdate()

◆ doSecondaryDataUpdates()

MediaWiki\Storage\DerivedPageDataUpdater::doSecondaryDataUpdates ( array  $options = [])

Do secondary data updates (such as updating link tables).

MCR note: this method is temporarily exposed via WikiPage::doSecondaryDataUpdates.

Parameters
array$options
  • recursive: make the update recursive, i.e. also update pages which transclude the current page or otherwise depend on it (default: false)
  • defer: one of the DeferredUpdates constants, or false to run immediately after waiting for replication of the changes from the SecondaryDataUpdates hooks (default: false)
Since
1.32

Definition at line 1599 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$options, MediaWiki\Storage\DerivedPageDataUpdater\$user, MediaWiki\Storage\DerivedPageDataUpdater\assertHasRevision(), MediaWiki\Storage\DerivedPageDataUpdater\getSecondaryDataUpdates(), and User\newFromIdentity().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates().

◆ doTransition()

MediaWiki\Storage\DerivedPageDataUpdater::doTransition (   $newStage)
private

Transition function for managing the life cycle of this instances.

See also
docs/pageupdater.txt for documentation of the life cycle.
Parameters
string$newStagethe new stage
Returns
string the previous stage
Exceptions
LogicExceptionIf a transition to the given stage is not possible in the current stage.

Definition at line 322 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$stage, and MediaWiki\Storage\DerivedPageDataUpdater\assertTransition().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\grabCurrentRevision(), MediaWiki\Storage\DerivedPageDataUpdater\prepareContent(), and MediaWiki\Storage\DerivedPageDataUpdater\prepareUpdate().

◆ doUpdates()

MediaWiki\Storage\DerivedPageDataUpdater::doUpdates ( )

Do standard updates after page edit, purge, or import.

Update links tables, site stats, search index, title cache, message cache, etc. Purges pages that depend on this page when appropriate. With a 10% chance, triggers pruning the recent changes table.

Note
prepareUpdate() must be called before calling this method!

MCR migration note: this replaces WikiPage::doEditUpdates.

Definition at line 1412 of file DerivedPageDataUpdater.php.

References $title, MediaWiki\Storage\DerivedPageDataUpdater\$wikiPage, MediaWiki\Storage\DerivedPageDataUpdater\assertTransition(), MediaWiki\Storage\DerivedPageDataUpdater\doParserCacheUpdate(), MediaWiki\Storage\DerivedPageDataUpdater\doSecondaryDataUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\doTransition(), SiteStatsUpdate\factory(), MediaWiki\Storage\DerivedPageDataUpdater\getContentHandler(), MediaWiki\MediaWikiServices\getInstance(), MediaWiki\Storage\DerivedPageDataUpdater\getPageId(), MediaWiki\Storage\DerivedPageDataUpdater\getParentRevision(), MediaWiki\Storage\DerivedPageDataUpdater\getPreparedEdit(), MediaWiki\Storage\DerivedPageDataUpdater\getRawContent(), MediaWiki\Storage\DerivedPageDataUpdater\getTitle(), MediaWiki\Storage\DerivedPageDataUpdater\getTouchedSlotRoles(), MediaWiki\Storage\DerivedPageDataUpdater\getWikiPage(), ResourceLoaderWikiModule\invalidateModuleCache(), MediaWiki\Storage\DerivedPageDataUpdater\isContentDeleted(), MediaWiki\Storage\DerivedPageDataUpdater\isCountable(), User\isIP(), User\newFromIdentity(), User\newFromName(), RecentChangesUpdateJob\newPurgeJob(), CategoryMembershipChangeJob\newSpec(), NS_MEDIAWIKI, NS_USER_TALK, MWCallableUpdate\setTransactionRoundRequirement(), and wfDebug().

◆ getCanonicalParserOptions()

◆ getCanonicalParserOutput()

◆ getContentHandler()

MediaWiki\Storage\DerivedPageDataUpdater::getContentHandler (   $role)
private
Parameters
string$roleslot role name
Returns
ContentHandler

Definition at line 621 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getContentModel().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates().

◆ getContentModel()

MediaWiki\Storage\DerivedPageDataUpdater::getContentModel (   $role)
private

Returns the content model of the given slot.

Parameters
string$roleslot role name
Returns
string

Definition at line 613 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getRawSlot().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\getContentHandler().

◆ getModifiedSlotRoles()

MediaWiki\Storage\DerivedPageDataUpdater::getModifiedSlotRoles ( )

Returns the role names of the slots modified by the new revision, not including removed roles.

Returns
string[]

Definition at line 1021 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getRevisionSlotsUpdate().

◆ getPageId()

MediaWiki\Storage\DerivedPageDataUpdater::getPageId ( )
private
Returns
int

Definition at line 563 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates().

◆ getParentRevision()

MediaWiki\Storage\DerivedPageDataUpdater::getParentRevision ( )
private

Returns the parent revision of the new revision wrapped by this update.

If the update is a null-edit, this will return the parent of the current (and new) revision. This will return null if the revision wrapped by this update created the page. Only defined after calling prepareContent() or prepareUpdate()!

Returns
RevisionRecord|null the parent revision of the new revision, or null if the update created the page.

Definition at line 470 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$parentRevision, MediaWiki\Storage\DerivedPageDataUpdater\assertPrepared(), MediaWiki\Revision\RevisionRecord\getParentId(), and MediaWiki\Storage\DerivedPageDataUpdater\useMaster().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\getRevisionSlotsUpdate(), and MediaWiki\Storage\DerivedPageDataUpdater\getSecondaryDataUpdates().

◆ getPreparedEdit()

◆ getRawContent()

MediaWiki\Storage\DerivedPageDataUpdater::getRawContent (   $role)

Returns the content of the given slot, with no audience checks.

Exceptions
PageUpdateExceptionIf the slot is neither set for update nor inherited from the parent revision.
Parameters
string$roleslot role name
Returns
Content

Definition at line 603 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getRawSlot().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\isCountable(), and MediaWiki\Storage\DerivedPageDataUpdater\isRedirect().

◆ getRawSlot()

MediaWiki\Storage\DerivedPageDataUpdater::getRawSlot (   $role)

Returns the slot, modified or inherited, after PST, with no audience checks applied.

Parameters
string$roleslot role name
Exceptions
PageUpdateExceptionIf the slot is neither set for update nor inherited from the parent revision.
Returns
SlotRecord

Definition at line 591 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getSlots().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\getContentModel(), MediaWiki\Storage\DerivedPageDataUpdater\getRawContent(), and MediaWiki\Storage\DerivedPageDataUpdater\getSecondaryDataUpdates().

◆ getRemovedSlotRoles()

MediaWiki\Storage\DerivedPageDataUpdater::getRemovedSlotRoles ( )

Returns the role names of the slots removed by the new revision.

Returns
string[]

Definition at line 1030 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getRevisionSlotsUpdate().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\getSecondaryDataUpdates().

◆ getRenderedRevision()

◆ getRevision()

MediaWiki\Storage\DerivedPageDataUpdater::getRevision ( )

Returns the update's target revision - that is, the revision that will be the current revision after the update.

Note
Callers must treat the returned RevisionRecord's content as immutable, even if it is a MutableRevisionRecord instance. Other aspects of a MutableRevisionRecord returned from here, such as the user or the comment, may be changed, but may not be reflected in ParserOutput until after prepareUpdate() has been called.
Todo:
This is currently used by PageUpdater::makeNewRevision() to construct an unsaved MutableRevisionRecord instance. Introduce something like an UnsavedRevisionFactory service for that purpose instead!
Returns
RevisionRecord

Definition at line 890 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$revision, and MediaWiki\Storage\DerivedPageDataUpdater\assertPrepared().

◆ getRevisionSlotsUpdate()

◆ getSecondaryDataUpdates()

◆ getSlotParserOutput()

MediaWiki\Storage\DerivedPageDataUpdater::getSlotParserOutput (   $role,
  $generateHtml = true 
)
Parameters
string$role
bool$generateHtml
Returns
ParserOutput

Definition at line 1279 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getRenderedRevision().

◆ getSlots()

MediaWiki\Storage\DerivedPageDataUpdater::getSlots ( )

Returns the slots of the target revision, after PST.

Note
Callers must treat the returned RevisionSlots instance as immutable, even if it is a MutableRevisionSlots instance.
Returns
RevisionSlots

Definition at line 982 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\assertPrepared().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\getRawSlot(), MediaWiki\Storage\DerivedPageDataUpdater\getSecondaryDataUpdates(), and MediaWiki\Storage\DerivedPageDataUpdater\isCountable().

◆ getTitle()

◆ getTouchedSlotRoles()

MediaWiki\Storage\DerivedPageDataUpdater::getTouchedSlotRoles ( )

Returns the role names of the slots touched by the new revision, including removed roles.

Returns
string[]

Definition at line 1011 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\getRevisionSlotsUpdate().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates().

◆ getWikiPage()

◆ grabCurrentRevision()

MediaWiki\Storage\DerivedPageDataUpdater::grabCurrentRevision ( )

Returns the revision that was the page's current revision when grabCurrentRevision() was first called.

During an edit, that revision will act as the logical parent of the new revision.

Some updates are performed based on the difference between the database state at the moment this method is first called, and the state after the edit.

See also
docs/pageupdater.txt for more information on when thie method can and should be called.
Note
After prepareUpdate() was called, grabCurrentRevision() will throw an exception to avoid confusion, since the page's current revision is then the new revision after the edit, which was presumably passed to prepareUpdate() as the $revision parameter. Use getParentRevision() instead to access the revision that is the parent of the new revision.
Returns
RevisionRecord|null the page's current revision, or null if the page does not yet exist.

Definition at line 512 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$wikiPage, MediaWiki\Storage\DerivedPageDataUpdater\assertTransition(), MediaWiki\Storage\DerivedPageDataUpdater\doTransition(), WikiPage\getRevision(), MediaWiki\Storage\DerivedPageDataUpdater\getWikiPage(), WikiPage\isCountable(), WikiPage\isRedirect(), and WikiPage\loadPageData().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\prepareContent().

◆ isChange()

MediaWiki\Storage\DerivedPageDataUpdater::isChange ( )

Whether the edit created, or should create, a new revision (that is, it's not a null-edit).

Warning
at present, "null-revisions" that do not change content but do have a revision record would return false after prepareContent(), but true after prepareUpdate()! This should probably be fixed.
Returns
bool

Definition at line 948 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\assertPrepared().

◆ isContentDeleted()

MediaWiki\Storage\DerivedPageDataUpdater::isContentDeleted ( )

Whether the content is deleted and thus not visible to the public.

Returns
bool

Definition at line 573 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doUpdates(), MediaWiki\Storage\DerivedPageDataUpdater\getSecondaryDataUpdates(), and MediaWiki\Storage\DerivedPageDataUpdater\isCountable().

◆ isContentPrepared()

MediaWiki\Storage\DerivedPageDataUpdater::isContentPrepared ( )

Whether prepareUpdate() or prepareContent() have been called on this instance.

Returns
bool

Definition at line 545 of file DerivedPageDataUpdater.php.

◆ isCountable()

◆ isCreation()

MediaWiki\Storage\DerivedPageDataUpdater::isCreation ( )

Whether the edit creates the page.

Returns
bool

Definition at line 934 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\assertPrepared().

◆ isRedirect()

MediaWiki\Storage\DerivedPageDataUpdater::isRedirect ( )

◆ isReusableFor()

MediaWiki\Storage\DerivedPageDataUpdater::isReusableFor ( UserIdentity  $user = null,
RevisionRecord  $revision = null,
RevisionSlotsUpdate  $slotsUpdate = null,
  $parentId = null 
)

Checks whether this DerivedPageDataUpdater can be re-used for running updates targeting the given revision.

Parameters
UserIdentity | null$userThe user creating the revision in question
RevisionRecord | null$revisionNew revision (after save, if already saved)
RevisionSlotsUpdate | null$slotsUpdateNew content (before PST)
null | int$parentIdParent revision of the edit (use 0 for page creation)
Returns
bool

Definition at line 357 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$revision, MediaWiki\Storage\DerivedPageDataUpdater\$slotsUpdate, MediaWiki\Storage\DerivedPageDataUpdater\$user, MediaWiki\Revision\RevisionRecord\getId(), MediaWiki\User\UserIdentity\getName(), MediaWiki\Revision\RevisionRecord\getParentId(), MediaWiki\Revision\RevisionRecord\getSlots(), and MediaWiki\Storage\RevisionSlotsUpdate\hasSameUpdates().

◆ isUpdatePrepared()

MediaWiki\Storage\DerivedPageDataUpdater::isUpdatePrepared ( )

Whether prepareUpdate() has been called on this instance.

Note
will also return null in case of a null-edit!
Returns
bool

Definition at line 556 of file DerivedPageDataUpdater.php.

◆ pageExisted()

MediaWiki\Storage\DerivedPageDataUpdater::pageExisted ( )

Determines whether the page being edited already existed.

Only defined after calling grabCurrentRevision() or prepareContent() or prepareUpdate()!

Returns
bool
Exceptions
LogicExceptionif called before grabCurrentRevision

Definition at line 455 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\assertHasPageState().

◆ prepareContent()

MediaWiki\Storage\DerivedPageDataUpdater::prepareContent ( User  $user,
RevisionSlotsUpdate  $slotsUpdate,
  $useStash = true 
)

Prepare updates based on an update which has not yet been saved.

This may be used to create derived data that is needed when creating a new revision; particularly, this makes available the slots of the new revision via the getSlots() method, after applying PST and slot inheritance.

The derived data prepared for revision creation may then later be re-used by doUpdates(), without the need to re-calculate.

See also
docs/pageupdater.txt for more information on when thie method can and should be called.
Note
Calling this method more than once with the same $slotsUpdate has no effect. Calling this method multiple times with different content will cause an exception.
Calling this method after prepareUpdate() has been called will cause an exception.
Parameters
User$userThe user to act as context for pre-save transformation (PST). Type hint should be reduced to UserIdentity at some point.
RevisionSlotsUpdate$slotsUpdateThe new content of the slots to be updated by this edit, before PST.
bool$useStashWhether to use stashed ParserOutput

Definition at line 723 of file DerivedPageDataUpdater.php.

References $content, MediaWiki\Storage\DerivedPageDataUpdater\$parentRevision, MediaWiki\Storage\DerivedPageDataUpdater\$slotsUpdate, $title, MediaWiki\Storage\DerivedPageDataUpdater\$user, MediaWiki\Storage\DerivedPageDataUpdater\$wikiPage, MediaWiki\Storage\DerivedPageDataUpdater\assertTransition(), MediaWiki\Storage\DerivedPageDataUpdater\doTransition(), Title\equals(), MediaWiki\Revision\RevisionRecord\getComment(), MediaWiki\Revision\RevisionRecord\getId(), MediaWiki\MediaWikiServices\getInstance(), MediaWiki\Storage\RevisionSlotsUpdate\getModifiedRoles(), MediaWiki\Storage\RevisionSlotsUpdate\getModifiedSlot(), MediaWiki\User\UserIdentity\getName(), MediaWiki\Revision\RevisionRecord\getPageId(), MediaWiki\Revision\RevisionRecord\getParentId(), MediaWiki\Storage\RevisionSlotsUpdate\getRemovedRoles(), MediaWiki\Revision\RevisionRecord\getSlots(), MediaWiki\Revision\RevisionRecord\getTimestamp(), MediaWiki\Storage\DerivedPageDataUpdater\getTitle(), MediaWiki\Revision\RevisionRecord\getUser(), MediaWiki\Revision\RevisionRecord\getVisibility(), MediaWiki\Storage\DerivedPageDataUpdater\getWikiPage(), MediaWiki\Storage\DerivedPageDataUpdater\grabCurrentRevision(), MediaWiki\Revision\RevisionRecord\hasSameContent(), MediaWiki\Revision\RevisionRecord\isMinor(), MediaWiki\Storage\RevisionSlotsUpdate\isModifiedSlot(), User\newFromIdentity(), MediaWiki\Storage\DerivedPageDataUpdater\useMaster(), and wfTimestampNow().

◆ prepareUpdate()

MediaWiki\Storage\DerivedPageDataUpdater::prepareUpdate ( RevisionRecord  $revision,
array  $options = [] 
)

Prepare derived data updates targeting the given Revision.

Calling this method requires the given revision to be present in the database. This may be right after a new revision has been created, or when re-generating derived data e.g. in ApiPurge, RefreshLinksJob, and the refreshLinks script.

See also
docs/pageupdater.txt for more information on when thie method can and should be called.
Note
Calling this method more than once with the same revision has no effect. $options are only used for the first call. Calling this method multiple times with different revisions will cause an exception.
If grabCurrentRevision() (or prepareContent()) has been called before calling this method, $revision->getParentRevision() has to refer to the revision that was the current revision at the time grabCurrentRevision() was called.
Parameters
RevisionRecord$revision
array$optionsArray of options, following indexes are used:
  • changed: bool, whether the revision changed the content (default true)
  • created: bool, whether the revision created the page (default false)
  • moved: bool, whether the page was moved (default false)
  • restored: bool, whether the page was undeleted (default false)
  • oldrevision: Revision object for the pre-update revision (default null)
  • triggeringUser: The user triggering the update (UserIdentity, defaults to the user who created the revision)
  • oldredirect: bool, null, or string 'no-change' (default null):
    • bool: whether the page was counted as a redirect before that revision, only used in changed is true and created is false
    • null or 'no-change': don't update the redirect status.
  • oldcountable: bool, null, or string 'no-change' (default null):
    • bool: whether the page was counted as an article before that revision, only used in changed is true and created is false
    • null: if created is false, don't update the article count; if created is true, do update the article count
    • 'no-change': don't update the article count, ever When set to null, pageState['oldCountable'] will be used instead if available.
  • causeAction: an arbitrary string identifying the reason for the update. See DataUpdate::getCauseAction(). (default 'unknown')
  • causeAgent: name of the user who caused the update. See DataUpdate::getCauseAgent(). (string, default 'unknown')
  • known-revision-output: a combined canonical ParserOutput for the revision, perhaps from some cache. The caller is responsible for ensuring that the ParserOutput indeed matched the $rev and $options. This mechanism is intended as a temporary stop-gap, for the time until caches have been changed to store RenderedRevision states instead of ParserOutput objects. (default: null) (since 1.33)

Definition at line 1082 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$options, MediaWiki\Storage\DerivedPageDataUpdater\$revision, MediaWiki\Storage\DerivedPageDataUpdater\$user, MediaWiki\Storage\DerivedPageDataUpdater\doTransition(), MediaWiki\Revision\RevisionRecord\getId(), MediaWiki\User\UserIdentity\getName(), MediaWiki\Revision\RevisionRecord\getParentId(), Revision\getRevisionRecord(), MediaWiki\Revision\RevisionRecord\getSlots(), MediaWiki\Revision\RevisionRecord\getUser(), and MediaWiki\Storage\DerivedPageDataUpdater\useMaster().

◆ revisionIsRedirect()

MediaWiki\Storage\DerivedPageDataUpdater::revisionIsRedirect ( RevisionRecord  $rev)
private
Parameters
RevisionRecord$rev
Returns
bool

Definition at line 692 of file DerivedPageDataUpdater.php.

References MediaWiki\Revision\RevisionRecord\getContent().

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\wasRedirect().

◆ setArticleCountMethod()

MediaWiki\Storage\DerivedPageDataUpdater::setArticleCountMethod (   $articleCountMethod)
Parameters
string$articleCountMethod"any" or "link".
See also
$wgArticleCountMethod

Definition at line 420 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$articleCountMethod.

Referenced by WikiPage\newDerivedDataUpdater().

◆ setLogger()

MediaWiki\Storage\DerivedPageDataUpdater::setLogger ( LoggerInterface  $logger)

◆ setRcWatchCategoryMembership()

MediaWiki\Storage\DerivedPageDataUpdater::setRcWatchCategoryMembership (   $rcWatchCategoryMembership)
Parameters
bool$rcWatchCategoryMembership
See also
$wgRCWatchCategoryMembership

Definition at line 428 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\$rcWatchCategoryMembership.

Referenced by WikiPage\newDerivedDataUpdater().

◆ useMaster()

◆ wasRedirect()

MediaWiki\Storage\DerivedPageDataUpdater::wasRedirect ( )

Whether the page was a redirect before the edit.

Returns
bool

Definition at line 958 of file DerivedPageDataUpdater.php.

References MediaWiki\Storage\DerivedPageDataUpdater\assertHasPageState(), and MediaWiki\Storage\DerivedPageDataUpdater\revisionIsRedirect().

Member Data Documentation

◆ $articleCountMethod

string MediaWiki\Storage\DerivedPageDataUpdater::$articleCountMethod
private

see $wgArticleCountMethod

Definition at line 150 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\setArticleCountMethod().

◆ $contLang

Language MediaWiki\Storage\DerivedPageDataUpdater::$contLang
private

◆ $jobQueueGroup

JobQueueGroup MediaWiki\Storage\DerivedPageDataUpdater::$jobQueueGroup
private

◆ $loadbalancerFactory

ILBFactory MediaWiki\Storage\DerivedPageDataUpdater::$loadbalancerFactory
private

◆ $logger

LoggerInterface MediaWiki\Storage\DerivedPageDataUpdater::$logger
private

◆ $messageCache

MessageCache MediaWiki\Storage\DerivedPageDataUpdater::$messageCache
private

◆ $options

MediaWiki\Storage\DerivedPageDataUpdater::$options
private
Initial value:
= [
'changed' => true,
'newrev' => false,
'created' => false,
'moved' => false,
'restored' => false,
'oldrevision' => null,
'oldcountable' => null,
'oldredirect' => null,
'triggeringUser' => null,
'causeAction' => null,
'causeAgent' => null,
]

Stores (most of) the $options parameter of prepareUpdate().

See also
prepareUpdate()

Definition at line 161 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doSecondaryDataUpdates(), and MediaWiki\Storage\DerivedPageDataUpdater\prepareUpdate().

◆ $pageState

array MediaWiki\Storage\DerivedPageDataUpdater::$pageState = null
private

The state of the relevant row in page table before the edit.

This is determined by the first call to grabCurrentRevision, prepareContent, or prepareUpdate (so it is only accessible in 'knows-current' or a later stage). If pageState was not initialized when prepareUpdate() is called, prepareUpdate() will attempt to emulate the state of the page table before the edit.

Contains the following fields:

  • oldRevision (RevisionRecord|null): the revision that was current before the change associated with this update. Might not be set, use getParentRevision().
  • oldId (int|null): the id of the above revision. 0 if there is no such revision (the change was about creating a new page); null if not known (that should not happen).
  • oldIsRedirect (bool|null): whether the page was a redirect before the change. Lazy-loaded, can be null; use wasRedirect() instead of direct access.
  • oldCountable (bool|null): whether the page was countable before the change (or null if we don't have that information)

Definition at line 198 of file DerivedPageDataUpdater.php.

◆ $parentRevision

◆ $parserCache

ParserCache MediaWiki\Storage\DerivedPageDataUpdater::$parserCache
private

◆ $rcWatchCategoryMembership

boolean MediaWiki\Storage\DerivedPageDataUpdater::$rcWatchCategoryMembership = false
private

see $wgRCWatchCategoryMembership

Definition at line 155 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\setRcWatchCategoryMembership().

◆ $renderedRevision

RenderedRevision MediaWiki\Storage\DerivedPageDataUpdater::$renderedRevision = null
private

◆ $revision

◆ $revisionRenderer

RevisionRenderer MediaWiki\Storage\DerivedPageDataUpdater::$revisionRenderer
private

◆ $revisionStore

RevisionStore MediaWiki\Storage\DerivedPageDataUpdater::$revisionStore
private

◆ $slotRoleRegistry

SlotRoleRegistry MediaWiki\Storage\DerivedPageDataUpdater::$slotRoleRegistry
private

◆ $slotsUpdate

◆ $stage

string MediaWiki\Storage\DerivedPageDataUpdater::$stage = 'new'
private

A stage identifier for managing the life cycle of this instance.

Possible stages are 'new', 'knows-current', 'has-content', 'has-revision', and 'done'.

See also
docs/pageupdater.txt for documentation of the life cycle.

Definition at line 236 of file DerivedPageDataUpdater.php.

Referenced by MediaWiki\Storage\DerivedPageDataUpdater\doTransition().

◆ $transitions

array [] MediaWiki\Storage\DerivedPageDataUpdater::$transitions
staticprivate
Initial value:
= [
'new' => [
'new' => true,
'knows-current' => true,
'has-content' => true,
'has-revision' => true,
],
'knows-current' => [
'knows-current' => true,
'has-content' => true,
'has-revision' => true,
],
'has-content' => [
'has-content' => true,
'has-revision' => true,
],
'has-revision' => [
'has-revision' => true,
'done' => true,
],
]

Transition table for managing the life cycle of DerivedPageDateUpdater instances.

XXX: Overkill. This is a linear order, we could just count. Names are nice though, and constants are also overkill...

See also
docs/pageupdater.txt for documentation of the life cycle.

Definition at line 248 of file DerivedPageDataUpdater.php.

◆ $user

◆ $wikiPage


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