jenkins-bot has submitted this change and it was merged. Change subject: Get label of badge in SiteLinksView ......................................................................
Get label of badge in SiteLinksView Instead of the serialized entity id the label of the badge item is displayed if it is available in the user's current language. Bug: 68183 Change-Id: Iaab6fcd34b3e5831e971158250c1040d3f56de02 --- M repo/includes/ItemView.php M repo/includes/View/SiteLinksView.php M repo/tests/phpunit/includes/View/SiteLinksViewTest.php 3 files changed, 77 insertions(+), 9 deletions(-) Approvals: Hoo man: Looks good to me, approved jenkins-bot: Verified diff --git a/repo/includes/ItemView.php b/repo/includes/ItemView.php index 7c25614..ec4f80d 100644 --- a/repo/includes/ItemView.php +++ b/repo/includes/ItemView.php @@ -74,12 +74,15 @@ * @return string */ public function getHtmlForSiteLinks( Item $item, $editable = true ) { - $groups = WikibaseRepo::getDefaultInstance()->getSettings()->getSetting( 'siteLinkGroups' ); + $wikibaseRepo = WikibaseRepo::getDefaultInstance(); + $groups = $wikibaseRepo->getSettings()->getSetting( 'siteLinkGroups' ); // FIXME: Inject this $siteLinksView = new SiteLinksView( - WikibaseRepo::getDefaultInstance()->getSiteStore()->getSites(), - $this->sectionEditLinkGenerator + $wikibaseRepo->getSiteStore()->getSites(), + $this->sectionEditLinkGenerator, + $wikibaseRepo->getEntityLookup(), + $this->getLanguage()->getCode() ); $itemId = $item->getId(); diff --git a/repo/includes/View/SiteLinksView.php b/repo/includes/View/SiteLinksView.php index edd37c9..95f7be1 100644 --- a/repo/includes/View/SiteLinksView.php +++ b/repo/includes/View/SiteLinksView.php @@ -8,8 +8,10 @@ use Sanitizer; use Site; use SiteList; +use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\SiteLink; +use Wikibase\Lib\Store\EntityLookup; use Wikibase\Repo\WikibaseRepo; use Wikibase\Utils; @@ -35,6 +37,16 @@ private $sectionEditLinkGenerator; /** + * @var EntityLookup + */ + private $entityLookup; + + /** + * @var string + */ + private $languageCode; + + /** * @var string[] */ private $specialSiteLinkGroups; @@ -44,9 +56,12 @@ */ private $badgeItems; - public function __construct( SiteList $sites, SectionEditLinkGenerator $sectionEditLinkGenerator ) { + public function __construct( SiteList $sites, SectionEditLinkGenerator $sectionEditLinkGenerator, + EntityLookup $entityLookup, $languageCode ) { $this->sites = $sites; $this->sectionEditLinkGenerator = $sectionEditLinkGenerator; + $this->entityLookup = $entityLookup; + $this->languageCode = $languageCode; // @todo inject option/objects instead of using the singleton $repo = WikibaseRepo::getDefaultInstance(); @@ -362,7 +377,7 @@ 'span', array( 'class' => $classes, - 'title' => $serialization // @todo get label here + 'title' => $this->getTitleForBadge( $badge ) ) ); } @@ -370,4 +385,26 @@ return $html; } + /** + * Returns the title for the given badge id. + * @todo use TermLookup when we have one + * + * @param EntityId $badgeId + * + * @return string + */ + private function getTitleForBadge( EntityId $badgeId ) { + $entity = $this->entityLookup->getEntity( $badgeId ); + if ( $entity === null ) { + return $badgeId->getSerialization(); + } + + $labels = $entity->getFingerprint()->getLabels(); + if ( $labels->hasTermForLanguage( $this->languageCode ) ) { + return $labels->getByLanguage( $this->languageCode )->getText(); + } else { + return $badgeId->getSerialization(); + } + } + } diff --git a/repo/tests/phpunit/includes/View/SiteLinksViewTest.php b/repo/tests/phpunit/includes/View/SiteLinksViewTest.php index e78560c..ae1bf37 100644 --- a/repo/tests/phpunit/includes/View/SiteLinksViewTest.php +++ b/repo/tests/phpunit/includes/View/SiteLinksViewTest.php @@ -2,12 +2,13 @@ namespace Wikibase\Test; -use Language; use MediaWikiSite; use SiteList; +use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\Item; use Wikibase\DataModel\Entity\ItemId; use Wikibase\DataModel\SiteLink; +use Wikibase\Lib\Store\EntityLookup; use Wikibase\Repo\View\SectionEditLinkGenerator; use Wikibase\Repo\WikibaseRepo; use Wikibase\Repo\View\SiteLinksView; @@ -195,7 +196,8 @@ 'descendant' => array( 'tag' => 'span', 'attributes' => array( - 'class' => 'wb-badge wb-badge-Q42 wb-badge-featuredarticle' + 'class' => 'wb-badge wb-badge-Q42 wb-badge-featuredarticle', + 'title' => 'Featured article' ) ) ) @@ -210,7 +212,8 @@ 'descendant' => array( 'tag' => 'span', 'attributes' => array( - 'class' => 'wb-badge wb-badge-Q12 wb-badge-goodarticle' + 'class' => 'wb-badge wb-badge-Q12 wb-badge-goodarticle', + 'title' => 'Q12' ) ) ) @@ -275,7 +278,9 @@ private function getSiteLinksView() { return new SiteLinksView( $this->newSiteList(), - $this->getSectionEditLinkGeneratorMock() + $this->getSectionEditLinkGeneratorMock(), + $this->getEntityLookupMock(), + 'en' ); } @@ -320,4 +325,27 @@ return new SiteList( array( $dummySite, $dummySite2, $dummySite3 ) ); } + /** + * @return EntityLookup + */ + private function getEntityLookupMock() { + $entityLookup = $this->getMockBuilder( 'Wikibase\Lib\Store\EntityLookup' ) + ->disableOriginalConstructor() + ->getMock(); + + $entityLookup->expects( $this->any() ) + ->method( 'getEntity' ) + ->will( $this->returnCallback( function( EntityId $entityId ) { + if ( $entityId->getSerialization() === 'Q42' ) { + $item = Item::newEmpty(); + $item->setLabel( 'en', 'Featured article' ); + return $item; + } else { + return null; + } + } ) ); + + return $entityLookup; + } + } -- To view, visit https://gerrit.wikimedia.org/r/149865 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Iaab6fcd34b3e5831e971158250c1040d3f56de02 Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Bene <benestar.wikime...@gmail.com> Gerrit-Reviewer: Hoo man <h...@online.de> Gerrit-Reviewer: WikidataJenkins <wikidata-servi...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits