| Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/includes/Validators/SiteLinkUniquenessValidator.php |
<?php
namespace Wikibase\Repo\Validators;
use ValueValidators\Error;
use ValueValidators\Result;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\SiteLink;
use Wikibase\Repo\Store\SiteLinkConflictLookup;
/**
* Validator for checking that site links are unique across all Items.
*
* @since 0.5
*
* @license GPL-2.0+
* @author Daniel Kinzler
*/
class SiteLinkUniquenessValidator implements EntityValidator {
/**
* @var SiteLinkConflictLookup
*/
private $siteLinkConflictLookup;
/**
* @param SiteLinkConflictLookup $siteLinkConflictLookup
*/
public function __construct( SiteLinkConflictLookup $siteLinkConflictLookup ) {
$this->siteLinkConflictLookup = $siteLinkConflictLookup;
}
/**
* @see EntityValidator::validate()
*
* @param EntityDocument $entity
*
* @return Result
*/
public function validateEntity( EntityDocument $entity ) {
$errors = array();
if ( $entity instanceof Item ) {
// TODO: do not use global state
$db = wfGetDB( DB_MASTER );
$conflicts = $this->siteLinkConflictLookup->getConflictsForItem( $entity, $db );
/* @var ItemId $ignoreConflictsWith */
foreach ( $conflicts as $conflict ) {
$errors[] = $this->getConflictError( $conflict );
}
}
return empty( $errors ) ? Result::newSuccess() : Result::newError( $errors );
}
/**
* Get Message for a conflict
*
* @param array $conflict A record as returned by SiteLinkConflictLookup::getConflictsForItem()
*
* @return Error
*/
private function getConflictError( array $conflict ) {
$entityId = ItemId::newFromNumber( $conflict['itemId'] );
return new UniquenessViolation(
$entityId,
'SiteLink conflict',
'sitelink-conflict',
array(
new SiteLink( $conflict['siteId'], $conflict['sitePage'] ),
$entityId,
)
);
}
}