Aleksey Bekh-Ivanov (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/367392 )

Change subject: Introduce `validateEntitySpecificParameters` method on 
ModifyEntity
......................................................................

Introduce `validateEntitySpecificParameters` method on ModifyEntity

Needed for EditEntity

Change-Id: Id6f7e1938ff9855658859689af46a783b9801b44
---
M repo/includes/Api/EditEntity.php
M repo/includes/Api/ModifyEntity.php
2 files changed, 48 insertions(+), 23 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/92/367392/1

diff --git a/repo/includes/Api/EditEntity.php b/repo/includes/Api/EditEntity.php
index 738e0c3..0848879 100644
--- a/repo/includes/Api/EditEntity.php
+++ b/repo/includes/Api/EditEntity.php
@@ -198,6 +198,45 @@
                return parent::prepareParameters( $params );
        }
 
+       protected function validateEntitySpecificParameters(
+               array $preparedParameters,
+               EntityDocument $entity,
+               $entityRevId
+       ) {
+               $data = $preparedParameters['data'];
+               $this->validateDataProperties( $data, $entity, $entityRevId );
+
+               $exists = $this->entityExists( $entity->getId() );
+
+               if ( $preparedParameters['clear'] ) {
+                       if ( $preparedParameters['baserevid'] && $exists ) {
+                               $latestRevision = 
$this->revisionLookup->getLatestRevisionId(
+                                       $entity->getId(),
+                                       EntityRevisionLookup::LATEST_FROM_MASTER
+                               );
+
+                               if ( !$entityRevId === $latestRevision ) {
+                                       $this->errorReporter->dieError(
+                                               'Tried to clear entity using 
baserevid of entity not equal to current revision',
+                                               'editconflict'
+                                       );
+                               }
+                       }
+               }
+
+               // if we create a new property, make sure we set the datatype
+               if ( !$exists && $entity instanceof Property ) {
+                       if ( !isset( $data['datatype'] )
+                               || !in_array( $data['datatype'], 
$this->propertyDataTypes )
+                       ) {
+                               $this->errorReporter->dieWithError(
+                                       'wikibase-api-not-recognized-datatype',
+                                       'param-illegal'
+                               );
+                       }
+               }
+       }
+
        /**
         * @see ModifyEntity::modifyEntity
         *
@@ -214,34 +253,11 @@
                $exists = $this->entityExists( $entity->getId() );
 
                if ( $preparedParameters['clear'] ) {
-                       if ( $preparedParameters['baserevid'] && $exists ) {
-                               $latestRevision = 
$this->revisionLookup->getLatestRevisionId(
-                                       $entity->getId(),
-                                       EntityRevisionLookup::LATEST_FROM_MASTER
-                               );
-
-                               if ( !$baseRevId === $latestRevision ) {
-                                       $this->errorReporter->dieError(
-                                               'Tried to clear entity using 
baserevid of entity not equal to current revision',
-                                               'editconflict'
-                                       );
-                               }
-                       }
-
                        $entity = $this->clearEntity( $entity );
                }
 
                // if we create a new property, make sure we set the datatype
                if ( !$exists && $entity instanceof Property ) {
-                       if ( !isset( $data['datatype'] )
-                               || !in_array( $data['datatype'], 
$this->propertyDataTypes )
-                       ) {
-                               $this->errorReporter->dieWithError(
-                                       'wikibase-api-not-recognized-datatype',
-                                       'param-illegal'
-                               );
-                       }
-
                        $entity->setDataTypeId( $data['datatype'] );
                }
 
diff --git a/repo/includes/Api/ModifyEntity.php 
b/repo/includes/Api/ModifyEntity.php
index fb354f5..00c4032 100644
--- a/repo/includes/Api/ModifyEntity.php
+++ b/repo/includes/Api/ModifyEntity.php
@@ -206,6 +206,13 @@
                return $params;
        }
 
+       protected function validateEntitySpecificParameters(
+               array $preparedParameters,
+               EntityDocument $entity,
+               $entityRevId
+       ) {
+       }
+
        /**
         * Make sure the required parameters are provided and that they are 
valid.
         *
@@ -257,6 +264,8 @@
                $preparedParameters = $this->prepareParameters( $params );
                unset( $params );
 
+               $this->validateEntitySpecificParameters( $preparedParameters, 
$entity, $entityRevId );
+
                $summary = $this->modifyEntity( $entity, $preparedParameters, 
$entityRevId );
 
                if ( !$summary ) {

-- 
To view, visit https://gerrit.wikimedia.org/r/367392
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id6f7e1938ff9855658859689af46a783b9801b44
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to