Page MenuHomePhabricator

ImageInfo iiprop=comment query returns empty comment as hidden
Closed, ResolvedPublicBUG REPORT

Description

List of steps to reproduce (step by step, including full links if applicable):

{"batchcomplete":"","query":{"pages":{"190270":{"pageid":190270,"ns":6,"title":"File:Redsq.png","imagerepository":"local","imageinfo":[{"commenthidden":""}]}}}}

What happens?:
The API returns a commenthidden property

What should have happened instead?:
It should not return this property because the comment is not hidden, it is empty.

Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc:
Noticed this due to it causing a FileImporter bug at T293768.

Event Timeline

It's fairly obvious from the code why it does

		if ( ( $pcomment || $comment ) && $exists ) {
			if ( isset( $opts['revdelUser'] ) && $opts['revdelUser'] ) {
				$description = $file->getDescription( File::FOR_THIS_USER, $opts['revdelUser'] );
			} else {
				$description = $file->getDescription( File::FOR_PUBLIC );
			}
			if ( $description ) {
				if ( $pcomment ) {
					$vals['parsedcomment'] = Linker::formatComment( $description, $file->getTitle() );
				}
				if ( $comment ) {
					$vals['comment'] = $description;
				}
			} else {
				$vals['commenthidden'] = true;
				$anyHidden = true;
			}
		}

Whereas other usages of commenthidden do stuff like

			if ( $row->fa_deleted & File::DELETED_COMMENT ) {
				$file['commenthidden'] = true;
			}

If we look at LocalFile::getDescription, we probably want to make a change like it does for the guarded checks

	/**
	 * @stable to override
	 * @param int $audience
	 * @param Authority|null $performer
	 * @return string
	 */
	public function getDescription( $audience = self::FOR_PUBLIC, Authority $performer = null ) {
		$this->load();
		if ( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_COMMENT ) ) {
			return '';
		} elseif ( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_COMMENT, $performer ) ) {
			return '';
		} else {
			return $this->description;
		}
	}

It would look like the userhidden property is similarly potentially confusing too

		if ( ( $user || $userid ) && $exists ) {
			if ( isset( $opts['revdelUser'] ) && $opts['revdelUser'] ) {
				$uploader = $file->getUploader( File::FOR_THIS_USER, $opts['revdelUser'] );
			} else {
				$uploader = $file->getUploader( File::FOR_PUBLIC );
			}
			if ( $uploader ) {
				if ( $user ) {
					$vals['user'] = $uploader->getName();
				}
				if ( $userid ) {
					$vals['userid'] = $uploader->getId();
				}
				if ( !$uploader->isRegistered() ) {
					$vals['anon'] = true;
				}
			} else {
				$vals['userhidden'] = true;
				$anyHidden = true;
			}
		}

Change 734700 had a related patch set uploaded (by Ppchelko; author: Ppchelko):

[mediawiki/core@master] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734700

Change 734680 had a related patch set uploaded (by Reedy; author: Ppchelko):

[mediawiki/core@REL1_37] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734680

Change 734681 had a related patch set uploaded (by Reedy; author: Ppchelko):

[mediawiki/core@wmf/1.38.0-wmf.6] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734681

Change 734682 had a related patch set uploaded (by Reedy; author: Ppchelko):

[mediawiki/core@wmf/1.38.0-wmf.5] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734682

Change 734700 merged by jenkins-bot:

[mediawiki/core@master] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734700

Change 734680 merged by jenkins-bot:

[mediawiki/core@REL1_37] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734680

Change 734681 merged by jenkins-bot:

[mediawiki/core@wmf/1.38.0-wmf.6] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734681

Change 734682 merged by jenkins-bot:

[mediawiki/core@wmf/1.38.0-wmf.5] ApiQueryImageInfo: don't show empty comments as deleted

https://gerrit.wikimedia.org/r/734682

Mentioned in SAL (#wikimedia-operations) [2021-10-26T21:00:41Z] <reedy@deploy1002> Synchronized php-1.38.0-wmf.5/includes/api/ApiQueryImageInfo.php: T293783 (duration: 01m 03s)

Mentioned in SAL (#wikimedia-operations) [2021-10-26T21:01:45Z] <reedy@deploy1002> Synchronized php-1.38.0-wmf.6/includes/api/ApiQueryImageInfo.php: T293783 (duration: 01m 03s)

Mentioned in SAL (#wikimedia-operations) [2021-10-26T21:03:26Z] <reedy@deploy1002> Synchronized php-1.38.0-wmf.6/tests/phpunit/includes/api/query/ApiQueryImageInfoTest.php: T293783 (duration: 01m 02s)

Mentioned in SAL (#wikimedia-operations) [2021-10-26T21:04:38Z] <reedy@deploy1002> Synchronized php-1.38.0-wmf.5/tests/phpunit/includes/api/query/ApiQueryImageInfoTest.php: T293783 (duration: 01m 02s)