Gergő Tisza has uploaded a new change for review.

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

Change subject: Convert booleanish values to real booleans
......................................................................

Convert booleanish values to real booleans

Bug: T86726
Change-Id: I79ce6004e023c2ca552e7a43858c397aaeb5495e
---
M TemplateParser.php
M tests/data/File_Dala_Kyrka.JPG.php
M tests/data/File_Pentacle_3.svg.php
M tests/data/File_Sunrise_over_fishing_boats_in_Kerala.jpg.php
M tests/phpunit/HookHandlerTest.php
M tests/phpunit/TemplateParserTest.php
6 files changed, 47 insertions(+), 9 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CommonsMetadata 
refs/changes/41/282141/1

diff --git a/TemplateParser.php b/TemplateParser.php
index 4a2e1fc..016b480 100644
--- a/TemplateParser.php
+++ b/TemplateParser.php
@@ -33,6 +33,13 @@
        );
 
        /**
+        * Fields which should be converted into boolean
+        */
+       protected static $booleanLicenseFields = array(
+               'AttributionRequired', 'NonFree',
+       );
+
+       /**
         * HTML element class/id => metadata field name mapping for information 
template data.
         * @var array
         */
@@ -329,8 +336,19 @@
                $data = array();
                foreach ( $domNavigator->findElementsWithClass( '*', 
'licensetpl' ) as $licenseNode ) {
                        $licenseData = $this->parseLicenseNode( $domNavigator, 
$licenseNode );
+                       foreach ( $licenseData as $field => $value ) {
+                               if ( in_array( $field, 
self::$booleanLicenseFields, true ) ) {
+                                       if ( self::parseBoolean( $value ) === 
false ) {
+                                               unset( $licenseData[$field] );
+                                       } else {
+                                               // can't set proper booleans 
here, the API would
+                                               // mangle them when 
jsonformat=2 is not used
+                                               $licenseData[$field] = '1';
+                                       }
+                               }
+                       }
                        if ( isset( $licenseData['UsageTerms'] ) ) {
-                               $licenseData['Copyrighted'] = ( 
$licenseData['UsageTerms'] === 'Public domain' ) ? 'False' : 'True';
+                               $licenseData['Copyrighted'] = ( 
$licenseData['UsageTerms'] === 'Public domain' ) ? '0' : '1';
                        }
                        $data[] = $licenseData;
                }
@@ -529,4 +547,24 @@
                }
                return $transposedData;
        }
+
+       /**
+        * Turn "boolean" metadata values into actual booleans
+        * @param string $value
+        * @return boolean|null
+        */
+       protected function parseBoolean( $value ) {
+               switch ( strtolower( trim( $value ) ) ) {
+                       case '1':
+                       case 'yes':
+                       case 'true':
+                               return true;
+                       case '0':
+                       case 'no':
+                       case 'false':
+                               return false;
+                       default:
+                               return null;
+               }
+       }
 }
diff --git a/tests/data/File_Dala_Kyrka.JPG.php 
b/tests/data/File_Dala_Kyrka.JPG.php
index 5dcd704..284b6f0 100644
--- a/tests/data/File_Dala_Kyrka.JPG.php
+++ b/tests/data/File_Dala_Kyrka.JPG.php
@@ -47,7 +47,7 @@
                ),
        'Copyrighted' =>
                array (
-                       'value' => 'True',
+                       'value' => '1',
                        'source' => 'commons-desc-page',
                ),
 );
diff --git a/tests/data/File_Pentacle_3.svg.php 
b/tests/data/File_Pentacle_3.svg.php
index eb3386f..44a5cb3 100644
--- a/tests/data/File_Pentacle_3.svg.php
+++ b/tests/data/File_Pentacle_3.svg.php
@@ -20,7 +20,7 @@
                ),
        'Copyrighted' =>
                array (
-                       'value' => 'True',
+                       'value' => '1',
                        'source' => 'commons-desc-page',
                ),
        'License' =>
diff --git a/tests/data/File_Sunrise_over_fishing_boats_in_Kerala.jpg.php 
b/tests/data/File_Sunrise_over_fishing_boats_in_Kerala.jpg.php
index 65d3232..10d8ce7 100644
--- a/tests/data/File_Sunrise_over_fishing_boats_in_Kerala.jpg.php
+++ b/tests/data/File_Sunrise_over_fishing_boats_in_Kerala.jpg.php
@@ -48,7 +48,7 @@
                ),
        'Copyrighted' =>
                array (
-                       'value' => 'True',
+                       'value' => '1',
                        'source' => 'commons-desc-page',
                ),
 );
diff --git a/tests/phpunit/HookHandlerTest.php 
b/tests/phpunit/HookHandlerTest.php
index 3ec0e9b..2d16a31 100644
--- a/tests/phpunit/HookHandlerTest.php
+++ b/tests/phpunit/HookHandlerTest.php
@@ -94,7 +94,7 @@
                $expectedMetadata = $this->parserTestHelper->getMetadata( 
$testName );
                foreach ( $expectedMetadata as $key => $val ) {
                        $this->assertArrayHasKey( $key, $actualMetadata, "Field 
$key missing from metadata" );
-                       $this->assertEquals( $expectedMetadata[$key], 
$actualMetadata[$key], "Value for field $key does not match" );
+                       $this->assertSame( $expectedMetadata[$key], 
$actualMetadata[$key], "Value for field $key does not match" );
                }
        }
 
diff --git a/tests/phpunit/TemplateParserTest.php 
b/tests/phpunit/TemplateParserTest.php
index fcb57ad..cc2c805 100644
--- a/tests/phpunit/TemplateParserTest.php
+++ b/tests/phpunit/TemplateParserTest.php
@@ -236,7 +236,7 @@
                // long name is called UsageTerms - bug 57847
                $this->assertFieldEquals( 'UsageTerms', 'Creative Commons 
Attribution-Share Alike 3.0', $data, TemplateParser::LICENSES_KEY );
                $this->assertFieldEquals( 'LicenseUrl', 
'http://creativecommons.org/licenses/by-sa/3.0', $data, 
TemplateParser::LICENSES_KEY );
-               $this->assertFieldEquals( 'Copyrighted', 'True', $data, 
TemplateParser::LICENSES_KEY );
+               $this->assertFieldEquals( 'Copyrighted', '1', $data, 
TemplateParser::LICENSES_KEY );
        }
 
        public function testMultiLicense() {
@@ -254,9 +254,9 @@
                $this->assertFieldEquals( 'LicenseUrl', 
'http://creativecommons.org/licenses/by-sa/3.0/', $data, 
TemplateParser::LICENSES_KEY, 1 );
                $this->assertFieldEquals( 'LicenseUrl', 
'http://creativecommons.org/licenses/by-sa/2.5', $data, 
TemplateParser::LICENSES_KEY, 2 );
 
-               $this->assertFieldEquals( 'Copyrighted', 'True', $data, 
TemplateParser::LICENSES_KEY, 0 );
-               $this->assertFieldEquals( 'Copyrighted', 'True', $data, 
TemplateParser::LICENSES_KEY, 1 );
-               $this->assertFieldEquals( 'Copyrighted', 'True', $data, 
TemplateParser::LICENSES_KEY, 2 );
+               $this->assertFieldEquals( 'Copyrighted', '1', $data, 
TemplateParser::LICENSES_KEY, 0 );
+               $this->assertFieldEquals( 'Copyrighted', '1', $data, 
TemplateParser::LICENSES_KEY, 1 );
+               $this->assertFieldEquals( 'Copyrighted', '1', $data, 
TemplateParser::LICENSES_KEY, 2 );
        }
 
        public function testLicenseTemplateInsideInformationTemplate() {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I79ce6004e023c2ca552e7a43858c397aaeb5495e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CommonsMetadata
Gerrit-Branch: master
Gerrit-Owner: GergÅ‘ Tisza <[email protected]>

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

Reply via email to