[MediaWiki-commits] [Gerrit] Allow editing of claims in property groups - change (mediawiki...Wikibase)
jenkins-bot has submitted this change and it was merged. Change subject: Allow editing of claims in property groups .. Allow editing of claims in property groups This allows output from getentites to be copied directly into editentity. Editentity now accepts both an array of claims and an array of claims grouped by property id Bug: 54313 Change-Id: I1c19bf28d2df822f082a7c9625e6f8bfd848950d --- M repo/includes/api/EditEntity.php M repo/tests/phpunit/includes/api/EditEntityTest.php 2 files changed, 46 insertions(+), 5 deletions(-) Approvals: Tobias Gritschacher: Looks good to me, approved jenkins-bot: Verified diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php index cb48597..039052f 100644 --- a/repo/includes/api/EditEntity.php +++ b/repo/includes/api/EditEntity.php @@ -382,12 +382,22 @@ if ( !is_array( $claims ) ) { $this-dieUsage( List of claims must be an array, 'not-recognized-array' ); } + $changeOps = array(); - //todo allow claims to be passed grouped by property rather than just an array of claims - $removeChangeops = $this-getRemoveClaimsChangeOps( $claims, $guidGenerator ); - $modifyChangeOps = $this-getModifyClaimsChangeOps( $claims, $guidGenerator ); + //check if the array is associative or in arrays by property + if( array_keys( $claims ) !== range( 0, count( $claims ) - 1 ) ){ + foreach( $claims as $subClaims ){ + $changeOps = array_merge( $changeOps, + $this-getRemoveClaimsChangeOps( $subClaims, $guidGenerator ), + $this-getModifyClaimsChangeOps( $subClaims, $guidGenerator ) ); + } + } else { + $changeOps = array_merge( $changeOps, + $this-getRemoveClaimsChangeOps( $claims, $guidGenerator ), + $this-getModifyClaimsChangeOps( $claims, $guidGenerator ) ); + } - return array_merge( $removeChangeops, $modifyChangeOps ); + return $changeOps; } /** diff --git a/repo/tests/phpunit/includes/api/EditEntityTest.php b/repo/tests/phpunit/includes/api/EditEntityTest.php index d08e354..54628a4 100644 --- a/repo/tests/phpunit/includes/api/EditEntityTest.php +++ b/repo/tests/phpunit/includes/api/EditEntityTest.php @@ -41,13 +41,20 @@ parent::setup(); $prop56 = PropertyId::newFromNumber( 56 ); + $prop72 = PropertyId::newFromNumber( 72 ); if( !isset( self::$hasSetup ) ){ $this-initTestEntities( array( 'Berlin' ) ); + $prop = PropertyContent::newEmpty(); $prop-getEntity()-setId( $prop56 ); $prop-getEntity()-setDataTypeId( 'string' ); - $prop-save( 'EditEntityTest' ); + $prop-save( 'EditEntityTestP56' ); + + $prop = PropertyContent::newEmpty(); + $prop-getEntity()-setId( $prop72 ); + $prop-getEntity()-setDataTypeId( 'string' ); + $prop-save( 'EditEntityTestP72' ); } self::$hasSetup = true; } @@ -183,6 +190,30 @@ ) ) ) ), + + array( //15 clear and add multiple claims within property groups + 'p' = array( 'clear' = '', + 'data' = '{claims:{P56:[{mainsnak:{snaktype:value,property:P56,datavalue:{value:imastring56,type:string}},type:statement,rank:normal}],'. + 'P72:[{mainsnak:{snaktype:value,property:P72,datavalue:{value:imastring72,type:string}},type:statement,rank:normal}]}}' ), + 'e' = array( 'claims' = array( + 'P56' = array( + 'mainsnak' = array( + 'snaktype' = 'value', 'property' = 'P56', + 'datavalue' = array( + 'value' = 'imastring56', + 'type' = 'string' ) ), + 'type' = 'statement', + 'rank' = 'normal' ), + array( + 'mainsnak' = array( +
[MediaWiki-commits] [Gerrit] Allow editing of claims in property groups - change (mediawiki...Wikibase)
Addshore has uploaded a new change for review. https://gerrit.wikimedia.org/r/84962 Change subject: Allow editing of claims in property groups .. Allow editing of claims in property groups This allows output from getentites to be copied directly into editentity. Editentity now accepts both an array of claims and an array of claims grouped by property id Change-Id: I1c19bf28d2df822f082a7c9625e6f8bfd848950d --- M repo/includes/api/EditEntity.php M repo/tests/phpunit/includes/api/EditEntityTest.php 2 files changed, 46 insertions(+), 5 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/62/84962/1 diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php index cb48597..039052f 100644 --- a/repo/includes/api/EditEntity.php +++ b/repo/includes/api/EditEntity.php @@ -382,12 +382,22 @@ if ( !is_array( $claims ) ) { $this-dieUsage( List of claims must be an array, 'not-recognized-array' ); } + $changeOps = array(); - //todo allow claims to be passed grouped by property rather than just an array of claims - $removeChangeops = $this-getRemoveClaimsChangeOps( $claims, $guidGenerator ); - $modifyChangeOps = $this-getModifyClaimsChangeOps( $claims, $guidGenerator ); + //check if the array is associative or in arrays by property + if( array_keys( $claims ) !== range( 0, count( $claims ) - 1 ) ){ + foreach( $claims as $subClaims ){ + $changeOps = array_merge( $changeOps, + $this-getRemoveClaimsChangeOps( $subClaims, $guidGenerator ), + $this-getModifyClaimsChangeOps( $subClaims, $guidGenerator ) ); + } + } else { + $changeOps = array_merge( $changeOps, + $this-getRemoveClaimsChangeOps( $claims, $guidGenerator ), + $this-getModifyClaimsChangeOps( $claims, $guidGenerator ) ); + } - return array_merge( $removeChangeops, $modifyChangeOps ); + return $changeOps; } /** diff --git a/repo/tests/phpunit/includes/api/EditEntityTest.php b/repo/tests/phpunit/includes/api/EditEntityTest.php index d08e354..54628a4 100644 --- a/repo/tests/phpunit/includes/api/EditEntityTest.php +++ b/repo/tests/phpunit/includes/api/EditEntityTest.php @@ -41,13 +41,20 @@ parent::setup(); $prop56 = PropertyId::newFromNumber( 56 ); + $prop72 = PropertyId::newFromNumber( 72 ); if( !isset( self::$hasSetup ) ){ $this-initTestEntities( array( 'Berlin' ) ); + $prop = PropertyContent::newEmpty(); $prop-getEntity()-setId( $prop56 ); $prop-getEntity()-setDataTypeId( 'string' ); - $prop-save( 'EditEntityTest' ); + $prop-save( 'EditEntityTestP56' ); + + $prop = PropertyContent::newEmpty(); + $prop-getEntity()-setId( $prop72 ); + $prop-getEntity()-setDataTypeId( 'string' ); + $prop-save( 'EditEntityTestP72' ); } self::$hasSetup = true; } @@ -183,6 +190,30 @@ ) ) ) ), + + array( //15 clear and add multiple claims within property groups + 'p' = array( 'clear' = '', + 'data' = '{claims:{P56:[{mainsnak:{snaktype:value,property:P56,datavalue:{value:imastring56,type:string}},type:statement,rank:normal}],'. + 'P72:[{mainsnak:{snaktype:value,property:P72,datavalue:{value:imastring72,type:string}},type:statement,rank:normal}]}}' ), + 'e' = array( 'claims' = array( + 'P56' = array( + 'mainsnak' = array( + 'snaktype' = 'value', 'property' = 'P56', + 'datavalue' = array( + 'value' = 'imastring56', + 'type' = 'string' ) ), + 'type' = 'statement', + 'rank' = 'normal' ), + array( + 'mainsnak' =