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