MediaWiki REL1_40
|
Controller-like object for creating and updating pages by creating new revisions. More...
Public Member Functions | |
__construct (UserIdentity $author, WikiPage $wikiPage, DerivedPageDataUpdater $derivedDataUpdater, ILoadBalancer $loadBalancer, RevisionStore $revisionStore, SlotRoleRegistry $slotRoleRegistry, IContentHandlerFactory $contentHandlerFactory, HookContainer $hookContainer, UserEditTracker $userEditTracker, UserGroupManager $userGroupManager, TitleFormatter $titleFormatter, ServiceOptions $serviceOptions, array $softwareTags, LoggerInterface $logger) | |
addSoftwareTag (string $tag) | |
Sets software tag to this update. | |
addTag (string $tag) | |
Sets a tag to apply to this update. | |
addTags (array $tags) | |
Sets tags to apply to this update. | |
getEditResult () | |
Returns the EditResult associated with this PageUpdater. | |
getExplicitTags () | |
Returns the list of tags set using the addTag() method. | |
getNewRevision () | |
The new revision created by saveRevision(), or null if saveRevision() has not yet been called, failed, or did not create a new revision because the content did not change. | |
getPage () | |
Get the page we're currently updating. | |
getStatus () | |
The Status object indicating whether saveRevision() was successful. | |
grabParentRevision () | |
Returns the revision that was the page's current revision when grabParentRevision() was first called. | |
hasEditConflict ( $expectedParentRevision) | |
Checks whether this update conflicts with another update performed between the client loading data to prepare an edit, and the client committing the edit. | |
inheritSlot (SlotRecord $originalSlot) | |
Explicitly inherit a slot from some earlier revision. | |
isChange () | |
Whether the prepared edit is a change compared to the previous revision. | |
isNew () | |
Whether saveRevision() was called and created a new page. | |
isUnchanged () | |
Whether saveRevision() did create a revision because the content didn't change: (null-edit). | |
markAsRevert (int $revertMethod, int $newestRevertedRevId, int $revertAfterRevId=null) | |
Marks this edit as a revert and applies relevant information. | |
prepareUpdate (int $flags=0) | |
Prepare the update. | |
preventChange () | |
Disable new revision creation, throwing an exception if it is attempted. | |
removeSlot ( $role) | |
Removes the slot with the given role. | |
saveRevision (CommentStoreComment $summary, int $flags=0) | |
Change an existing article or create a new article. | |
setContent ( $role, Content $content) | |
Set the new content for the given slot role. | |
setFlags (int $flags) | |
Sets any flags to use when performing the update. | |
setForceEmptyRevision (bool $forceEmptyRevision) | |
Set whether null-edits should create a revision. | |
setOriginalRevisionId ( $originalRevId) | |
Sets the ID of an earlier revision that is being repeated or restored by this update. | |
setRcPatrolStatus ( $status) | |
Sets the "patrolled" status of the edit. | |
setSlot (SlotRecord $slot) | |
Set the new slot for the given slot role. | |
setUseAutomaticEditSummaries ( $useAutomaticEditSummaries) | |
Can be used to enable or disable automatic summaries that are applied to certain kinds of changes, like completely blanking a page. | |
setUsePageCreationLog ( $use) | |
Whether to create a log entry for new page creations. | |
updateAuthor (UserIdentity $author) | |
After creation of the user during the save process, update the stored UserIdentity. | |
updateRevision (int $revId=0) | |
Updates derived slots of an existing article. | |
wasCommitted () | |
Whether saveRevision() has been called on this instance. | |
wasRevisionCreated () | |
Whether saveRevision() did create a revision. | |
wasSuccessful () | |
Whether saveRevision() completed successfully. | |
Public Attributes | |
const | CONSTRUCTOR_OPTIONS |
Options that have to be present in the ServiceOptions object passed to the constructor. | |
Controller-like object for creating and updating pages by creating new revisions.
PageUpdater instances provide compare-and-swap (CAS) protection against concurrent updates between the time grabParentRevision() is called and saveRevision() inserts a new revision. This allows application logic to safely perform edit conflict resolution using the parent revision's content.
MCR migration note: this replaces the relevant methods in WikiPage.
Definition at line 78 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::__construct | ( | UserIdentity | $author, |
WikiPage | $wikiPage, | ||
DerivedPageDataUpdater | $derivedDataUpdater, | ||
ILoadBalancer | $loadBalancer, | ||
RevisionStore | $revisionStore, | ||
SlotRoleRegistry | $slotRoleRegistry, | ||
IContentHandlerFactory | $contentHandlerFactory, | ||
HookContainer | $hookContainer, | ||
UserEditTracker | $userEditTracker, | ||
UserGroupManager | $userGroupManager, | ||
TitleFormatter | $titleFormatter, | ||
ServiceOptions | $serviceOptions, | ||
array | $softwareTags, | ||
LoggerInterface | $logger ) |
UserIdentity | $author | |
WikiPage | $wikiPage | |
DerivedPageDataUpdater | $derivedDataUpdater | |
ILoadBalancer | $loadBalancer | |
RevisionStore | $revisionStore | |
SlotRoleRegistry | $slotRoleRegistry | |
IContentHandlerFactory | $contentHandlerFactory | |
HookContainer | $hookContainer | |
UserEditTracker | $userEditTracker | |
UserGroupManager | $userGroupManager | |
TitleFormatter | $titleFormatter | |
ServiceOptions | $serviceOptions | |
string[] | $softwareTags | Array of currently enabled software change tags. Can be obtained from ChangeTags::getSoftwareTags() |
LoggerInterface | $logger |
Definition at line 229 of file PageUpdater.php.
References MediaWiki\Config\ServiceOptions\assertRequiredOptions(), MediaWiki\Storage\EditResultBuilder\CONSTRUCTOR_OPTIONS, MediaWiki\Config\ServiceOptions\get(), and MediaWiki\MainConfigNames\ManualRevertSearchRadius.
MediaWiki\Storage\PageUpdater::addSoftwareTag | ( | string | $tag | ) |
Sets software tag to this update.
If the tag is not defined in the current software tags, it's ignored.
string | $tag |
Definition at line 695 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::addTag | ( | string | $tag | ) |
Sets a tag to apply to this update.
Callers are responsible for permission checks, using ChangeTags::canAddTagsAccompanyingChange.
string | $tag |
Definition at line 667 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::addTags | ( | array | $tags | ) |
Sets tags to apply to this update.
Callers are responsible for permission checks, using ChangeTags::canAddTagsAccompanyingChange.
string[] | $tags |
Definition at line 679 of file PageUpdater.php.
Referenced by MediaWiki\EditPage\EditPage\internalAttemptSave().
MediaWiki\Storage\PageUpdater::getEditResult | ( | ) |
Returns the EditResult associated with this PageUpdater.
Will return null if PageUpdater::saveRevision() wasn't called yet. Will also return null if the update was not successful.
Definition at line 656 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::getExplicitTags | ( | ) |
Returns the list of tags set using the addTag() method.
Definition at line 707 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::getNewRevision | ( | ) |
The new revision created by saveRevision(), or null if saveRevision() has not yet been called, failed, or did not create a new revision because the content did not change.
Definition at line 1149 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::getPage | ( | ) |
Get the page we're currently updating.
Definition at line 453 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::getStatus | ( | ) |
The Status object indicating whether saveRevision() was successful.
Must not be called before saveRevision() or updateRevision() was called on this instance.
Possible status errors: edit-hook-aborted: The ArticleSave hook aborted the update but didn't set the fatal flag of $status. edit-gone-missing: In update mode, but the article didn't exist. edit-conflict: In update mode, the article changed unexpectedly. edit-no-change: Warning that the text was the same as before. edit-already-exists: In creation mode, but the article already exists.
Extensions may define additional errors.
$return->value will contain an associative array with members as follows: new: Boolean indicating if the function attempted to create a new article. revision-record: The RevisionRecord object for the inserted revision, or null.
Definition at line 1068 of file PageUpdater.php.
Referenced by MediaWiki\EditPage\EditPage\internalAttemptSave().
MediaWiki\Storage\PageUpdater::grabParentRevision | ( | ) |
Returns the revision that was the page's current revision when grabParentRevision() was first called.
This revision is the expected parent revision of the update, and will be recorded as the new revision's parent revision (unless no new revision is created because the content was not changed).
This method MUST not be called after saveRevision() was called!
The current revision determined by the first call to this method effectively acts a compare-and-swap (CAS) token which is checked by saveRevision(), which fails if any concurrent updates created a new revision.
Application code should call this method before applying transformations to the new content that depend on the parent revision, e.g. adding/replacing sections, or resolving conflicts via a 3-way merge. This protects against race conditions triggered by concurrent updates.
LogicException | if called after saveRevision(). |
Definition at line 540 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::hasEditConflict | ( | $expectedParentRevision | ) |
Checks whether this update conflicts with another update performed between the client loading data to prepare an edit, and the client committing the edit.
This is intended to detect user level "edit conflict" when the latest revision known to the client is no longer the current revision when processing the update.
An update expected to create a new page can be checked by setting $expectedParentRevision = 0. Such an update is considered to have a conflict if a current revision exists (that is, the page was created since the edit was initiated on the client).
This method returning true indicates to calling code that edit conflict resolution should be applied before saving any data. It does not prevent the update from being performed, and it should not be confused with a "late" conflict indicated by the "edit-conflict" status. A "late" conflict is a CAS failure caused by an update being performed concurrently between the time grabParentRevision() was called and the time saveRevision() trying to insert the new revision.
int | $expectedParentRevision | The ID of the revision the client expects to be the current one. Use 0 to indicate that the page is expected to not yet exist. |
Definition at line 506 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::inheritSlot | ( | SlotRecord | $originalSlot | ) |
Explicitly inherit a slot from some earlier revision.
The primary use case for this is rollbacks, when slots are to be inherited from the rollback target, overriding the content from the parent revision (which is the revision being rolled back).
This should typically not be used to inherit slots from the parent revision, which happens implicitly. Using this method causes the given slot to be treated as "modified" during revision creation, even if it has the same content as in the parent revision.
SlotRecord | $originalSlot | A slot already existing in the database, to be inherited by the new revision. |
Definition at line 586 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::isChange | ( | ) |
Whether the prepared edit is a change compared to the previous revision.
Definition at line 1114 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::isNew | ( | ) |
Whether saveRevision() was called and created a new page.
Definition at line 1094 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::isUnchanged | ( | ) |
Whether saveRevision() did create a revision because the content didn't change: (null-edit).
Whether the content changed or not is determined by DerivedPageDataUpdater::isChange().
Definition at line 1105 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::markAsRevert | ( | int | $revertMethod, |
int | $newestRevertedRevId, | ||
int | $revertAfterRevId = null ) |
Marks this edit as a revert and applies relevant information.
Will also cause the PageUpdater to add a relevant change tag when saving the edit.
int | $revertMethod | The method used to make the revert: REVERT_UNDO, REVERT_ROLLBACK or REVERT_MANUAL |
int | $newestRevertedRevId | the revision ID of the latest reverted revision. |
int | null | $revertAfterRevId | the revision ID after which revisions are being reverted. Defaults to the revision before the $newestRevertedRevId. |
Definition at line 638 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::prepareUpdate | ( | int | $flags = 0 | ) |
Prepare the update.
This sets up the RevisionRecord to be saved.
int | $flags | Bitfield, will be combined with flags set via setFlags(). EDIT_FORCE_BOT and EDIT_INTERNAL will bypass the edit stash. |
Definition at line 318 of file PageUpdater.php.
Referenced by MediaWiki\EditPage\EditPage\internalAttemptSave().
MediaWiki\Storage\PageUpdater::preventChange | ( | ) |
Disable new revision creation, throwing an exception if it is attempted.
Definition at line 1123 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::removeSlot | ( | $role | ) |
Removes the slot with the given role.
This discontinues the "stream" of slots with this role on the page, preventing the new revision, and any subsequent revisions, from inheriting the slot with this role.
string | $role | A slot role name (but not SlotRecord::MAIN) |
Definition at line 605 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::saveRevision | ( | CommentStoreComment | $summary, |
int | $flags = 0 ) |
Change an existing article or create a new article.
Updates RC and all necessary caches, optionally via the deferred update array. This does not check user permissions.
It is guaranteed that saveRevision() will fail if the current revision of the page changes after grabParentRevision() was called and before saveRevision() can insert a new revision, as per the CAS mechanism described above.
The caller is however responsible for calling hasEditConflict() to detect a user-level edit conflict, and to adjust the content of the new revision accordingly, e.g. by using a 3-way-merge.
MCR migration note: this replaces WikiPage::doUserEditContent. Callers that change to using saveRevision() now need to check the "minoredit" themselves before using EDIT_MINOR.
CommentStoreComment | $summary | Edit summary |
int | $flags | Bitfield, will be combined with the flags set via setFlags(). See there for details. |
MWException | |
RuntimeException |
Definition at line 835 of file PageUpdater.php.
References EDIT_MINOR, EDIT_NEW, EDIT_UPDATE, and wfMessage().
MediaWiki\Storage\PageUpdater::setContent | ( | $role, | |
Content | $content ) |
Set the new content for the given slot role.
string | $role | A slot role name (such as SlotRecord::MAIN) |
Content | $content |
Definition at line 551 of file PageUpdater.php.
References $content.
Referenced by MediaWiki\EditPage\EditPage\internalAttemptSave().
MediaWiki\Storage\PageUpdater::setFlags | ( | int | $flags | ) |
Sets any flags to use when performing the update.
Flags passed in subsequent calls to this method as well as calls to prepareUpdate() or saveRevision() are aggregated using bitwise OR.
Known flags:
EDIT_NEW Create a new page, or fail with "edit-already-exists" if the page exists. EDIT_UPDATE Create a new revision, or fail with "edit-gone-missing" if the page does not exist. EDIT_MINOR Mark this revision as minor EDIT_SUPPRESS_RC Do not log the change in recentchanges EDIT_FORCE_BOT Mark the revision as automated ("bot edit") EDIT_AUTOSUMMARY Fill in blank summaries with generated text where possible EDIT_INTERNAL Signal that the page retrieve/save cycle happened entirely in this request.
int | $flags | Bitfield |
Definition at line 303 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::setForceEmptyRevision | ( | bool | $forceEmptyRevision | ) |
Set whether null-edits should create a revision.
Enabling this allows the creation of dummy revisions ("null revisions") to mark events such as renaming in the page history.
Callers should typically also call setOriginalRevisionId() to indicate the ID of the revision that is being repeated. That ID can be obtained from grabParentRevision()->getId().
bool | $forceEmptyRevision |
Definition at line 423 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::setOriginalRevisionId | ( | $originalRevId | ) |
Sets the ID of an earlier revision that is being repeated or restored by this update.
The new revision is expected to have the exact same content as the given original revision. This is used with rollbacks and with dummy "null" revisions which are created to record things like page moves. setForceEmptyRevision() calls this implicitly.
int | bool | $originalRevId | The original revision id, or false if no earlier revision is known to be repeated or restored by this update. |
Definition at line 621 of file PageUpdater.php.
Referenced by MediaWiki\EditPage\EditPage\internalAttemptSave().
MediaWiki\Storage\PageUpdater::setRcPatrolStatus | ( | $status | ) |
Sets the "patrolled" status of the edit.
Callers should check the "patrol" and "autopatrol" permissions as appropriate.
int | $status | RC patrol status, e.g. RecentChange::PRC_AUTOPATROLLED. |
Definition at line 387 of file PageUpdater.php.
Referenced by MediaWiki\EditPage\EditPage\internalAttemptSave().
MediaWiki\Storage\PageUpdater::setSlot | ( | SlotRecord | $slot | ) |
Set the new slot for the given slot role.
SlotRecord | $slot |
Definition at line 564 of file PageUpdater.php.
References MediaWiki\Revision\SlotRecord\getRole().
MediaWiki\Storage\PageUpdater::setUseAutomaticEditSummaries | ( | $useAutomaticEditSummaries | ) |
Can be used to enable or disable automatic summaries that are applied to certain kinds of changes, like completely blanking a page.
bool | $useAutomaticEditSummaries |
Definition at line 372 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::setUsePageCreationLog | ( | $use | ) |
Whether to create a log entry for new page creations.
bool | $use |
Definition at line 400 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::updateAuthor | ( | UserIdentity | $author | ) |
After creation of the user during the save process, update the stored UserIdentity.
UserIdentity | $author |
Definition at line 355 of file PageUpdater.php.
References MediaWiki\User\UserIdentity\getName().
MediaWiki\Storage\PageUpdater::updateRevision | ( | int | $revId = 0 | ) |
Updates derived slots of an existing article.
Does not update RC. Updates all necessary caches, optionally via the deferred update array. This does not check user permissions. Does not do a PST.
Use wasRevisionCreated(), wasSuccessful() and getStatus() to determine the outcome of the revision update.
int | $revId |
Definition at line 970 of file PageUpdater.php.
References EDIT_INTERNAL, and wfMessage().
MediaWiki\Storage\PageUpdater::wasCommitted | ( | ) |
Whether saveRevision() has been called on this instance.
Definition at line 1041 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::wasRevisionCreated | ( | ) |
Whether saveRevision() did create a revision.
This is not the same as wasSuccessful(): when the new content is exactly the same as the old one (DerivedPageDataUpdater::isChange() returns false) and setForceEmptyRevision( true ) is not set, no new revision is created, but the save is considered successful. This behavior constitutes a "null edit".
Definition at line 1138 of file PageUpdater.php.
MediaWiki\Storage\PageUpdater::wasSuccessful | ( | ) |
Whether saveRevision() completed successfully.
This is not the same as wasRevisionCreated(): when the new content is exactly the same as the old one (DerivedPageDataUpdater::isChange() returns false) and setForceEmptyRevision( true ) is not set, no new revision is created, but the save is considered successful. This behavior constitutes a "null edit".
Definition at line 1085 of file PageUpdater.php.
const MediaWiki\Storage\PageUpdater::CONSTRUCTOR_OPTIONS |
Options that have to be present in the ServiceOptions object passed to the constructor.
Definition at line 85 of file PageUpdater.php.