X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fchangetags%2FChangeTags.php;h=7e4dd006ac42e3e3f9518a7b392f2ae6047c9bea;hp=db1f599087f5f2496d952a7d40cfe247d5e7e028;hb=faf7cc4a09848c538320bd2b9067b1a77c0a0183;hpb=f98242b2d70820c567f853063501098c1cd1e08a diff --git a/includes/changetags/ChangeTags.php b/includes/changetags/ChangeTags.php index db1f599087..7e4dd006ac 100644 --- a/includes/changetags/ChangeTags.php +++ b/includes/changetags/ChangeTags.php @@ -135,7 +135,7 @@ class ChangeTags { * exists, provided it is not disabled. If the message is disabled, * we consider the tag hidden, and return false. * - * @param string $tag Tag + * @param string $tag * @param IContextSource $context * @return string|bool Tag description or false if tag is to be hidden. * @since 1.25 Returns false if tag is to be hidden. @@ -162,7 +162,7 @@ class ChangeTags { * or if message is disabled, returns false. Otherwise, returns the message object * for the long description. * - * @param string $tag Tag + * @param string $tag * @param IContextSource $context * @return Message|bool Message object of the tag long description or false if * there is no description. @@ -408,19 +408,24 @@ class ChangeTags { sort( $prevTags ); sort( $newTags ); if ( $prevTags == $newTags ) { - // No change. return false; } if ( !$newTags ) { - // no tags left, so delete the row altogether + // No tags left, so delete the row altogether $dbw->delete( 'tag_summary', $tsConds, __METHOD__ ); } else { - $dbw->replace( 'tag_summary', - [ 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ], - array_filter( array_merge( $tsConds, [ 'ts_tags' => implode( ',', $newTags ) ] ) ), - __METHOD__ - ); + // Specify the non-DEFAULT value columns in the INSERT/REPLACE clause + $row = array_filter( [ 'ts_tags' => implode( ',', $newTags ) ] + $tsConds ); + // Check the unique keys for conflicts, ignoring any NULL *_id values + $uniqueKeys = []; + foreach ( [ 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ] as $uniqueColumn ) { + if ( isset( $row[$uniqueColumn] ) ) { + $uniqueKeys[] = [ $uniqueColumn ]; + } + } + + $dbw->replace( 'tag_summary', $uniqueKeys, $row, __METHOD__ ); } return true;