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

Reply via email to