X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fchangetags%2FChangeTags.php;h=7e4dd006ac42e3e3f9518a7b392f2ae6047c9bea;hp=b4a8ca8028b367f2e021b150d5934e03cf8a121c;hb=ee56f00ddf0609082f8ae9a4dc3e6e1b6f54ddfd;hpb=96bf2d1635ed70fca07051d22863433aa4473c4a diff --git a/includes/changetags/ChangeTags.php b/includes/changetags/ChangeTags.php index b4a8ca8028..7e4dd006ac 100644 --- a/includes/changetags/ChangeTags.php +++ b/includes/changetags/ChangeTags.php @@ -39,7 +39,8 @@ class ChangeTags { 'mw-changed-redirect-target', 'mw-blank', 'mw-replace', - 'mw-rollback' + 'mw-rollback', + 'mw-undo', ]; /** @@ -134,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. @@ -161,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. @@ -407,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;