Aude has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/343553 )
Change subject: Add MediaInfoChangeOpDeserializer [WIP] ...................................................................... Add MediaInfoChangeOpDeserializer [WIP] needs tests... Change-Id: I59a226de5ec0268ac6aadba59aa1e5080f6e5571 --- M WikibaseMediaInfo.entitytypes.php A src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php 2 files changed, 84 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseMediaInfo refs/changes/53/343553/1 diff --git a/WikibaseMediaInfo.entitytypes.php b/WikibaseMediaInfo.entitytypes.php index b162083..6130d62 100644 --- a/WikibaseMediaInfo.entitytypes.php +++ b/WikibaseMediaInfo.entitytypes.php @@ -19,6 +19,7 @@ use Wikibase\DataModel\SerializerFactory; use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup; use Wikibase\LanguageFallbackChain; +use Wikibase\MediaInfo\ChangeOp\Deserialization\MediaInfoChangeOpDeserializer; use Wikibase\MediaInfo\Content\MediaInfoContent; use Wikibase\MediaInfo\Content\MediaInfoHandler; use Wikibase\MediaInfo\Content\MissingMediaInfoHandler; @@ -119,5 +120,10 @@ // Identifier of a resource loader module that, when `require`d, returns a function // returning a deserializer 'js-deserializer-factory-function' => 'wikibase.mediainfo.getDeserializer', + 'changeop-deserializer-callback' => function() { + return new MediaInfoChangeOpDeserializer( + WikibaseRepo::getDefaultInstance()->getChangeOpDeserializerFactory() + ); + }, ] ]; diff --git a/src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php b/src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php new file mode 100644 index 0000000..10c8070 --- /dev/null +++ b/src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php @@ -0,0 +1,78 @@ +<?php + +namespace Wikibase\MediaInfo\ChangeOp\Deserialization; + +use Wikibase\ChangeOp\ChangeOp; +use Wikibase\ChangeOp\ChangeOps; +use Wikibase\Repo\ChangeOp\ChangeOpDeserializer; +use Wikibase\Repo\ChangeOp\Deserialization\ChangeOpDeserializerFactory; + +/** + * Constructs ChangeOp objects for MediaInfo change requests + * + * @license GPL-2.0+ + */ +class MediaInfoChangeOpDeserializer implements ChangeOpDeserializer { + + /** + * @var ChangeOpDeserializerFactory + */ + private $factory; + + public function __construct( ChangeOpDeserializerFactory $factory ) { + $this->factory = $factory; + } + + /** + * @see ChangeOpDeserializer::createEntityChangeOp + * + * @param array[] $changeRequest + * + * @return ChangeOp + * @throws ChangeOpDeserializationException + */ + public function createEntityChangeOp( array $changeRequest ) { + $changeOps = new ChangeOps(); + + if ( array_key_exists( 'labels', $changeRequest ) ) { + $changeOps->add( + $this->factory->getLabelsChangeOpDeserializer()->createEntityChangeOp( + $changeRequest + ) + ); + } + + if ( array_key_exists( 'descriptions', $changeRequest ) ) { + $changeOps->add( + $this->factory->getDescriptionsChangeOpDeserializer()->createEntityChangeOp( + $changeRequest + ) + ); + } + + if ( array_key_exists( 'aliases', $changeRequest ) ) { + throw new ChangeOpDeserializationException( + 'MediaInfo cannot have aliases', + 'not-supported' + ); + } + + if ( array_key_exists( 'claims', $changeRequest ) ) { + $changeOps->add( + $this->factory->getClaimsChangeOpDeserializer()->createEntityChangeOp( + $changeRequest + ) + ); + } + + if ( array_key_exists( 'sitelinks', $changeRequest ) ) { + throw new ChangeOpDeserializationException( + 'MediaInfo cannot have sitelinks', + 'not-supported' + ); + } + + return $changeOps; + } + +} -- To view, visit https://gerrit.wikimedia.org/r/343553 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I59a226de5ec0268ac6aadba59aa1e5080f6e5571 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikibaseMediaInfo Gerrit-Branch: master Gerrit-Owner: Aude <aude.w...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits