* @param int|null $rc_id The rc_id of the change to add the tags to
* @param int|null $rev_id The rev_id of the change to add the tags to
* @param int|null $log_id The log_id of the change to add the tags to
- * @param string $params Params to put in the ct_params field of table 'change_tag'
+ * @param string|null $params Params to put in the ct_params field of table 'change_tag'
* @param RecentChange|null $rc Recent change, in case the tagging accompanies the action
* (this should normally be the case)
*
* Pass a variable whose value is null if the rev_id is not relevant or unknown.
* @param int|null &$log_id The log_id of the change to add the tags to.
* Pass a variable whose value is null if the log_id is not relevant or unknown.
- * @param string $params Params to put in the ct_params field of table
+ * @param string|null $params Params to put in the ct_params field of table
* 'change_tag' when adding tags
* @param RecentChange|null $rc Recent change being tagged, in case the tagging accompanies
* the action
if ( count( $tagsToAdd ) ) {
$changeTagMapping = [];
if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
- $tagDefRows = [];
+ $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+
foreach ( $tagsToAdd as $tag ) {
- $tagDefRows[] = [
- 'ctd_name' => $tag,
- 'ctd_user_defined' => 0,
- 'ctd_count' => 1
- ];
+ $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag );
}
- $dbw->upsert(
+ $dbw->update(
'change_tag_def',
- $tagDefRows,
- [ 'ctd_name' ],
[ 'ctd_count = ctd_count + 1' ],
+ [ 'ctd_name' => $tagsToAdd ],
__METHOD__
);
-
- $res = $dbw->select(
- 'change_tag_def',
- [ 'ctd_name', 'ctd_id' ],
- [ 'ctd_name' => $tagsToAdd ]
- );
- foreach ( $res as $row ) {
- $changeTagMapping[$row->ctd_name] = $row->ctd_id;
- }
}
$tagsRows = [];
'ct_log_id' => $log_id,
'ct_rev_id' => $rev_id,
'ct_params' => $params,
- 'ct_tag_id' => isset( $changeTagMapping[$tag] ) ? $changeTagMapping[$tag] : null,
+ 'ct_tag_id' => $changeTagMapping[$tag] ?? null,
]
);
// $prevTags can be out of date on replica DBs, especially when addTags is called consecutively,
// causing loss of tags added recently in tag_summary table.
$prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
- $prevTags = $prevTags ? $prevTags : '';
+ $prevTags = $prevTags ?: '';
$prevTags = array_filter( explode( ',', $prevTags ) );
// add tags
* @param string $tag
* @param string $reason
* @param User $user Who to attribute the action to
- * @param int $tagCount For deletion only, how many usages the tag had before
+ * @param int|null $tagCount For deletion only, how many usages the tag had before
* it was deleted.
* @param array $logEntryTags Change tags to apply to the entry
* that will be created in the tag management log