Addshore has uploaded a new change for review. https://gerrit.wikimedia.org/r/222602
Change subject: Use DM Serializetion in RB for labels & Descs ...................................................................... Use DM Serializetion in RB for labels & Descs Change-Id: Iabe3a0df79f88c56d465629f84f6c94e2c62b1c3 --- M repo/includes/api/EditEntity.php M repo/includes/api/ResultBuilder.php M repo/includes/api/SetDescription.php M repo/includes/api/SetLabel.php M repo/tests/phpunit/includes/api/ResultBuilderTest.php 5 files changed, 145 insertions(+), 20 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/02/222602/4 diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php index 8f730ff..ca9557a 100644 --- a/repo/includes/api/EditEntity.php +++ b/repo/includes/api/EditEntity.php @@ -540,8 +540,8 @@ if ( $entity instanceof FingerprintProvider ) { $fingerprint = $entity->getFingerprint(); - $builder->addLabels( $fingerprint->getLabels()->toTextArray(), 'entity' ); - $builder->addDescriptions( $fingerprint->getDescriptions()->toTextArray(), 'entity' ); + $builder->addLabels( $fingerprint->getLabels(), 'entity' ); + $builder->addDescriptions( $fingerprint->getDescriptions(), 'entity' ); $builder->addAliases( $fingerprint->getAliasGroups()->toTextArray(), 'entity' ); } diff --git a/repo/includes/api/ResultBuilder.php b/repo/includes/api/ResultBuilder.php index 7ccfb67..6048652 100644 --- a/repo/includes/api/ResultBuilder.php +++ b/repo/includes/api/ResultBuilder.php @@ -3,6 +3,7 @@ namespace Wikibase\Api; use ApiResult; +use DataValues\Serializers\DataValueSerializer; use InvalidArgumentException; use Revision; use Status; @@ -11,6 +12,8 @@ use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Reference; use Wikibase\DataModel\SerializerFactory; +use Wikibase\DataModel\Term\Term; +use Wikibase\DataModel\Term\TermList; use Wikibase\EntityRevision; use Wikibase\Lib\Serializers\EntitySerializer; use Wikibase\Lib\Serializers\SerializationOptions; @@ -369,14 +372,23 @@ * * @since 0.5 * - * @param array $labels the labels to set in the result + * @param TermList $labels the labels to insert in the result * @param array|string $path where the data is located */ - public function addLabels( array $labels, $path ) { - $labelSerializer = $this->libSerializerFactory->newLabelSerializer( $this->getOptions() ); + public function addLabels( TermList $labels, $path ) { + $this->addTermList( $labels, 'labels', 'label', $path ); + } - $values = $labelSerializer->getSerialized( $labels ); - $this->setList( $path, 'labels', $values, 'label' ); + /** + * Adds fake serialization to show a label has been removed + * + * @since 0.5 + * + * @param string $language + * @param array|string $path where the data is located + */ + public function addRemovedLabel( $language, $path ) { + $this->addRemovedTerm( $language, 'labels', 'label', $path ); } /** @@ -384,14 +396,57 @@ * * @since 0.5 * - * @param array $descriptions the descriptions to insert in the result + * @param TermList $descriptions the descriptions to insert in the result * @param array|string $path where the data is located */ - public function addDescriptions( array $descriptions, $path ) { - $descriptionSerializer = $this->libSerializerFactory->newDescriptionSerializer( $this->getOptions() ); + public function addDescriptions( TermList $descriptions, $path ) { + $this->addTermList( $descriptions, 'descriptions', 'description', $path ); + } - $values = $descriptionSerializer->getSerialized( $descriptions ); - $this->setList( $path, 'descriptions', $values, 'description' ); + /** + * Adds fake serialization to show a label has been removed + * + * @since 0.5 + * + * @param string $language + * @param array|string $path where the data is located + */ + public function addRemovedDescription( $language, $path ) { + $this->addRemovedTerm( $language, 'descriptions', 'description', $path ); + } + + /** + * Get serialized TermList and add it to the result + * + * @since 0.5 + * + * @param TermList $termList + * @param string $name + * @param string $tag + * @param array|string $path where the data is located + */ + private function addTermList( TermList $termList, $name, $tag, $path ) { + $serializer = $this->serializerFactory->newTermListSerializer(); + $value = $serializer->serialize( $termList ); + $this->setList( $path, $name, $value, $tag ); + } + + /** + * Adds fake serialization to show a term has been removed + * + * @since 0.5 + * + * @param string $language + * @param array|string $path where the data is located + */ + private function addRemovedTerm( $language, $name, $tag, $path ) { + $value = array( + $language => array( + 'language' => $language, + 'removed' => '', + ) + ); + $this->setList( $path, $name, $value, $tag ); } /** diff --git a/repo/includes/api/SetDescription.php b/repo/includes/api/SetDescription.php index f20429a..50b0929 100644 --- a/repo/includes/api/SetDescription.php +++ b/repo/includes/api/SetDescription.php @@ -48,9 +48,13 @@ $changeOp = $this->getChangeOp( $params ); $this->applyChangeOp( $changeOp, $entity, $summary ); - $descriptions = array( $language => ( $entity->getDescription( $language ) !== false ) ? $entity->getDescription( $language ) : "" ); - - $this->getResultBuilder()->addDescriptions( $descriptions, 'entity' ); + $resultBuilder = $this->getResultBuilder(); + if ( $entity->getFingerprint()->hasDescription( $language ) ) { + $termList = $entity->getFingerprint()->getDescriptions()->getWithLanguages( array( $language ) ); + $resultBuilder->addDescriptions( $termList, 'entity' ); + } else { + $this->getResultBuilder()->addRemovedDescription( $language, 'entity' ); + } return $summary; } diff --git a/repo/includes/api/SetLabel.php b/repo/includes/api/SetLabel.php index 56e5736..f438416 100644 --- a/repo/includes/api/SetLabel.php +++ b/repo/includes/api/SetLabel.php @@ -48,9 +48,13 @@ $changeOp = $this->getChangeOp( $params ); $this->applyChangeOp( $changeOp, $entity, $summary ); - $labels = array( $language => ( $entity->getLabel( $language ) !== false ) ? $entity->getLabel( $language ) : "" ); - - $this->getResultBuilder()->addLabels( $labels, 'entity' ); + $resultBuilder = $this->getResultBuilder(); + if ( $entity->getFingerprint()->hasLabel( $language ) ) { + $termList = $entity->getFingerprint()->getLabels()->getWithLanguages( array( $language ) ); + $resultBuilder->addLabels( $termList, 'entity' ); + } else { + $this->getResultBuilder()->addRemovedLabel( $language, 'entity' ); + } return $summary; } diff --git a/repo/tests/phpunit/includes/api/ResultBuilderTest.php b/repo/tests/phpunit/includes/api/ResultBuilderTest.php index 2b279ec..79f37ac 100644 --- a/repo/tests/phpunit/includes/api/ResultBuilderTest.php +++ b/repo/tests/phpunit/includes/api/ResultBuilderTest.php @@ -17,6 +17,8 @@ use Wikibase\DataModel\Snak\PropertyValueSnak; use Wikibase\DataModel\Snak\SnakList; use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Term\Term; +use Wikibase\DataModel\Term\TermList; use Wikibase\EntityRevision; use Wikibase\Lib\Serializers\SerializationOptions; use Wikibase\Lib\Serializers\LibSerializerFactory; @@ -451,7 +453,10 @@ public function testAddLabels() { $result = $this->getDefaultResult(); - $labels = array( 'en' => 'foo', 'de' => 'bar' ); + $labels = new TermList( array( + new Term( 'en', 'foo' ), + new Term( 'de', 'bar' ), + ) ); $path = array( 'entities', 'Q1' ); $expected = array( 'entities' => array( @@ -481,9 +486,39 @@ $this->assertEquals( $expected, $data ); } + public function testAddRemovedLabel() { + $result = $this->getDefaultResult(); + $path = array( 'entities', 'Q1' ); + $expected = array( + 'entities' => array( + 'Q1' => array( + 'labels' => array( + 'en' => array( + 'language' => 'en', + 'removed' => '', + ), + ), + ), + ), + ); + + $resultBuilder = $this->getResultBuilder( $result ); + $resultBuilder->addRemovedLabel( 'en', $path ); + + $data = $result->getResultData( null, array( + 'BC' => array(), + 'Types' => array(), + 'Strip' => 'all', + ) ); + $this->assertEquals( $expected, $data ); + } + public function testAddDescriptions() { $result = $this->getDefaultResult(); - $descriptions = array( 'en' => 'foo', 'de' => 'bar' ); + $descriptions = new TermList( array( + new Term( 'en', 'foo' ), + new Term( 'de', 'bar' ), + ) ); $path = array( 'entities', 'Q1' ); $expected = array( 'entities' => array( @@ -513,6 +548,33 @@ $this->assertEquals( $expected, $data ); } + public function testAddRemovedDescription() { + $result = $this->getDefaultResult(); + $path = array( 'entities', 'Q1' ); + $expected = array( + 'entities' => array( + 'Q1' => array( + 'descriptions' => array( + 'en' => array( + 'language' => 'en', + 'removed' => '', + ), + ), + ), + ), + ); + + $resultBuilder = $this->getResultBuilder( $result ); + $resultBuilder->addRemovedDescription( 'en', $path ); + + $data = $result->getResultData( null, array( + 'BC' => array(), + 'Types' => array(), + 'Strip' => 'all', + ) ); + $this->assertEquals( $expected, $data ); + } + public function testAddAliases() { $result = $this->getDefaultResult(); $aliases = array( 'en' => array( 'boo', 'hoo' ), 'de' => array( 'ham', 'cheese' ) ); -- To view, visit https://gerrit.wikimedia.org/r/222602 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iabe3a0df79f88c56d465629f84f6c94e2c62b1c3 Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits