Adrian Heine has uploaded a new change for review.

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

Change subject: [WIP] Use SiteLinkTargetProvider in SiteLinksView
......................................................................

[WIP] Use SiteLinkTargetProvider in SiteLinksView

This binds WikibaseView against Repo, so bad.

Change-Id: I0a6c1199d2345b7b864caedc76deee13f66d8c56
---
M repo/includes/WikibaseRepo.php
M view/src/SiteLinksView.php
M view/src/ViewFactory.php
M view/tests/phpunit/SiteLinksViewTest.php
M view/tests/phpunit/ViewFactoryTest.php
5 files changed, 60 insertions(+), 95 deletions(-)


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

diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 84fb90a..60f6505 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -1574,14 +1574,13 @@
                        new EntityIdLabelFormatterFactory(),
                        $this->getHtmlSnakFormatterFactory(),
                        $statementGrouperBuilder->getStatementGrouper(),
-                       $this->getSiteStore(),
                        $this->getDataTypeFactory(),
                        TemplateFactory::getDefaultInstance(),
                        new LanguageNameLookup( $wgLang->getCode() ),
                        new MediaWikiLanguageDirectionalityLookup(),
                        new MediaWikiNumberLocalizer( $wgLang ),
                        $this->settings->getSetting( 'siteLinkGroups' ),
-                       $this->settings->getSetting( 'specialSiteLinkGroups' ),
+                       $this->getSiteLinkTargetProvider(),
                        $this->settings->getSetting( 'badgeItems' ),
                        new MediaWikiLocalizedTextProvider( $wgLang->getCode() )
                );
diff --git a/view/src/SiteLinksView.php b/view/src/SiteLinksView.php
index cdc1497..445bdd7 100644
--- a/view/src/SiteLinksView.php
+++ b/view/src/SiteLinksView.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Services\EntityId\EntityIdFormatter;
 use Wikibase\DataModel\SiteLink;
 use Wikibase\Lib\LanguageNameLookup;
+use Wikibase\Repo\SiteLinkTargetProvider;
 use Wikibase\View\Template\TemplateFactory;
 
 /**
@@ -33,11 +34,6 @@
        private $templateFactory;
 
        /**
-        * @var SiteList
-        */
-       private $sites;
-
-       /**
         * @var EditSectionGenerator
         */
        private $sectionEditLinkGenerator;
@@ -53,43 +49,39 @@
        private $badgeItems;
 
        /**
-        * @var string[]
-        */
-       private $specialSiteLinkGroups;
-
-       /**
         * @var LocalizedTextProvider
         */
        private $textProvider;
 
        /**
+        * @var SiteLinkTargetProvider
+        */
+       private $siteLinkTargetProvider;
+
+       /**
         * @param TemplateFactory $templateFactory
-        * @param SiteList $sites
         * @param EditSectionGenerator $sectionEditLinkGenerator
         * @param EntityIdFormatter $entityIdFormatter A plaintext producing 
EntityIdFormatter
         * @param LanguageNameLookup $languageNameLookup
         * @param string[] $badgeItems
-        * @param string[] $specialSiteLinkGroups
         * @param LocalizedTextProvider $textProvider
         */
        public function __construct(
                TemplateFactory $templateFactory,
-               SiteList $sites,
                EditSectionGenerator $sectionEditLinkGenerator,
                EntityIdFormatter $entityIdFormatter,
                LanguageNameLookup $languageNameLookup,
                array $badgeItems,
-               array $specialSiteLinkGroups,
-               LocalizedTextProvider $textProvider
+               LocalizedTextProvider $textProvider,
+               SiteLinkTargetProvider $siteLinkTargetProvider
        ) {
-               $this->sites = $sites;
                $this->sectionEditLinkGenerator = $sectionEditLinkGenerator;
                $this->badgeItems = $badgeItems;
-               $this->specialSiteLinkGroups = $specialSiteLinkGroups;
                $this->templateFactory = $templateFactory;
                $this->languageNameLookup = $languageNameLookup;
                $this->entityIdFormatter = $entityIdFormatter;
                $this->textProvider = $textProvider;
+               $this->siteLinkTargetProvider = $siteLinkTargetProvider;
        }
 
        /**
@@ -151,8 +143,9 @@
         * @return string
         */
        private function getHtmlForSiteLinkGroup( array $siteLinks, ItemId 
$itemId = null, $group ) {
+               $sitesForGroup = $this->siteLinkTargetProvider->getSiteList( [ 
$group ] );
                $siteLinksForTable = $this->getSiteLinksForTable(
-                       $this->getSitesForGroup( $group ),
+                       $sitesForGroup,
                        $siteLinks
                );
 
@@ -182,33 +175,6 @@
                        
$this->sectionEditLinkGenerator->getSiteLinksEditSection( $itemId ),
                        $count > 1 ? ' mw-collapsible' : ''
                );
-       }
-
-       /**
-        * Get all sites for a given site group, with special handling for the
-        * "special" site group.
-        *
-        * @param string $group
-        *
-        * @return SiteList
-        */
-       private function getSitesForGroup( $group ) {
-               $siteList = new SiteList();
-
-               if ( $group === 'special' ) {
-                       $groups = $this->specialSiteLinkGroups;
-               } else {
-                       $groups = array( $group );
-               }
-
-               foreach ( $groups as $group ) {
-                       $sites = $this->sites->getGroup( $group );
-                       foreach ( $sites as $site ) {
-                               $siteList->setSite( $site );
-                       }
-               }
-
-               return $siteList;
        }
 
        /**
diff --git a/view/src/ViewFactory.php b/view/src/ViewFactory.php
index 9a31799..93469ef 100644
--- a/view/src/ViewFactory.php
+++ b/view/src/ViewFactory.php
@@ -4,13 +4,13 @@
 
 use DataTypes\DataTypeFactory;
 use InvalidArgumentException;
-use SiteStore;
 use ValueFormatters\NumberLocalizer;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
 use Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper;
 use Wikibase\LanguageFallbackChain;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\Lib\SnakFormatter;
+use Wikibase\Repo\SiteLinkTargetProvider;
 use Wikibase\View\LocalizedTextProvider;
 use Wikibase\View\Template\TemplateFactory;
 
@@ -48,11 +48,6 @@
        private $statementGrouper;
 
        /**
-        * @var SiteStore
-        */
-       private $siteStore;
-
-       /**
         * @var DataTypeFactory
         */
        private $dataTypeFactory;
@@ -83,9 +78,9 @@
        private $siteLinkGroups;
 
        /**
-        * @var string[]
+        * @var SiteLinkTargetProvider
         */
-       private $specialSiteLinkGroups;
+       private $siteLinkTargetProvider;
 
        /**
         * @var string[]
@@ -102,14 +97,13 @@
         * @param EntityIdFormatterFactory $plainTextIdFormatterFactory
         * @param HtmlSnakFormatterFactory $htmlSnakFormatterFactory
         * @param StatementGrouper $statementGrouper
-        * @param SiteStore $siteStore
         * @param DataTypeFactory $dataTypeFactory
         * @param TemplateFactory $templateFactory
         * @param LanguageNameLookup $languageNameLookup
         * @param LanguageDirectionalityLookup $languageDirectionalityLookup
         * @param NumberLocalizer $numberLocalizer
         * @param string[] $siteLinkGroups
-        * @param string[] $specialSiteLinkGroups
+        * @param SiteLinkTargetProvider $siteLinkTargetProvider
         * @param string[] $badgeItems
         * @param LocalizedTextProvider $textProvider
         *
@@ -120,14 +114,13 @@
                EntityIdFormatterFactory $plainTextIdFormatterFactory,
                HtmlSnakFormatterFactory $htmlSnakFormatterFactory,
                StatementGrouper $statementGrouper,
-               SiteStore $siteStore,
                DataTypeFactory $dataTypeFactory,
                TemplateFactory $templateFactory,
                LanguageNameLookup $languageNameLookup,
                LanguageDirectionalityLookup $languageDirectionalityLookup,
                NumberLocalizer $numberLocalizer,
                array $siteLinkGroups = array(),
-               array $specialSiteLinkGroups = array(),
+               SiteLinkTargetProvider $siteLinkTargetProvider,
                array $badgeItems = array(),
                LocalizedTextProvider $textProvider
        ) {
@@ -141,14 +134,13 @@
                $this->plainTextIdFormatterFactory = 
$plainTextIdFormatterFactory;
                $this->htmlSnakFormatterFactory = $htmlSnakFormatterFactory;
                $this->statementGrouper = $statementGrouper;
-               $this->siteStore = $siteStore;
                $this->dataTypeFactory = $dataTypeFactory;
                $this->templateFactory = $templateFactory;
                $this->languageNameLookup = $languageNameLookup;
                $this->languageDirectionalityLookup = 
$languageDirectionalityLookup;
                $this->numberLocalizer = $numberLocalizer;
                $this->siteLinkGroups = $siteLinkGroups;
-               $this->specialSiteLinkGroups = $specialSiteLinkGroups;
+               $this->siteLinkTargetProvider = $siteLinkTargetProvider;
                $this->badgeItems = $badgeItems;
                $this->textProvider = $textProvider;
        }
@@ -200,13 +192,12 @@
 
                $siteLinksView = new SiteLinksView(
                        $this->templateFactory,
-                       $this->siteStore->getSites(),
                        $editSectionGenerator,
                        
$this->plainTextIdFormatterFactory->getEntityIdFormatter( 
$labelDescriptionLookup ),
                        $this->languageNameLookup,
                        $this->badgeItems,
-                       $this->specialSiteLinkGroups,
-                       $this->textProvider
+                       $this->textProvider,
+                       $this->siteLinkTargetProvider
                );
 
                return new ItemView(
diff --git a/view/tests/phpunit/SiteLinksViewTest.php 
b/view/tests/phpunit/SiteLinksViewTest.php
index 9bcc17c..73a16c1 100644
--- a/view/tests/phpunit/SiteLinksViewTest.php
+++ b/view/tests/phpunit/SiteLinksViewTest.php
@@ -10,6 +10,7 @@
 use Wikibase\DataModel\Services\EntityId\EntityIdFormatter;
 use Wikibase\DataModel\SiteLink;
 use Wikibase\Lib\LanguageNameLookup;
+use Wikibase\Repo\SiteLinkTargetProvider;
 use Wikibase\View\EditSectionGenerator;
 use Wikibase\View\DummyLocalizedTextProvider;
 use Wikibase\View\SiteLinksView;
@@ -142,9 +143,39 @@
                        ->method( 'getName' )
                        ->will( $this->returnValue( '<LANG>' ) );
 
+               $siteLinkTargetProvider = $this->getMockBuilder( 
SiteLinkTargetProvider::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $siteLinkTargetProvider->expects( $this->any() )
+                       ->method( 'getSiteList' )
+                       ->will( $this->returnCallback( function( $groups ) {
+                               $enWiki = new Site();
+                               $enWiki->setGlobalId( 'enwiki' );
+                               $enWiki->setLinkPath( '#enwiki' );
+                               $enWiki->setLanguageCode( 'en' );
+                               $enWiki->setGroup( 'wikipedia' );
+
+                               $specialWiki = new Site();
+                               $specialWiki->setGlobalId( 'specialwiki' );
+                               $specialWiki->setLinkPath( '#specialwiki' );
+                               $specialWiki->setLanguageCode( 'en' );
+                               $specialWiki->setGroup( 'special group' );
+
+                               $deWiki = new Site();
+                               $deWiki->setGlobalId( 'dewiki' );
+                               $deWiki->setLinkPath( '#dewiki' );
+                               $deWiki->setLanguageCode( 'de' );
+                               $deWiki->setGroup( 'wikipedia' );
+                               if ( $groups[0] === 'special' ) { $groups[0] = 
'special group'; }
+                               return new SiteList( [
+                                       'wikipedia' => [ $enWiki, $deWiki ],
+                                       'special group' => [ $specialWiki ]
+                               ][ $groups[0] ] );
+                       } ) );
+
                return new SiteLinksView(
                        $templateFactory,
-                       $this->newSiteList(),
                        $this->getMock( EditSectionGenerator::class ),
                        $this->newEntityIdFormatter(),
                        $languageNameLookup,
@@ -152,34 +183,9 @@
                                'Q42' => 'wb-badge-featuredarticle',
                                'Q12' => 'wb-badge-goodarticle'
                        ),
-                       array( 'special group' ),
-                       new DummyLocalizedTextProvider( 'lkt' )
+                       new DummyLocalizedTextProvider( 'lkt' ),
+                       $siteLinkTargetProvider
                );
-       }
-
-       /**
-        * @return SiteList
-        */
-       private function newSiteList() {
-               $enWiki = new Site();
-               $enWiki->setGlobalId( 'enwiki' );
-               $enWiki->setLinkPath( '#enwiki' );
-               $enWiki->setLanguageCode( 'en' );
-               $enWiki->setGroup( 'wikipedia' );
-
-               $specialWiki = new Site();
-               $specialWiki->setGlobalId( 'specialwiki' );
-               $specialWiki->setLinkPath( '#specialwiki' );
-               $specialWiki->setLanguageCode( 'en' );
-               $specialWiki->setGroup( 'special group' );
-
-               $deWiki = new Site();
-               $deWiki->setGlobalId( 'dewiki' );
-               $deWiki->setLinkPath( '#dewiki' );
-               $deWiki->setLanguageCode( 'de' );
-               $deWiki->setGroup( 'wikipedia' );
-
-               return new SiteList( array( $enWiki, $specialWiki, $deWiki ) );
        }
 
        /**
diff --git a/view/tests/phpunit/ViewFactoryTest.php 
b/view/tests/phpunit/ViewFactoryTest.php
index 2029e0a..90ef7be 100644
--- a/view/tests/phpunit/ViewFactoryTest.php
+++ b/view/tests/phpunit/ViewFactoryTest.php
@@ -3,7 +3,6 @@
 namespace Wikibase\View\Tests;
 
 use DataTypes\DataTypeFactory;
-use HashSiteStore;
 use InvalidArgumentException;
 use PHPUnit_Framework_TestCase;
 use ValueFormatters\BasicNumberLocalizer;
@@ -13,6 +12,7 @@
 use Wikibase\LanguageFallbackChain;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\Lib\SnakFormatter;
+use Wikibase\Repo\SiteLinkTargetProvider;
 use Wikibase\View\EditSectionGenerator;
 use Wikibase\View\EntityTermsView;
 use Wikibase\View\HtmlSnakFormatterFactory;
@@ -64,19 +64,22 @@
                $languageNameLookup->expects( $this->never() )
                        ->method( 'getName' );
 
+               $siteLinkTargetProvider = $this->getMockBuilder( 
SiteLinkTargetProvider::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
                return new ViewFactory(
                        $htmlFactory ?: $this->getEntityIdFormatterFactory( 
SnakFormatter::FORMAT_HTML ),
                        $plainFactory ?: $this->getEntityIdFormatterFactory( 
SnakFormatter::FORMAT_PLAIN ),
                        $this->getSnakFormatterFactory(),
                        new NullStatementGrouper(),
-                       new HashSiteStore(),
                        new DataTypeFactory( array() ),
                        $templateFactory,
                        $languageNameLookup,
                        $this->getMock( LanguageDirectionalityLookup::class ),
                        new BasicNumberLocalizer(),
                        array(),
-                       array(),
+                       $siteLinkTargetProvider,
                        array(),
                        $this->getMock( LocalizedTextProvider::class )
                );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0a6c1199d2345b7b864caedc76deee13f66d8c56
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <adrian.l...@wikimedia.de>

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

Reply via email to