jenkins-bot has submitted this change and it was merged.

Change subject: Rework standalone PageImagesDataUpdate into a 
ParserOutputDataUpdate
......................................................................


Rework standalone PageImagesDataUpdate into a ParserOutputDataUpdate

This was intentionally left out in I5fba0e4 to avoid merge conflicts.

Bug: T112865
Bug: T114220
Change-Id: Ib6d7f24db21919d313b885a9974cb486b32bb6e7
---
M repo/includes/DataUpdates/PageImagesDataUpdate.php
M repo/includes/EntityParserOutputGenerator.php
M repo/includes/EntityParserOutputGeneratorFactory.php
M repo/includes/WikibaseRepo.php
M repo/tests/phpunit/includes/DataUpdates/PageImagesDataUpdateTest.php
5 files changed, 78 insertions(+), 48 deletions(-)

Approvals:
  Daniel Kinzler: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/repo/includes/DataUpdates/PageImagesDataUpdate.php 
b/repo/includes/DataUpdates/PageImagesDataUpdate.php
index 43f6eb9..944aa53 100644
--- a/repo/includes/DataUpdates/PageImagesDataUpdate.php
+++ b/repo/includes/DataUpdates/PageImagesDataUpdate.php
@@ -3,21 +3,22 @@
 namespace Wikibase\Repo\DataUpdates;
 
 use DataValues\StringValue;
+use ParserOutput;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\Snak;
 use Wikibase\DataModel\Statement\Statement;
-use Wikibase\DataModel\Statement\StatementList;
 
 /**
- * Code to make the PageImages extension aware of pages in the Wikibase 
namespaces.
+ * Code to make the PageImages extension aware of pages in the Wikibase 
namespaces. The algorithm
+ * tries to find the one "best" image on an entity page, also referred to as 
the "lead image".
  *
  * @since 0.5
  *
  * @licence GNU GPL v2+
  * @author Thiemo Mättig
  */
-class PageImagesDataUpdate {
+class PageImagesDataUpdate implements StatementDataUpdate {
 
        /**
         * @var int[] Hash table of image property id strings pointing to 
priorities (smaller numbers
@@ -36,42 +37,29 @@
        private $bestRank;
 
        /**
-        * @var string
+        * @var string|null
         */
-       private $bestFileName;
+       private $bestFileName = null;
 
        /**
         * @param string[] $imagePropertyIds List of image property id strings, 
in order of preference.
         */
        public function __construct( array $imagePropertyIds ) {
-               $this->setPropertyIds( $imagePropertyIds );
+               $this->propertyPriorities = array_flip( array_unique( 
array_values( $imagePropertyIds ) ) );
        }
 
        /**
-        * @param string[] $ids
-        */
-       private function setPropertyIds( array $ids ) {
-               $this->propertyPriorities = array_flip( array_unique( 
array_values( $ids ) ) );
-       }
-
-       /**
-        * @param StatementList $statements
+        * Returns the one "best" image file name found after processing all 
statements.
         *
         * @return string|null The file's page name without the NS_FILE 
namespace, or null if not found.
         */
-       public function getBestImageFileName( StatementList $statements ) {
-               $this->bestProperty = null;
-               $this->bestRank = null;
-               $this->bestFileName = null;
-
-               foreach ( $statements->toArray() as $statement ) {
-                       $this->processStatement( $statement );
-               }
-
+       public function getBestImageFileName() {
                return $this->bestFileName;
        }
 
        /**
+        * @see StatementDataUpdate::processStatement
+        *
         * @param Statement $statement
         */
        public function processStatement( Statement $statement ) {
@@ -192,4 +180,14 @@
                return $rank > $this->bestRank;
        }
 
+       /**
+        * @see ParserOutputDataUpdate::updateParserOutput
+        *
+        * @param ParserOutput $parserOutput
+        */
+       public function updateParserOutput( ParserOutput $parserOutput ) {
+               // This property name is the only "soft dependency" on the 
PageImages extension.
+               $parserOutput->setProperty( 'page_image', $this->bestFileName );
+       }
+
 }
diff --git a/repo/includes/EntityParserOutputGenerator.php 
b/repo/includes/EntityParserOutputGenerator.php
index 87d54e3..ccbd2ce 100644
--- a/repo/includes/EntityParserOutputGenerator.php
+++ b/repo/includes/EntityParserOutputGenerator.php
@@ -11,8 +11,6 @@
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\SiteLink;
 use Wikibase\DataModel\SiteLinkList;
-use Wikibase\DataModel\Statement\StatementList;
-use Wikibase\DataModel\Statement\StatementListProvider;
 use Wikibase\DataModel\Term\FingerprintProvider;
 use Wikibase\Lib\Store\EntityInfo;
 use Wikibase\Lib\Store\EntityInfoBuilderFactory;
@@ -20,10 +18,8 @@
 use Wikibase\Lib\Store\EntityTitleLookup;
 use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookup;
 use Wikibase\Repo\DataUpdates\EntityParserOutputDataUpdater;
-use Wikibase\Repo\DataUpdates\PageImagesDataUpdate;
 use Wikibase\Repo\LinkedData\EntityDataFormatProvider;
 use Wikibase\Repo\View\RepoSpecialPageLinker;
-use Wikibase\Repo\WikibaseRepo;
 use Wikibase\View\EmptyEditSectionGenerator;
 use Wikibase\View\EntityViewFactory;
 use Wikibase\View\Template\TemplateFactory;
@@ -151,11 +147,6 @@
                $configVars = $this->configBuilder->build( $entity );
                $parserOutput->addJsConfigVars( $configVars );
 
-               // FIXME: Rework this to use the visitor infrastructure above!
-               if ( $entity instanceof StatementListProvider ) {
-                       $this->addBestImageToParserOutput( $parserOutput, 
$entity->getStatements() );
-               }
-
                // FIXME: OCP violation - 
https://phabricator.wikimedia.org/T75495
                if ( $entity instanceof Item ) {
                        $this->addBadgesToParserOutput( $parserOutput, 
$entity->getSiteLinkList() );
@@ -190,19 +181,6 @@
                }
 
                return $parserOutput;
-       }
-
-       private function addBestImageToParserOutput( ParserOutput 
$parserOutput, StatementList $statements ) {
-               $repo = WikibaseRepo::getDefaultInstance();
-               // TODO: Inject this setting!
-               $propertyIds = $repo->getSettings()->getSetting( 
'preferredPageImagesProperties' );
-
-               if ( !empty( $propertyIds ) ) {
-                       $dataUpdate = new PageImagesDataUpdate( $propertyIds );
-                       $fileName = $dataUpdate->getBestImageFileName( 
$statements );
-                       // This property name is the only "soft dependency" on 
the PageImages extension.
-                       $parserOutput->setProperty( 'page_image', $fileName );
-               }
        }
 
        /**
diff --git a/repo/includes/EntityParserOutputGeneratorFactory.php 
b/repo/includes/EntityParserOutputGeneratorFactory.php
index 5cf37b6..a096f2b 100644
--- a/repo/includes/EntityParserOutputGeneratorFactory.php
+++ b/repo/includes/EntityParserOutputGeneratorFactory.php
@@ -12,6 +12,7 @@
 use Wikibase\Repo\DataUpdates\ExternalLinksDataUpdate;
 use Wikibase\Repo\DataUpdates\GeoDataDataUpdate;
 use Wikibase\Repo\DataUpdates\ImageLinksDataUpdate;
+use Wikibase\Repo\DataUpdates\PageImagesDataUpdate;
 use Wikibase\Repo\DataUpdates\ParserOutputDataUpdate;
 use Wikibase\Repo\DataUpdates\ReferencedEntitiesDataUpdate;
 use Wikibase\Repo\LinkedData\EntityDataFormatProvider;
@@ -71,6 +72,23 @@
         */
        private $preferredGeoDataProperties;
 
+       /**
+        * @var string[]
+        */
+       private $preferredPageImagesProperties;
+
+       /**
+        * @param EntityViewFactory $entityViewFactory
+        * @param EntityInfoBuilderFactory $entityInfoBuilderFactory
+        * @param EntityTitleLookup $entityTitleLookup
+        * @param LanguageFallbackChainFactory $languageFallbackChainFactory
+        * @param TemplateFactory $templateFactory
+        * @param EntityDataFormatProvider $entityDataFormatProvider
+        * @param PropertyDataTypeLookup $propertyDataTypeLookup
+        * @param EntityIdParser $externalEntityIdParser
+        * @param string[] $preferredGeoDataProperties
+        * @param string[] $preferredPageImagesProperties
+        */
        public function __construct(
                EntityViewFactory $entityViewFactory,
                EntityInfoBuilderFactory $entityInfoBuilderFactory,
@@ -80,7 +98,8 @@
                EntityDataFormatProvider $entityDataFormatProvider,
                PropertyDataTypeLookup $propertyDataTypeLookup,
                EntityIdParser $externalEntityIdParser,
-               array $preferredGeoDataProperties
+               array $preferredGeoDataProperties = array(),
+               array $preferredPageImagesProperties = array()
        ) {
                $this->entityViewFactory = $entityViewFactory;
                $this->entityInfoBuilderFactory = $entityInfoBuilderFactory;
@@ -91,6 +110,7 @@
                $this->propertyDataTypeLookup = $propertyDataTypeLookup;
                $this->externalEntityIdParser = $externalEntityIdParser;
                $this->preferredGeoDataProperties = $preferredGeoDataProperties;
+               $this->preferredPageImagesProperties = 
$preferredPageImagesProperties;
        }
 
        /**
@@ -151,6 +171,10 @@
                        new ImageLinksDataUpdate( $propertyDataTypeMatcher )
                );
 
+               if ( !empty( $this->preferredPageImagesProperties ) ) {
+                       $dataUpdates[] = new PageImagesDataUpdate( 
$this->preferredPageImagesProperties );
+               }
+
                if ( class_exists( 'GeoData' ) ) {
                        $dataUpdates[] = new GeoDataDataUpdate(
                                $propertyDataTypeMatcher,
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 6ddb0cc..52abad4 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -1344,7 +1344,8 @@
                        $entityDataFormatProvider,
                        $this->getPropertyDataTypeLookup(),
                        $this->getLocalEntityUriParser(),
-                       $this->settings->getSetting( 
'preferredGeoDataProperties' )
+                       $this->settings->getSetting( 
'preferredGeoDataProperties' ),
+                       $this->settings->getSetting( 
'preferredPageImagesProperties' )
                );
        }
 
diff --git 
a/repo/tests/phpunit/includes/DataUpdates/PageImagesDataUpdateTest.php 
b/repo/tests/phpunit/includes/DataUpdates/PageImagesDataUpdateTest.php
index 6be288d..f7fbb2c 100644
--- a/repo/tests/phpunit/includes/DataUpdates/PageImagesDataUpdateTest.php
+++ b/repo/tests/phpunit/includes/DataUpdates/PageImagesDataUpdateTest.php
@@ -79,7 +79,36 @@
                $expected
        ) {
                $instance = $this->newInstance( $propertyIds );
-               $this->assertSame( $expected, $instance->getBestImageFileName( 
$statements ) );
+
+               foreach ( $statements as $statement ) {
+                       $instance->processStatement( $statement );
+               }
+
+               $this->assertSame( $expected, $instance->getBestImageFileName() 
);
+       }
+
+       /**
+        * @dataProvider bestImageProvider
+        */
+       public function testUpdateParserOutput(
+               StatementList $statements,
+               array $propertyIds,
+               $expected
+       ) {
+               $parserOutput = $this->getMockBuilder( 'ParserOutput' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $parserOutput->expects( $this->once() )
+                       ->method( 'setProperty' )
+                       ->with( 'page_image', $expected );
+
+               $instance = $this->newInstance( $propertyIds );
+
+               foreach ( $statements as $statement ) {
+                       $instance->processStatement( $statement );
+               }
+
+               $instance->updateParserOutput( $parserOutput );
        }
 
        public function bestImageProvider() {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib6d7f24db21919d313b885a9974cb486b32bb6e7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to