Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/includes/Validators/CommonsMediaExistsValidator.php
<?php

namespace Wikibase\Repo\Validators;

use DataValues\StringValue;
use InvalidArgumentException;
use ValueValidators\Error;
use ValueValidators\Result;
use ValueValidators\ValueValidator;
use Wikibase\Repo\CachingCommonsMediaFileNameLookup;
use Wikimedia\Assert\Assert;

/**
 * Validator for commons media values which checks whether the file in question
 * exists. Doesn't check whether the name is normalized.
 *
 * @license GPL-2.0+
 * @author Marius Hoch
 */
class CommonsMediaExistsValidator implements ValueValidator {

	/**
	 * @var CachingCommonsMediaFileNameLookup
	 */
	private $fileNameLookup;

	/**
	 * @param CachingCommonsMediaFileNameLookup $fileNameLookup
	 */
	public function __construct( CachingCommonsMediaFileNameLookup $fileNameLookup ) {
		$this->fileNameLookup = $fileNameLookup;
	}

	/**
	 * @see ValueValidator::validate()
	 *
	 * @param StringValue|string $value
	 *
	 * @return Result
	 * @throws InvalidArgumentException
	 */
	public function validate( $value ) {
		Assert::parameterType( 'string|DataValues\StringValue', $value, '$value' );

		if ( $value instanceof StringValue ) {
			$value = $value->getValue();
		}

		$actualName = $this->fileNameLookup->lookupFileName( $value );

		$errors = array();

		if ( $actualName === null ) {
			$errors[] = Error::newError(
				"File does not exist: " . $value,
				null,
				'no-such-media',
				array( $value )
			);
		}

		return empty( $errors ) ? Result::newSuccess() : Result::newError( $errors );
	}

	/**
	 * @see ValueValidator::setOptions()
	 *
	 * @param array $options
	 *
	 * @codeCoverageIgnore
	 */
	public function setOptions( array $options ) {
		// Do nothing. This method shouldn't even be in the interface.
	}

}