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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits