Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/92916


Change subject: Add byPropertyListSerialization Options
......................................................................

Add byPropertyListSerialization Options

Change-Id: I3fdb0b6ed2dfee751316662f9cd91fe9c4421c45
---
M lib/includes/serializers/ClaimSerializer.php
M lib/includes/serializers/ClaimsSerializer.php
M lib/includes/serializers/SerializationOptions.php
3 files changed, 30 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/16/92916/1

diff --git a/lib/includes/serializers/ClaimSerializer.php 
b/lib/includes/serializers/ClaimSerializer.php
index 2a82a08..e855901 100644
--- a/lib/includes/serializers/ClaimSerializer.php
+++ b/lib/includes/serializers/ClaimSerializer.php
@@ -93,10 +93,16 @@
                $serialization['id'] = $claim->getGuid();
 
                $snakSerializer = new SnakSerializer( $this->options );
+
                $serialization['mainsnak'] = $snakSerializer->getSerialized( 
$claim->getMainSnak() );
 
-               $snaksSerializer = new ByPropertyListSerializer( 'qualifiers', 
$snakSerializer, $this->options );
-               $qualifiers = $snaksSerializer->getSerialized( 
$claim->getQualifiers() );
+               if( in_array( 'qualifiers', $this->options->getOption( 
SerializationOptions::OPT_GROUP_BY_PROPERTIES ) ) ){
+                       $listSerializer = new ByPropertyListSerializer( 
'qualifiers', $snakSerializer, $this->options );
+               } else {
+                       $listSerializer = new ListSerializer( 'qualifiers', 
$snakSerializer, $this->options );
+               }
+
+               $qualifiers = $listSerializer->getSerialized( 
$claim->getQualifiers() );
 
                if ( $qualifiers !== array() ) {
                        $serialization['qualifiers'] = $qualifiers;
@@ -119,16 +125,16 @@
 
                        $referenceSerializer = new ReferenceSerializer( 
$this->options );
 
-                       $serialization['references'] = array();
-
-                       foreach ( $claim->getReferences() as $reference ) {
-                               $serialization['references'][] = 
$referenceSerializer->getSerialized( $reference );
+                       if( in_array( 'references', $this->options->getOption( 
SerializationOptions::OPT_GROUP_BY_PROPERTIES ) ) ){
+                               $listSerializer = new ByPropertyListSerializer( 
'references', $referenceSerializer, $this->options );
+                       } else {
+                               $listSerializer = new ListSerializer( 
'references', $referenceSerializer, $this->options );
                        }
 
-                       if ( $serialization['references'] === array() ) {
-                               unset( $serialization['references'] );
-                       }
-                       else {
+                       $references = $listSerializer->getSerialized( 
$claim->getReferences() );
+
+                       if ( $references !== array() ) {
+                               $serialization['references'] = $references;
                                $this->setIndexedTagName( 
$serialization['references'], 'reference' );
                        }
                }
diff --git a/lib/includes/serializers/ClaimsSerializer.php 
b/lib/includes/serializers/ClaimsSerializer.php
index 21fefff..617cc08 100644
--- a/lib/includes/serializers/ClaimsSerializer.php
+++ b/lib/includes/serializers/ClaimsSerializer.php
@@ -36,9 +36,14 @@
                //NOTE: when changing the serialization structure, update 
docs/json.wiki too!
 
                $claimSerializer = new ClaimSerializer( $this->options );
-               $serializer = new ByPropertyListSerializer( 'claim', 
$claimSerializer, $this->options );
 
-               return $serializer->getSerialized( $claims );
+               if( in_array( 'claims', $this->options->getOption( 
SerializationOptions::OPT_GROUP_BY_PROPERTIES ) ) ){
+                       $listSerializer = new ByPropertyListSerializer( 
'claim', $claimSerializer, $this->options );
+               } else {
+                       $listSerializer = new ListSerializer( 'claim', 
$claimSerializer, $this->options );
+               }
+
+               return $listSerializer->getSerialized( $claims );
        }
 
        /**
diff --git a/lib/includes/serializers/SerializationOptions.php 
b/lib/includes/serializers/SerializationOptions.php
index 206a054..5125d6d 100644
--- a/lib/includes/serializers/SerializationOptions.php
+++ b/lib/includes/serializers/SerializationOptions.php
@@ -57,6 +57,12 @@
        const OPT_LANGUAGE_FALLBACK_CHAIN_FACTORY = 
'languageFallbackChainFactory';
 
        /**
+        * @since 0.5
+        * @const key for the groupByProperties option
+        */
+       const OPT_GROUP_BY_PROPERTIES = 'groupByProperties';
+
+       /**
         * @var array
         */
        protected $options = array();
@@ -71,6 +77,7 @@
 
                $this->initOption( self::OPT_ID_KEY_MODE, self::ID_KEYS_UPPER );
                $this->initOption( self::OPT_INDEX_TAGS, false );
+               $this->initOption( self::OPT_GROUP_BY_PROPERTIES, array( 
'claims', 'qualifiers', 'references' ) );
        }
 
        protected function checkKey( $key) {

-- 
To view, visit https://gerrit.wikimedia.org/r/92916
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3fdb0b6ed2dfee751316662f9cd91fe9c4421c45
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to