Jonaskeutel has submitted this change and it was merged.
Change subject: add ResultToViolationTranslator (basic + CheckResult)
......................................................................
add ResultToViolationTranslator (basic + CheckResult)
also save violations from constraint check in table; therefore slighlty
modified violation and violationStore with comments how to undo the
changes
+ add constants for status + error handling in translator
tests to come
Change-Id: I4bf76f2403f0691fb6c89013b0a4cd22cc8fb471
---
A
constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
M constraint-report/specials/SpecialConstraintReport.php
A includes/Result/ResultToViolationTranslator.php
M includes/Violations/Violation.php
M includes/Violations/ViolationStore.php
5 files changed, 98 insertions(+), 3 deletions(-)
Approvals:
Jonaskeutel: Verified; Looks good to me, approved
diff --git
a/constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
b/constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
new file mode 100644
index 0000000..3830490
--- /dev/null
+++
b/constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace WikidataQuality\ConstraintReport\ConstraintCheck\Result;
+
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\Lib\ClaimGuidGenerator;
+use WikidataQuality\Result\ResultToViolationTranslator;
+use WikidataQuality\Violations\Violation;
+
+
+class CheckResultToViolationTranslator extends ResultToViolationTranslator{
+
+ public function translateToViolation( $checkResultOrArray ) {
+ if( $checkResultOrArray instanceof CheckResult ) {
+ $checkResultArray = array( $checkResultOrArray );
+ } else if( is_array( $checkResultOrArray ) ) {
+ $checkResultArray = $checkResultOrArray;
+ } else {
+ throw new InvalidArgumentException;
+ }
+
+ $violationArray = array();
+ foreach( $checkResultArray as $checkResult ) {
+ if( $checkResult->getStatus() !== 'violation' ){
+ continue;
+ }
+
+ // TODO: Use these line when CheckResult has statement
+ //$statement = $checkResult->getStatement();
+ //$entityId = $statement->getClaim()->getEntityId();
+ $entityId = new ItemId( 'Q90' );
+ $statement = array();
+ $statement[ 'pid' ] = new PropertyId( 'P1' );
+ $statement[ 'claimGuid' ] = 'Q42';
+
+ //TODO: Use real claimGuid
+ $guidGenerator = new ClaimGuidGenerator();
+ $constraintClaimGuid = $guidGenerator->newGuid(
$entityId );
+ $constraintTypeEntityId =
$checkResult->getConstraintName();
+ $revisionId = $this->getRevisionIdForEntity( $entityId
);
+ $status = 'violation';
+
+ $violationArray[] = new Violation( $entityId,
$statement, $constraintClaimGuid, $constraintTypeEntityId, $revisionId,
$status);
+ }
+
+ return $violationArray;
+ }
+}
\ No newline at end of file
diff --git a/constraint-report/specials/SpecialConstraintReport.php
b/constraint-report/specials/SpecialConstraintReport.php
index 1099505..288ebee 100644
--- a/constraint-report/specials/SpecialConstraintReport.php
+++ b/constraint-report/specials/SpecialConstraintReport.php
@@ -13,9 +13,11 @@
use Wikibase\Lib\Store\EntityTitleLookup;
use Wikibase\Repo\WikibaseRepo;
use WikidataQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use
WikidataQuality\ConstraintReport\ConstraintCheck\Result\CheckResultToViolationTranslator;
use WikidataQuality\Html\HtmlTable;
use WikidataQuality\Html\HtmlTableHeader;
use WikidataQuality\Specials\SpecialCheckResultPage;
+use WikidataQuality\Violations\ViolationStore;
/**
@@ -97,6 +99,8 @@
// Run constraint checker
$constraintChecker = new ConstraintChecker( $this->entityLookup
);
$results = $constraintChecker->execute( $entity );
+
+ $this->saveResultsInViolationsTable( $results );
return $results;
}
@@ -283,4 +287,14 @@
'violation' => 'error'
);
}
+
+ /**
+ * @param array $results
+ */
+ protected function saveResultsInViolationsTable( $results ) {
+ $translator = new CheckResultToViolationTranslator();
+ $violations = $translator->translateToViolation( $results );
+ $violationStore = new ViolationStore();
+ $violationStore->insertViolation( $violations );
+ }
}
\ No newline at end of file
diff --git a/includes/Result/ResultToViolationTranslator.php
b/includes/Result/ResultToViolationTranslator.php
new file mode 100644
index 0000000..ee4d46d
--- /dev/null
+++ b/includes/Result/ResultToViolationTranslator.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WikidataQuality\Result;
+
+
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\Repo\WikibaseRepo;
+
+
+class ResultToViolationTranslator {
+ private $revisionLookup;
+
+ public function __construct() {
+ $this->revisionLookup =
WikibaseRepo::getDefaultInstance()->getEntityRevisionLookup();
+ }
+
+ /**
+ * @param EntityId $entityId
+ *
+ * @return int|false
+ */
+
+ protected function getRevisionIdForEntity( EntityId $entityId ) {
+ return $this->revisionLookup->getLatestRevisionId( $entityId );
+ }
+
+}
\ No newline at end of file
diff --git a/includes/Violations/Violation.php
b/includes/Violations/Violation.php
index e07bf0b..871f37a 100644
--- a/includes/Violations/Violation.php
+++ b/includes/Violations/Violation.php
@@ -2,10 +2,10 @@
namespace WikidataQuality\Violations;
-use Doctrine\Instantiator\Exception\InvalidArgumentException;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Statement\Statement;
+use InvalidArgumentException;
/**
@@ -18,6 +18,10 @@
* @license GNU GPL v2+
*/
class Violation {
+
+ const STATUS_VIOLATION = 'violation';
+ const STATUS_EXCEPTION = 'exception';
+ const STATUS_UNVERIFIED = 'unverified';
/**
* entity that contains the violation
@@ -89,7 +93,8 @@
* @param string $status
* @param string $additionalInfo
*/
- public function __construct( EntityId $entityId, $statement,
$constraintClaimGuid, EntityId $constraintTypeEntityId, $revisionId, $status,
$additionalInfo = null, $updatedAt = null ) {
+ // TODO: Argument 4 --> EntityId as TypeHint
+ public function __construct( EntityId $entityId, $statement,
$constraintClaimGuid, $constraintTypeEntityId, $revisionId, $status,
$additionalInfo = null, $updatedAt = null ) {
$this->entityId = $entityId;
if ( $statement instanceof Statement ) {
$this->pid = $statement->getPropertyId();
diff --git a/includes/Violations/ViolationStore.php
b/includes/Violations/ViolationStore.php
index 1cdb6d9..461a136 100644
--- a/includes/Violations/ViolationStore.php
+++ b/includes/Violations/ViolationStore.php
@@ -40,7 +40,7 @@
'pid' =>
$violation->getPropertyId()->getSerialization(),
'claim_guid' => $violation->getClaimGuid(),
'constraint_claim_guid' =>
$violation->getConstraintClaimGuid(),
- 'constraint_type_entity_id' =>
$violation->getConstraintTypeEntityId()->getSerialization(),
+ 'constraint_type_entity_id' =>
$violation->getConstraintTypeEntityId(),//TODO: use this line:
->getSerialization(),
'additional_info' =>
$violation->getAdditionalInfo(),
'updated_at' => $updatedAt,
'revision_id' => $violation->getRevisionId(),
--
To view, visit https://gerrit.wikimedia.org/r/204039
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I4bf76f2403f0691fb6c89013b0a4cd22cc8fb471
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/WikidataQuality
Gerrit-Branch: master
Gerrit-Owner: Jonaskeutel <[email protected]>
Gerrit-Reviewer: Jonaskeutel <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits