Cenarium has uploaded a new change for review.
https://gerrit.wikimedia.org/r/218266
Change subject: Create ChangeTagsUpdate hook and flags describing update method
......................................................................
Create ChangeTagsUpdate hook and flags describing update method
This creates a hook triggered when updating change tags, so that
extensions can take actions when tags are updated. It can take
as arguments flags that describe the method used to update. These
are defined in ChangeTags.
Change-Id: Ifb0cdc43252c4185e4f216d23b8a21fb31595a37
---
M docs/hooks.txt
M includes/MovePage.php
M includes/changes/RecentChange.php
M includes/changetags/ChangeTags.php
4 files changed, 39 insertions(+), 10 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/66/218266/1
diff --git a/docs/hooks.txt b/docs/hooks.txt
index c7dcb99..8710bdb 100644
--- a/docs/hooks.txt
+++ b/docs/hooks.txt
@@ -996,6 +996,18 @@
If you allow users to define tags, it is advised to check that the name is
legit with
the ChangeTag::canCreate function.
+'ChangeTagsAfterUpdateTags': Called immediately after tags have been updated
with the
+ChangeTags::updateTags function. Params:
+$addedTags: tags effectively added in the update
+$removedTags: tags effectively removed in the update
+$prevTags: tags that were present prior to the update
+$rc_id: recentchanges table id
+$rev_id: revision table id
+$log_id: logging table id
+$params: tag params
+$user: User who performed the tagging, or tagged user if it was automatic
+$flags: bit mask representing the source of the tagging, if done in core, see
ChangeTags class
+
'Collation::factory': Called if $wgCategoryCollation is an unknown collation.
$collationName: Name of the collation in question
&$collationObject: Null. Replace with a subclass of the Collation class that
diff --git a/includes/MovePage.php b/includes/MovePage.php
index 1a21811..ec78ecb 100644
--- a/includes/MovePage.php
+++ b/includes/MovePage.php
@@ -529,7 +529,8 @@
if ( $wgUseAutoTagging ) {
$autoTags = ChangeTagsCore::getAutotagsForMove(
$this->oldTitle, $nt, $user );
if ( $autoTags ) {
- ChangeTags::addTags( $autoTags,
$rc->mAttribs['rc_id'], $nullRevision->getId(), $logid, null );
+ ChangeTags::addTags( $autoTags,
$rc->mAttribs['rc_id'], $nullRevision->getId(), $logid,
+ null, $user, $rc,
ChangeTags::UPDATE_CORE_MOVE );
}
}
}
diff --git a/includes/changes/RecentChange.php
b/includes/changes/RecentChange.php
index 1562751..e6189a6 100644
--- a/includes/changes/RecentChange.php
+++ b/includes/changes/RecentChange.php
@@ -561,12 +561,13 @@
'pageStatus' => 'changed'
);
- DeferredUpdates::addCallableUpdate( function() use ( $rc,
$autoTags ) {
+ DeferredUpdates::addCallableUpdate( function() use ( $rc,
$autoTags, $user ) {
$rc->save();
// Apply autotags if any
if ( count( $autoTags ) ) {
ChangeTags::addTags( $autoTags,
$rc->mAttribs['rc_id'],
- $rc->mAttribs['rc_this_oldid'], null,
null );
+ $rc->mAttribs['rc_this_oldid'], null, null,
+ $user, $rc, ChangeTags::UPDATE_CORE_EDITUPDATE
);
}
if ( $rc->mAttribs['rc_patrolled'] ) {
PatrolLog::record( $rc, true,
$rc->getPerformer() );
@@ -635,12 +636,13 @@
'pageStatus' => 'created'
);
- DeferredUpdates::addCallableUpdate( function() use ( $rc,
$autoTags ) {
+ DeferredUpdates::addCallableUpdate( function() use ( $rc,
$autoTags, $user ) {
$rc->save();
// Apply autotags if any
if ( count( $autoTags ) ) {
ChangeTags::addTags( $autoTags,
$rc->mAttribs['rc_id'],
- $rc->mAttribs['rc_this_oldid'], null,
null );
+ $rc->mAttribs['rc_this_oldid'], null,
null,
+ $user, $rc,
ChangeTags::UPDATE_CORE_EDITNEW );
}
if ( $rc->mAttribs['rc_patrolled'] ) {
PatrolLog::record( $rc, true,
$rc->getPerformer() );
diff --git a/includes/changetags/ChangeTags.php
b/includes/changetags/ChangeTags.php
index 95be0eb..19f4d4a 100644
--- a/includes/changetags/ChangeTags.php
+++ b/includes/changetags/ChangeTags.php
@@ -23,6 +23,17 @@
class ChangeTags {
+ /* Represents a tag manually applied along an edit by the user who
performed it */
+ const UPDATE_USER_SELF = 2;
+ /* Represents a tag manually applied after an edit was saved */
+ const UPDATE_USER_POST = 4;
+ /* Represents a tag applied in core to an edit to an existing page */
+ const UPDATE_CORE_EDITUPDATE = 8;
+ /* Represents a tag applied in core to an edit creating a page */
+ const UPDATE_CORE_EDITNEW = 16;
+ /* Represents a tag applied in core to a page move */
+ const UPDATE_CORE_MOVE = 32;
+
/**
* Creates HTML for the given tags
*
@@ -135,9 +146,9 @@
* @return bool False if no changes are made, otherwise true
*/
public static function addTags( $tags, $rc_id = null, $rev_id = null,
- $log_id = null, $params = null
+ $log_id = null, $params = null, User $user = null, RecentChange
$rc = null, $flags = 0
) {
- $result = self::updateTags( $tags, null, $rc_id, $rev_id,
$log_id, $params );
+ $result = self::updateTags( $tags, null, $rc_id, $rev_id,
$log_id, $params, $user, $rc, $flags );
return (bool)$result[0];
}
@@ -169,7 +180,7 @@
* @since 1.25
*/
public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id =
null,
- &$rev_id = null, &$log_id = null, $params = null ) {
+ &$rev_id = null, &$log_id = null, $params = null, User $user =
null, RecentChange $rc = null, $flags = 0 ) {
$tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure
we're submitting all tags...
$tagsToRemove = array_filter( (array)$tagsToRemove );
@@ -261,6 +272,9 @@
}
}
ChangeTagsContext::clearCachesAfterUpdate( $tagsToAdd,
$tagsToRemove );
+
+ Hooks::run( 'ChangeTagsAfterUpdateTags', array(
+ $tagsToAdd, $tagsToRemove, $prevTags, $rc_id, $rev_id,
$log_id, $params, $user, $rc, $flags ) );
return array( $tagsToAdd, $tagsToRemove, $prevTags );
}
@@ -414,7 +428,7 @@
}
// do it!
- self::addTags( $tags, $rc_id, $rev_id, $log_id, $params );
+ self::addTags( $tags, $rc_id, $rev_id, $log_id, $params, $user,
null, self::UPDATE_USER_SELF );
return Status::newGood( true );
}
@@ -530,7 +544,7 @@
// do it!
list( $tagsAdded, $tagsRemoved, $initialTags ) =
self::updateTags( $tagsToAdd,
- $tagsToRemove, $rc_id, $rev_id, $log_id, $params );
+ $tagsToRemove, $rc_id, $rev_id, $log_id, $params,
$user, null, self::UPDATE_USER_POST );
if ( !$tagsAdded && !$tagsRemoved ) {
// no-op, don't log it
return Status::newGood( (object)array(
--
To view, visit https://gerrit.wikimedia.org/r/218266
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifb0cdc43252c4185e4f216d23b8a21fb31595a37
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Cenarium <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits