jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/340527 )
Change subject: Reuse badge serialization validation in SetSiteLink.
......................................................................
Reuse badge serialization validation in SetSiteLink.
Removes parseSiteLinkBadges from ModifyEntity which is instead done
using SiteLinkBadgeChangeOpSerializationValidator which was introduced
for sitelink ChangeOp deserialization.
Bug: T158864
Change-Id: Iaad515029301887b5117480af1fe7ff8d479e062
---
M repo/Wikibase.php
M repo/includes/Api/ModifyEntity.php
M repo/includes/Api/SetSiteLink.php
M repo/includes/WikibaseRepo.php
4 files changed, 40 insertions(+), 50 deletions(-)
Approvals:
Daniel Kinzler: Looks good to me, approved
jenkins-bot: Verified
diff --git a/repo/Wikibase.php b/repo/Wikibase.php
index d6ce101..d03eb2c 100644
--- a/repo/Wikibase.php
+++ b/repo/Wikibase.php
@@ -274,11 +274,14 @@
$wgAPIModules['wbsetsitelink'] = [
'class' => Wikibase\Repo\Api\SetSiteLink::class,
'factory' => function ( ApiMain $mainModule, $moduleName ) {
+ $wikibaseRepo =
Wikibase\Repo\WikibaseRepo::getDefaultInstance();
+
return new Wikibase\Repo\Api\SetSiteLink(
$mainModule,
$moduleName,
-
Wikibase\Repo\WikibaseRepo::getDefaultInstance()->getChangeOpFactoryProvider()
- ->getSiteLinkChangeOpFactory()
+ $wikibaseRepo->getChangeOpFactoryProvider()
+ ->getSiteLinkChangeOpFactory(),
+
$wikibaseRepo->getSiteLinkBadgeChangeOpSerializationValidator()
);
}
];
diff --git a/repo/includes/Api/ModifyEntity.php
b/repo/includes/Api/ModifyEntity.php
index 79e1274..7cceb2c 100644
--- a/repo/includes/Api/ModifyEntity.php
+++ b/repo/includes/Api/ModifyEntity.php
@@ -4,7 +4,6 @@
use ApiBase;
use ApiMain;
-use InvalidArgumentException;
use LogicException;
use Status;
use User;
@@ -12,7 +11,6 @@
use Wikibase\ChangeOp\ChangeOpException;
use Wikibase\ChangeOp\ChangeOpValidationException;
use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Entity\ItemId;
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Repo\Store\EntityTitleStoreLookup;
use Wikibase\Repo\SiteLinkTargetProvider;
@@ -138,47 +136,6 @@
*/
protected function getResultBuilder() {
return $this->resultBuilder;
- }
-
- /**
- * Validates badges from params and turns them into an array of ItemIds.
- *
- * @todo: extract this into a SiteLinkBadgeHelper
- *
- * @param string[] $badgesParams
- *
- * @return ItemId[]
- */
- protected function parseSiteLinkBadges( array $badgesParams ) {
- $badges = array();
-
- foreach ( $badgesParams as $badgeSerialization ) {
- try {
- $badgeId = new ItemId( $badgeSerialization );
- } catch ( InvalidArgumentException $ex ) {
- $this->errorReporter->dieError( 'Badges: could
not parse "' . $badgeSerialization
- . '", the id is invalid',
'invalid-entity-id' );
- continue;
- }
-
- if ( !array_key_exists( $badgeId->getSerialization(),
$this->badgeItems ) ) {
- $this->errorReporter->dieError( 'Badges: item
"' . $badgeSerialization . '" is not a badge',
- 'not-badge' );
- }
-
- $itemTitle = $this->titleLookup->getTitleForId(
$badgeId );
-
- if ( is_null( $itemTitle ) || !$itemTitle->exists() ) {
- $this->errorReporter->dieError(
- 'Badges: no item found matching id "' .
$badgeSerialization . '"',
- 'no-such-entity'
- );
- }
-
- $badges[] = $badgeId;
- }
-
- return $badges;
}
/**
diff --git a/repo/includes/Api/SetSiteLink.php
b/repo/includes/Api/SetSiteLink.php
index b2bf245..f018eda 100644
--- a/repo/includes/Api/SetSiteLink.php
+++ b/repo/includes/Api/SetSiteLink.php
@@ -9,7 +9,10 @@
use Wikibase\ChangeOp\SiteLinkChangeOpFactory;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\Item;
+use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\SiteLinkList;
+use Wikibase\Repo\ChangeOp\Deserialization\ChangeOpDeserializationException;
+use
Wikibase\Repo\ChangeOp\Deserialization\SiteLinkBadgeChangeOpSerializationValidator;
use Wikibase\Summary;
/**
@@ -26,6 +29,11 @@
private $siteLinkChangeOpFactory;
/**
+ * @var SiteLinkBadgeChangeOpSerializationValidator
+ */
+ private $badgeSerializationValidator;
+
+ /**
* @param ApiMain $mainModule
* @param string $moduleName
* @param SiteLinkChangeOpFactory $siteLinkChangeOpFactory
@@ -33,11 +41,13 @@
public function __construct(
ApiMain $mainModule,
$moduleName,
- SiteLinkChangeOpFactory $siteLinkChangeOpFactory
+ SiteLinkChangeOpFactory $siteLinkChangeOpFactory,
+ SiteLinkBadgeChangeOpSerializationValidator
$badgeSerializationValidator
) {
parent::__construct( $mainModule, $moduleName );
$this->siteLinkChangeOpFactory = $siteLinkChangeOpFactory;
+ $this->badgeSerializationValidator =
$badgeSerializationValidator;
}
/**
@@ -164,6 +174,22 @@
}
}
+ private function parseSiteLinkBadges( array $badges ) {
+ try {
+
$this->badgeSerializationValidator->validateBadgeSerialization( $badges );
+ } catch ( ChangeOpDeserializationException $exception ) {
+ $this->errorReporter->dieException( $exception,
$exception->getErrorCode() );
+ }
+
+ return $this->getBadgeItemIds( $badges );
+ }
+
+ private function getBadgeItemIds( array $badges ) {
+ return array_map( function( $badge ) {
+ return new ItemId( $badge );
+ }, $badges );
+ }
+
/**
* @see ModifyEntity::getAllowedParams
*/
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 99282f4..78f422b 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -849,6 +849,13 @@
);
}
+ public function getSiteLinkBadgeChangeOpSerializationValidator() {
+ return new SiteLinkBadgeChangeOpSerializationValidator(
+ $this->getEntityTitleLookup(),
+ array_keys( $this->settings->getSetting( 'badgeItems' )
)
+ );
+ }
+
/**
* @return EntityChangeOpProvider
*/
@@ -869,10 +876,7 @@
$changeOpFactoryProvider->getStatementChangeOpFactory(),
$changeOpFactoryProvider->getSiteLinkChangeOpFactory(),
new TermChangeOpSerializationValidator(
$this->getTermsLanguages() ),
- new SiteLinkBadgeChangeOpSerializationValidator(
- $this->getEntityTitleLookup(),
- array_keys( $this->settings->getSetting(
'badgeItems' ) )
- ),
+ $this->getSiteLinkBadgeChangeOpSerializationValidator(),
$this->getExternalFormatStatementDeserializer(),
new SiteLinkTargetProvider(
$this->getSiteLookup(),
--
To view, visit https://gerrit.wikimedia.org/r/340527
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Iaad515029301887b5117480af1fe7ff8d479e062
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Jakob <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits