Gergő Tisza has uploaded a new change for review.
https://gerrit.wikimedia.org/r/266196
Change subject: Weight images by copyright status
......................................................................
Weight images by copyright status
Bug: T124225
Change-Id: I21111ecbc80ded864806a2a93002f3254c3c68a9
---
M PageImages.php
M includes/PageImages.php
M tests/phpunit/PageImagesTest.php
3 files changed, 54 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/PageImages
refs/changes/96/266196/1
diff --git a/PageImages.php b/PageImages.php
index 81e355c..80d13f3 100644
--- a/PageImages.php
+++ b/PageImages.php
@@ -63,6 +63,9 @@
30 => 0,
31 => -100,
),
+ 'rights' => array(
+ 'nonfree' => -100, // don't show nonfree images
+ ),
);
$wgPageImagesBlacklist = array(
diff --git a/includes/PageImages.php b/includes/PageImages.php
index b986fd8..008e4cb 100644
--- a/includes/PageImages.php
+++ b/includes/PageImages.php
@@ -333,6 +333,8 @@
private static function getScore( array $image, $position ) {
global $wgPageImagesScores;
+ $image += self::getMetadata( wfFindFile( $image['filename'] ) );
+
if ( isset( $image['handler'] ) ) {
// Standalone image
$score = self::scoreFromTable(
$image['handler']['width'], $wgPageImagesScores['width'] );
@@ -348,6 +350,10 @@
$ratio = intval( self::getRatio( $image ) * 10 );
$score += self::scoreFromTable( $ratio,
$wgPageImagesScores['ratio'] );
+ if ( isset( $image['rights'] ) && isset(
$wgPageImagesScores['rights'][$image['rights']] ) ) {
+ $score +=
$wgPageImagesScores['rights'][$image['rights']];
+ }
+
$blacklist = self::getBlacklist();
if ( isset( $blacklist[$image['filename']] ) ) {
$score = -1000;
@@ -357,6 +363,28 @@
}
/**
+ * Return some file metadata (only what's relevant to page image
scores).
+ * @param File $file
+ * @return array
+ */
+ private static function getMetadata( File $file ) {
+ $format = new FormatMetadata;
+ $context = new DerivativeContext( $format->getContext() );
+ $format->setSingleLanguage( true ); // we don't care and it's
slightly faster
+ $context->setLanguage( 'en' ); // we don't care so avoid
splitting the cache
+ $format->setContext( $context );
+ $extmetadata = $format->fetchExtendedMetadata( $file );
+ $processedMetadata = array();
+
+ // process copyright metadata from CommonsMetadata, if present
+ if ( !empty( $extmetadata['NonFree']['value'] ) ) { // not '0'
or unset
+ $processedMetadata['rights'] = 'nonfree';
+ }
+
+ return $processedMetadata;
+ }
+
+ /**
* Returns width/height ratio of an image as displayed or 0 is not
available
*
* @param array $image
diff --git a/tests/phpunit/PageImagesTest.php b/tests/phpunit/PageImagesTest.php
index 6efb247..3f3cfc3 100644
--- a/tests/phpunit/PageImagesTest.php
+++ b/tests/phpunit/PageImagesTest.php
@@ -3,6 +3,7 @@
namespace PageImages\Tests;
use MediaWikiTestCase;
+use TestingAccessWrapper;
use PageImages;
use ParserOutput;
use Title;
@@ -52,4 +53,26 @@
$this->assertSame( 'A.jpg',
$linksUpdate->mProperties[PageImages::PROP_NAME] );
}
+ /**
+ * @dataProvider provideGetScore
+ */
+ public function testGetScore( $image, $position, $expectedScore ) {
+ $pageImages = TestingAccessWrapper::newFromClass( 'PageImages'
);
+ $score = $pageImages->getScore( $image, $position );
+ $this->assertSame( $expectedScore, $score );
+ }
+
+ public function provideGetScore() {
+ $image = array(
+ 'filename' => 'Example.png',
+ 'fullwidth' => 100,
+ 'fullheight' => 100,
+ );
+ return array(
+ array( $image, 10, 5 ),
+ array( $image, 0, 13 ),
+ array( $image + array( 'rights' => 'nonfree' ), 10, -95
),
+ );
+ }
+
}
--
To view, visit https://gerrit.wikimedia.org/r/266196
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I21111ecbc80ded864806a2a93002f3254c3c68a9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/PageImages
Gerrit-Branch: master
Gerrit-Owner: Gergő Tisza <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits