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