/** * @param Statement $statement * * @return Statement */ public function copy(Statement $statement) { $mainSnak = $this->copySnak($statement->getMainSnak()); $qualifiers = $this->copyQualifiers($statement->getQualifiers()); $references = $this->copyReferences($statement->getReferences()); $newStatement = new Statement($mainSnak, $qualifiers, $references); $newStatement->setRank($statement->getRank()); return $newStatement; }
/** * Applies validation to the given Claim. * This is done by validating all snaks contained in the claim, notably: * the main snak, the qualifiers, and all snaks of all references, * in case the claim is a Statement. * * @param Statement $statement The value to validate * * @return Result */ public function validateClaimSnaks(Statement $statement) { $snak = $statement->getMainSnak(); $result = $this->validate($snak); if (!$result->isValid()) { return $result; } foreach ($statement->getQualifiers() as $snak) { $result = $this->validate($snak); if (!$result->isValid()) { return $result; } } $result = $this->validateReferences($statement->getReferences()); if (!$result->isValid()) { return $result; } return Result::newSuccess(); }
/** * @param Statement $statement * @param string $url * * @return bool */ public static function statementHasReferenceForUrlWithSameDomain(Statement $statement, $url) { $currentReferences = $statement->getReferences(); foreach ($currentReferences as $currentReference) { foreach ($currentReference->getSnaks() as $currentReferenceSnak) { if (!$currentReferenceSnak instanceof PropertyValueSnak) { continue; // Ignore some and no value snaks } // Note: P854 is reference URL if ($currentReferenceSnak->getPropertyId()->getSerialization() == 'P854') { /** @var StringValue $currentReferenceValue */ $currentReferenceValue = $currentReferenceSnak->getDataValue(); $currentReferenceUrl = $currentReferenceValue->getValue(); if (self::urlsDomainsAreSame($currentReferenceUrl, $url)) { return true; } } } } return false; }
/** * @param Statement|null $oldStatement * @param Statement|null $newStatement * * @return Diff */ private function diffReferences(Statement $oldStatement = null, Statement $newStatement = null) { if ($oldStatement !== null && $newStatement !== null && $oldStatement->getReferences()->equals($newStatement->getReferences())) { return null; } $oldReferences = $oldStatement === null ? array() : iterator_to_array($oldStatement->getReferences()); $newReferences = $newStatement === null ? array() : iterator_to_array($newStatement->getReferences()); if ($oldReferences === $newReferences) { return null; } return new Diff($this->listDiffer->doDiff($oldReferences, $newReferences), false); }
/** * @param Statement $fromStatement statement to take references from * @param Statement $toStatement statement to add references to */ private function generateReferencesChangeOps(Statement $fromStatement, Statement $toStatement) { /** @var Reference $reference */ foreach ($fromStatement->getReferences() as $reference) { if (!$toStatement->getReferences()->hasReferenceHash($reference->getHash())) { $this->toChangeOps->add($this->getStatementChangeOpFactory()->newSetReferenceOp($toStatement->getGuid(), $reference, '')); } } }
private function hasMeaningfulReference(Statement $statement) { foreach ($statement->getReferences() as $reference) { foreach ($reference->getSnaks() as $snak) { if (!$snak->equals(new PropertyValueSnak(new PropertyId('P248'), new EntityIdValue(new ItemId('Q36578')))) && !$snak->getPropertyId()->equals(new PropertyId('P813')) && !$snak->getPropertyId()->equals(new PropertyId('P143'))) { return true; } } } return false; }
/** * @param Statement $statement * * @return string HTML */ private function getReferencesHeading(Statement $statement) { $referenceCount = count($statement->getReferences()); if (!array_key_exists($referenceCount, $this->referenceHeadings)) { $this->referenceHeadings[$referenceCount] = wfMessage('wikibase-ui-pendingquantitycounter-nonpending', wfMessage('wikibase-statementview-referencesheading-pendingcountersubject')->numParams($referenceCount)->text())->numParams($referenceCount)->text(); } return $this->referenceHeadings[$referenceCount]; }
private function addReferencesToSerialization(Statement $statement, array &$serialization) { $references = $statement->getReferences(); if ($references->count() != 0) { $serialization['references'] = $this->referencesSerializer->serialize($statement->getReferences()); } }
/** * @param array $params * @param Statement $statement * * @return string[] */ private function getReferenceHashesFromParams(array $params, Statement $statement) { $references = $statement->getReferences(); $hashes = array(); foreach (array_unique($params['references']) as $referenceHash) { if (!$references->hasReferenceHash($referenceHash)) { $this->errorReporter->dieError('Invalid reference hash', 'no-such-reference'); } $hashes[] = $referenceHash; } return $hashes; }
/** * @dataProvider instanceProvider */ public function testGetAllSnaks(Statement $statement) { $snaks = $statement->getAllSnaks(); $c = count($statement->getQualifiers()) + 1; /* @var Reference $reference */ foreach ($statement->getReferences() as $reference) { $c += count($reference->getSnaks()); } $this->assertGreaterThanOrEqual($c, count($snaks), 'At least one snak per Qualifier and Reference'); }
/** * @param Statement $statement * @param string $referenceHash */ private function validateReferenceHash(Statement $statement, $referenceHash) { if (!$statement->getReferences()->hasReferenceHash($referenceHash)) { $this->errorReporter->dieError('Statement does not have a reference with the given hash', 'no-such-reference'); } }