Addshore has uploaded a new change for review.

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


Change subject: Accept both types of lists when deserializing
......................................................................

Accept both types of lists when deserializing

Change-Id: Ieffaaf77c99e9672f1f910c87480eec256d3f3b2
---
M lib/includes/serializers/ClaimSerializer.php
M lib/includes/serializers/ClaimsSerializer.php
M lib/includes/serializers/ReferenceSerializer.php
M lib/includes/serializers/SerializerObject.php
4 files changed, 28 insertions(+), 4 deletions(-)


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

diff --git a/lib/includes/serializers/ClaimSerializer.php 
b/lib/includes/serializers/ClaimSerializer.php
index d9a6e83..ed53e9a 100644
--- a/lib/includes/serializers/ClaimSerializer.php
+++ b/lib/includes/serializers/ClaimSerializer.php
@@ -259,8 +259,13 @@
                                }
                        }
 
-                       $snaksUnserializer = new ByPropertyListUnserializer( 
$snakUnserializer );
-                       return new SnakList( 
$snaksUnserializer->newFromSerialization( $sortedQualifiers ) );
+                       if( $this->isAssociative( $sortedQualifiers ) ){
+                               $unserializer = new ByPropertyListUnserializer( 
$snakUnserializer );
+                       } else {
+                               $unserializer = new ListUnserializer( 
$snakUnserializer );
+                       }
+
+                       return new SnakList( 
$unserializer->newFromSerialization( $sortedQualifiers ) );
                }
        }
 
diff --git a/lib/includes/serializers/ClaimsSerializer.php 
b/lib/includes/serializers/ClaimsSerializer.php
index 617cc08..5145613 100644
--- a/lib/includes/serializers/ClaimsSerializer.php
+++ b/lib/includes/serializers/ClaimsSerializer.php
@@ -59,7 +59,12 @@
         */
        public function newFromSerialization( array $serialization ) {
                $claimSerializer = new ClaimSerializer( $this->options );
-               $unserializer = new ByPropertyListUnserializer( 
$claimSerializer );
+
+               if( $this->isAssociative( $serialization ) ){
+                       $unserializer = new ByPropertyListUnserializer( 
$claimSerializer );
+               } else {
+                       $unserializer = new ListUnserializer( $claimSerializer 
);
+               }
 
                return new Claims( $unserializer->newFromSerialization( 
$serialization ) );
        }
diff --git a/lib/includes/serializers/ReferenceSerializer.php 
b/lib/includes/serializers/ReferenceSerializer.php
index f5da79f..1d8eb74 100644
--- a/lib/includes/serializers/ReferenceSerializer.php
+++ b/lib/includes/serializers/ReferenceSerializer.php
@@ -107,7 +107,12 @@
                }
 
                $snakUnserializer = new SnakSerializer( $this->options );
-               $snaksUnserializer = new ByPropertyListUnserializer( 
$snakUnserializer );
+
+               if( $this->isAssociative( $sortedSnaks ) ){
+                       $snaksUnserializer = new ByPropertyListUnserializer( 
$snakUnserializer );
+               } else {
+                       $snaksUnserializer = new ListUnserializer( 
$snakUnserializer );
+               }
 
                $snaks = $snaksUnserializer->newFromSerialization( $sortedSnaks 
);
 
diff --git a/lib/includes/serializers/SerializerObject.php 
b/lib/includes/serializers/SerializerObject.php
index bf79545..5dcd16a 100644
--- a/lib/includes/serializers/SerializerObject.php
+++ b/lib/includes/serializers/SerializerObject.php
@@ -76,4 +76,13 @@
                return $this->options;
        }
 
+       /**
+        * @since 0.5
+        * @param array $arr
+        * @return bool Is the array an
+        */
+       protected final function isAssociative( $arr ) {
+               return array_keys( $arr ) !== range( 0, count( $arr ) - 1 );
+       }
+
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ieffaaf77c99e9672f1f910c87480eec256d3f3b2
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