Thiemo Mättig (WMDE) has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/337849 )
Change subject: Fix TermView components assuming all entities have
labels/descriptions
......................................................................
Fix TermView components assuming all entities have labels/descriptions
I found two places in the code that still assumed all entity types implement
the Labels/DescriptionsProvider interfaces. This is the most minimal patch I
could do to fix this.
What this patch basically does is replacing Labels/DescriptionProviders with
TermLists, and AliasesProvider with AliasGroupLists.
I am *not* lifting the limitation that the term views only work if they get
labels and descriptions. It may make sense to make descriptions optional, but
I want to do this in a later patch. With this patch labels and descriptions
fall back to empty lists if an entity type does not support them.
I tried to minify this patch or split it into multiple smaller patches
but failed. If you have a specific suggestion, please tell me or (better)
create a patch and let me rebase mine on top of yours.
Bug: T134735
Change-Id: Icbee448c0fee7fbf66f68456d637fb1aeecee9f8
---
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M repo/includes/ParserOutput/EntityParserOutputGenerator.php
M repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
M repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
M repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
M
repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
M view/src/EntityTermsView.php
M view/src/EntityView.php
M view/src/SimpleEntityTermsView.php
M view/src/TermsListView.php
M view/tests/phpunit/SimpleEntityTermsViewTest.php
M view/tests/phpunit/TermsListViewTest.php
12 files changed, 185 insertions(+), 210 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/49/337849/1
diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 6a86e34..fd9eb4c 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -6,7 +6,6 @@
use User;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Term\AliasesProvider;
use Wikibase\EntityFactory;
use Wikibase\EntityRevision;
use Wikibase\Lib\ContentLanguages;
@@ -235,17 +234,10 @@
array $termsListItemsHtml = null,
$languageCode
) {
- // FIXME: This is not necessarily true for all entity types.
- $labelsProvider = $entity;
- $descriptionsProvider = $entity;
- $aliasesProvider = $entity instanceof AliasesProvider ? $entity
: null;
-
return new EntityViewPlaceholderExpander(
$this->templateFactory,
$user,
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider,
+ $entity,
array_unique( array_merge( [ $languageCode ],
$termsLanguages ) ),
new MediaWikiLanguageDirectionalityLookup(),
$this->languageNameLookup,
diff --git a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
index b921264..0eb6988 100644
--- a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
+++ b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
@@ -12,6 +12,7 @@
use Wikibase\DataModel\Term\AliasesProvider;
use Wikibase\DataModel\Term\DescriptionsProvider;
use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\LanguageFallbackChain;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\Lib\Store\EntityInfo;
@@ -352,8 +353,8 @@
'wikibase-terms-list-items',
$entityTermsView->getTermsListItems(
$this->languageCode,
- $entity,
- $entity,
+ $entity instanceof LabelsProvider ?
$entity->getLabels() : new TermList(),
+ $entity instanceof DescriptionsProvider ?
$entity->getDescriptions() : new TermList(),
$entity instanceof AliasesProvider ? $entity :
null
)
);
diff --git a/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
index a967bd0..78556ca 100644
--- a/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
+++ b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
@@ -6,9 +6,11 @@
use MWException;
use RuntimeException;
use User;
+use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Term\AliasesProvider;
use Wikibase\DataModel\Term\DescriptionsProvider;
use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\View\LanguageDirectionalityLookup;
use Wikibase\View\LocalizedTextProvider;
@@ -38,19 +40,9 @@
private $user;
/**
- * @var LabelsProvider
+ * @var EntityDocument
*/
- private $labelsProvider;
-
- /**
- * @var DescriptionsProvider
- */
- private $descriptionsProvider;
-
- /**
- * @var AliasesProvider|null
- */
- private $aliasesProvider;
+ private $entity;
/**
* @var string[]
@@ -80,9 +72,7 @@
/**
* @param TemplateFactory $templateFactory
* @param User $user the current user
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param EntityDocument $entity
* @param string[] $termsLanguages
* @param LanguageDirectionalityLookup $languageDirectionalityLookup
* @param LanguageNameLookup $languageNameLookup
@@ -92,9 +82,7 @@
public function __construct(
TemplateFactory $templateFactory,
User $user,
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
+ EntityDocument $entity,
array $termsLanguages,
LanguageDirectionalityLookup $languageDirectionalityLookup,
LanguageNameLookup $languageNameLookup,
@@ -102,9 +90,7 @@
array $termsListItems = array()
) {
$this->user = $user;
- $this->labelsProvider = $labelsProvider;
- $this->descriptionsProvider = $descriptionsProvider;
- $this->aliasesProvider = $aliasesProvider;
+ $this->entity = $entity;
$this->templateFactory = $templateFactory;
$this->termsLanguages = $termsLanguages;
$this->languageDirectionalityLookup =
$languageDirectionalityLookup;
@@ -178,7 +164,6 @@
* @return string HTML
*/
public function renderTermBox() {
-
$termsListView = new TermsListView(
$this->templateFactory,
$this->languageNameLookup,
@@ -192,9 +177,9 @@
$contentHtml .= $this->termsListItems[
$languageCode ];
} else {
$contentHtml .= $termsListView->getListItemHtml(
- $this->labelsProvider,
- $this->descriptionsProvider,
- $this->aliasesProvider,
+ $this->entity instanceof LabelsProvider
? $this->entity->getLabels() : new TermList(),
+ $this->entity instanceof
DescriptionsProvider ? $this->entity->getDescriptions() : new TermList(),
+ $this->entity instanceof
AliasesProvider ? $this->entity->getAliasGroups() : null,
$languageCode
);
}
diff --git a/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
b/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
index 62afd7e..92d72a4 100644
--- a/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
+++ b/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
@@ -4,9 +4,8 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\View\EditSectionGenerator;
use Wikibase\View\HtmlTermRenderer;
use Wikibase\View\LocalizedTextProvider;
@@ -71,26 +70,27 @@
/**
* @param string $mainLanguageCode Desired language of the label,
description and aliases in the
* title and header section. Not necessarily identical to the
interface language.
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList|null $aliasGroups
* @param EntityId|null $entityId the id of the entity
*
* @return string HTML
*/
public function getHtml(
$mainLanguageCode,
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups = null,
EntityId $entityId = null
) {
$cssClasses = $this->textInjector->newMarker(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class'
);
- return $this->templateFactory->render(
'wikibase-entitytermsview',
- $this->getHeadingHtml( $mainLanguageCode, $entityId,
$aliasesProvider ),
+ return $this->templateFactory->render(
+ 'wikibase-entitytermsview',
+ $this->getHeadingHtml( $mainLanguageCode, $entityId,
$aliasGroups ),
$this->textInjector->newMarker( 'termbox' ),
$cssClasses,
$this->getHtmlForLabelDescriptionAliasesEditSection(
$mainLanguageCode, $entityId )
@@ -100,31 +100,32 @@
/**
* @param string $mainLanguageCode Desired language of the label,
description and aliases in the
* title and header section. Not necessarily identical to the
interface language.
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList|null $aliasGroups
*
* @return string[] HTML snippets
*/
public function getTermsListItems(
$mainLanguageCode,
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups = null
) {
$termsListItems = [];
$termsListLanguages = $this->getTermsLanguageCodes(
$mainLanguageCode,
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider
+ $labels,
+ $descriptions,
+ $aliasGroups ?: new AliasGroupList()
);
+
foreach ( $termsListLanguages as $languageCode ) {
$termsListItems[ $languageCode ] =
$this->termsListView->getListItemHtml(
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider,
+ $labels,
+ $descriptions,
+ $aliasGroups,
$languageCode
);
}
diff --git
a/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
index 0bf2fd7..e3d2ce7 100644
---
a/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
@@ -47,8 +47,6 @@
$templateFactory,
$user,
$item,
- $item,
- $aliasesProvider,
$termsLanguages,
$this->getMock( LanguageDirectionalityLookup::class ),
$languageNameLookup,
diff --git
a/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
b/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
index afcdc2f..2ee3184 100644
---
a/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
@@ -3,8 +3,8 @@
namespace Wikibase\Repo\Tests\ParserOutput;
use PHPUnit_Framework_TestCase;
-use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\Repo\ParserOutput\PlaceholderEmittingEntityTermsView;
use Wikibase\Repo\ParserOutput\TextInjector;
use Wikibase\View\EditSectionGenerator;
@@ -41,11 +41,10 @@
public function testGetHtml() {
$textInjector = new TextInjector();
- $property = new Property( null, null, 'string' );
$entityTermsView = $this->newEntityTermsView( $textInjector );
- $html = $entityTermsView->getHtml( 'lkt', $property, $property
);
+ $html = $entityTermsView->getHtml( 'lkt', new TermList(), new
TermList() );
$markers = $textInjector->getMarkers();
foreach ( $markers as $marker => $name ) {
@@ -63,11 +62,10 @@
public function testGetTermsListItems() {
$textInjector = new TextInjector();
- $property = new Property( null, null, 'string' );
$entityTermsView = $this->newEntityTermsView( $textInjector );
- $termsListItems = $entityTermsView->getTermsListItems( 'lkt',
$property, $property );
+ $termsListItems = $entityTermsView->getTermsListItems( 'lkt',
new TermList(), new TermList() );
$this->assertSame( [ 'lkt' => null ], $termsListItems );
}
diff --git a/view/src/EntityTermsView.php b/view/src/EntityTermsView.php
index 0d315b1..b81aaeb 100644
--- a/view/src/EntityTermsView.php
+++ b/view/src/EntityTermsView.php
@@ -3,9 +3,8 @@
namespace Wikibase\View;
use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\TermList;
/**
* Generates HTML to display the terms of an entity.
@@ -18,18 +17,18 @@
/**
* @param string $mainLanguageCode Desired language of the label,
description and aliases in the
* title and header section. Not necessarily identical to the
interface language.
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList|null $aliasGroups
* @param EntityId|null $entityId the id of the entity
*
* @return string HTML
*/
public function getHtml(
$mainLanguageCode,
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups = null,
EntityId $entityId = null
);
@@ -38,8 +37,6 @@
*
* @return string HTML
*/
- public function getTitleHtml(
- EntityId $entityId = null
- );
+ public function getTitleHtml( EntityId $entityId = null );
}
diff --git a/view/src/EntityView.php b/view/src/EntityView.php
index b9baa08..68f22a7 100644
--- a/view/src/EntityView.php
+++ b/view/src/EntityView.php
@@ -127,9 +127,9 @@
if ( $entity instanceof LabelsProvider && $entity instanceof
DescriptionsProvider ) {
return $this->entityTermsView->getHtml(
$this->languageCode,
- $entity,
- $entity,
- $entity instanceof AliasesProvider ? $entity :
null,
+ $entity->getLabels(),
+ $entity->getDescriptions(),
+ $entity instanceof AliasesProvider ?
$entity->getAliasGroups() : null,
$id
);
}
diff --git a/view/src/SimpleEntityTermsView.php
b/view/src/SimpleEntityTermsView.php
index f9d1c39..e38a30f 100644
--- a/view/src/SimpleEntityTermsView.php
+++ b/view/src/SimpleEntityTermsView.php
@@ -6,10 +6,8 @@
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookupException;
use Wikibase\DataModel\Term\AliasGroupList;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\View\Template\TemplateFactory;
/**
@@ -76,31 +74,32 @@
/**
* @param string $mainLanguageCode Desired language of the label,
description and aliases in the
* title and header section. Not necessarily identical to the
interface language.
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList|null $aliasGroups
* @param EntityId|null $entityId the id of the entity
*
* @return string HTML
*/
public function getHtml(
$mainLanguageCode,
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups = null,
EntityId $entityId = null
) {
- return $this->templateFactory->render(
'wikibase-entitytermsview',
- $this->getHeadingHtml( $mainLanguageCode, $entityId,
$aliasesProvider ),
+ return $this->templateFactory->render(
+ 'wikibase-entitytermsview',
+ $this->getHeadingHtml( $mainLanguageCode, $entityId,
$aliasGroups ),
$this->termsListView->getHtml(
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider,
+ $labels,
+ $descriptions,
+ $aliasGroups,
$this->getTermsLanguageCodes(
$mainLanguageCode,
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider
+ $labels,
+ $descriptions,
+ $aliasGroups ?: new AliasGroupList()
)
),
'',
@@ -111,7 +110,7 @@
protected function getHeadingHtml(
$languageCode,
EntityId $entityId = null,
- AliasesProvider $aliasesProvider = null
+ AliasGroupList $aliasGroups = null
) {
$headingPartsHtml = '';
@@ -131,8 +130,7 @@
$this->getDescriptionHtml( $description )
);
- if ( $aliasesProvider !== null ) {
- $aliasGroups = $aliasesProvider->getAliasGroups();
+ if ( $aliasGroups ) {
$headingPartsHtml .= $this->templateFactory->render(
'wikibase-entitytermsview-heading-part',
'aliases',
@@ -141,7 +139,8 @@
);
}
- return $this->templateFactory->render(
'wikibase-entitytermsview-heading',
+ return $this->templateFactory->render(
+ 'wikibase-entitytermsview-heading',
$headingPartsHtml
);
}
@@ -149,30 +148,28 @@
/**
* @param string $mainLanguageCode Desired language of the label,
description and aliases in the
* title and header section. Not necessarily identical to the
interface language.
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList $aliasGroups
*
* @return string[]
*/
protected function getTermsLanguageCodes(
$mainLanguageCode,
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups
) {
$allLanguages = [ $mainLanguageCode ];
- $labelLanguages = array_keys(
$labelsProvider->getLabels()->toTextArray() );
+ $labelLanguages = array_keys( $labels->toTextArray() );
$allLanguages = array_merge( $allLanguages, $labelLanguages );
- $descriptionLanguages = array_keys(
$descriptionsProvider->getDescriptions()->toTextArray() );
+ $descriptionLanguages = array_keys(
$descriptions->toTextArray() );
$allLanguages = array_merge( $allLanguages,
$descriptionLanguages );
- if ( $aliasesProvider ) {
- $aliasLanguages = array_keys(
$aliasesProvider->getAliasGroups()->toTextArray() );
- $allLanguages = array_merge( $allLanguages,
$aliasLanguages );
- }
+ $aliasLanguages = array_keys( $aliasGroups->toTextArray() );
+ $allLanguages = array_merge( $allLanguages, $aliasLanguages );
$allLanguages = array_unique( $allLanguages );
return $allLanguages;
@@ -203,7 +200,8 @@
}
}
- return $this->templateFactory->render( 'wikibase-title',
+ return $this->templateFactory->render(
+ 'wikibase-title',
$isEmpty ? 'wb-empty' : '',
$isEmpty ? htmlspecialchars( $this->textProvider->get(
'wikibase-label-empty' ) ) : $labelHtml,
$idInParenthesesHtml
@@ -241,8 +239,8 @@
htmlspecialchars( $alias )
);
}
- $aliasesHtml = $this->templateFactory->render(
'wikibase-entitytermsview-aliases', $aliasesHtml );
- return $aliasesHtml;
+
+ return $this->templateFactory->render(
'wikibase-entitytermsview-aliases', $aliasesHtml );
}
/**
diff --git a/view/src/TermsListView.php b/view/src/TermsListView.php
index 124cfeb..3e65ebe 100644
--- a/view/src/TermsListView.php
+++ b/view/src/TermsListView.php
@@ -3,9 +3,6 @@
namespace Wikibase\View;
use Wikibase\DataModel\Term\AliasGroupList;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
use Wikibase\DataModel\Term\TermList;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\View\Template\TemplateFactory;
@@ -56,26 +53,26 @@
}
/**
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList|null $aliasGroups
* @param string[] $languageCodes The languages the user requested to
be shown
*
* @return string HTML
*/
public function getHtml(
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups = null,
array $languageCodes
) {
$entityTermsForLanguageViewsHtml = '';
foreach ( $languageCodes as $languageCode ) {
$entityTermsForLanguageViewsHtml .=
$this->getListItemHtml(
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider,
+ $labels,
+ $descriptions,
+ $aliasGroups,
$languageCode
);
}
@@ -89,7 +86,8 @@
* @return string HTML
*/
public function getListViewHtml( $contentHtml ) {
- return $this->templateFactory->render(
'wikibase-entitytermsforlanguagelistview',
+ return $this->templateFactory->render(
+ 'wikibase-entitytermsforlanguagelistview',
htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-language' ) ),
htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-label' ) ),
htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-description' ) ),
@@ -100,24 +98,23 @@
}
/**
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
+ * @param TermList $labels
+ * @param TermList $descriptions
+ * @param AliasGroupList|null $aliasGroups
* @param string $languageCode
*
* @return string HTML
*/
public function getListItemHtml(
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups = null,
$languageCode
) {
$languageName = $this->languageNameLookup->getName(
$languageCode );
- $labels = $labelsProvider->getLabels();
- $descriptions = $descriptionsProvider->getDescriptions();
- return $this->templateFactory->render(
'wikibase-entitytermsforlanguageview',
+ return $this->templateFactory->render(
+ 'wikibase-entitytermsforlanguageview',
'tr',
'td',
$languageCode,
@@ -134,7 +131,7 @@
'wikibase-description-empty', // Text key
$languageCode
),
- $aliasesProvider ? $this->getAliasesView(
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
+ $aliasGroups ? $this->getAliasesView( $aliasGroups,
$languageCode ) : '',
'',
'th'
);
@@ -143,7 +140,8 @@
private function getTermView( TermList $termList, $templateName,
$emptyTextKey, $languageCode ) {
$hasTerm = $termList->hasTermForLanguage( $languageCode );
$effectiveLanguage = $hasTerm ? $languageCode :
$this->textProvider->getLanguageOf( $emptyTextKey );
- return $this->templateFactory->render( $templateName,
+ return $this->templateFactory->render(
+ $templateName,
$hasTerm ? '' : 'wb-empty',
htmlspecialchars( $hasTerm
? $termList->getByLanguage( $languageCode
)->getText()
@@ -163,7 +161,8 @@
*/
private function getAliasesView( AliasGroupList $aliasGroups,
$languageCode ) {
if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) {
- return $this->templateFactory->render(
'wikibase-aliasesview',
+ return $this->templateFactory->render(
+ 'wikibase-aliasesview',
'wb-empty',
'',
'',
@@ -181,7 +180,8 @@
);
}
- return $this->templateFactory->render(
'wikibase-aliasesview',
+ return $this->templateFactory->render(
+ 'wikibase-aliasesview',
'',
$aliasesHtml,
'',
diff --git a/view/tests/phpunit/SimpleEntityTermsViewTest.php
b/view/tests/phpunit/SimpleEntityTermsViewTest.php
index 46bebe4..633e420 100644
--- a/view/tests/phpunit/SimpleEntityTermsViewTest.php
+++ b/view/tests/phpunit/SimpleEntityTermsViewTest.php
@@ -6,8 +6,10 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
-use Wikibase\DataModel\Term\Fingerprint;
+use Wikibase\DataModel\Term\AliasGroup;
+use Wikibase\DataModel\Term\AliasGroupList;
use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\View\EditSectionGenerator;
use Wikibase\View\DummyLocalizedTextProvider;
use Wikibase\View\HtmlTermRenderer;
@@ -77,50 +79,57 @@
);
}
- private function getFingerprint( $languageCode = 'en' ) {
- $fingerprint = new Fingerprint();
- $fingerprint->setLabel( $languageCode, '<LABEL>' );
- $fingerprint->setDescription( $languageCode, '<DESCRIPTION>' );
- $fingerprint->setAliasGroup( $languageCode, [ '<ALIAS1>',
'<ALIAS2>' ] );
- return $fingerprint;
+ private function getTermList( $term, $languageCode = 'en' ) {
+ return new TermList( [ new Term( $languageCode, $term ) ] );
+ }
+
+ private function getAliasGroupList( array $aliases, $languageCode =
'en' ) {
+ return new AliasGroupList( [ new AliasGroup( $languageCode,
$aliases ) ] );
}
public function testGetHtml_containsAliases() {
$entityTermsView = $this->getEntityTermsView( 1 );
- $fingerprint = $this->getFingerprint();
- $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null );
+ $aliasGroups = $this->getAliasGroupList( [ '<ALIAS1>',
'<ALIAS2>' ] );
+ $html = $entityTermsView->getHtml( 'en', new TermList(), new
TermList(), $aliasGroups, null );
$this->assertContains( '<ALIAS1>', $html );
$this->assertContains( '<ALIAS2>', $html );
}
public function entityFingerprintProvider() {
- $fingerprint = $this->getFingerprint();
+ $labels = $this->getTermList( '<LABEL>' );
+ $descriptions = $this->getTermList( '<DESCRIPTION>' );
+ $emptyAliases = new AliasGroupList();
return array(
- 'empty' => array( new Fingerprint(), new ItemId( 'Q42'
), 'en' ),
- 'other language' => array( $fingerprint, new ItemId(
'Q42' ), 'de' ),
- 'other id' => array( $fingerprint, new ItemId( 'Q12' ),
'en' ),
+ 'empty' => array( new TermList(), new TermList(),
$emptyAliases, new ItemId( 'Q42' ), 'en' ),
+ 'other language' => array( $labels, $descriptions,
$emptyAliases, new ItemId( 'Q42' ), 'de' ),
+ 'other id' => array( $labels, $descriptions,
$emptyAliases, new ItemId( 'Q12' ), 'en' ),
);
}
/**
* @dataProvider entityFingerprintProvider
*/
- public function testGetHtml_isEditable( Fingerprint $fingerprint,
ItemId $entityId, $languageCode ) {
+ public function testGetHtml_isEditable(
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups,
+ ItemId $entityId,
+ $languageCode
+ ) {
$entityTermsView = $this->getEntityTermsView( 1 );
- $html = $entityTermsView->getHtml( $languageCode, $fingerprint,
$fingerprint, $fingerprint, $entityId );
+ $html = $entityTermsView->getHtml( $languageCode, $labels,
$descriptions, $aliasGroups, $entityId );
$this->assertContains( '<EDITSECTION>', $html );
}
public function testGetHtml_valuesAreEscaped() {
- $fingerprint = new Fingerprint();
- $fingerprint->setDescription( 'en', '<script>alert( "xss"
);</script>' );
- $fingerprint->setAliasGroup( 'en', array( '<a href="#">evil
html</a>', '<b>bold</b>', '<i>italic</i>' ) );
+ $descriptions = $this->getTermList( '<script>alert( "xss"
);</script>' );
+ $aliasGroups = $this->getAliasGroupList( [ '<a href="#">evil
html</a>', '<b>bold</b>', '<i>italic</i>' ] );
$view = $this->getEntityTermsView( 1 );
- $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null );
+ $html = $view->getHtml( 'en', new TermList(), $descriptions,
$aliasGroups, null );
$this->assertContains( 'evil html', $html, 'make sure it works'
);
$this->assertNotContains( 'href="#"', $html );
@@ -132,8 +141,7 @@
public function testGetHtml_isMarkedAsEmptyValue() {
$entityTermsView = $this->getEntityTermsView( 1 );
- $fingerprint = new Fingerprint();
- $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null );
+ $html = $entityTermsView->getHtml( 'en', new TermList(), new
TermList(), new AliasGroupList(), null );
$this->assertContains( 'wb-empty', $html );
$this->assertContains( '(wikibase-description-empty)', $html );
@@ -142,8 +150,9 @@
public function testGetHtml_isNotMarkedAsEmpty() {
$entityTermsView = $this->getEntityTermsView( 1 );
- $fingerprint = $this->getFingerprint();
- $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, new ItemId( 'Q111' ) );
+ $terms = $this->getTermList( 'not empty' );
+ $aliasGroups = $this->getAliasGroupList( [ 'not empty' ] );
+ $html = $entityTermsView->getHtml( 'en', $terms, $terms,
$aliasGroups, new ItemId( 'Q111' ) );
$this->assertNotContains( 'wb-empty', $html );
$this->assertNotContains( '(wikibase-description-empty)', $html
);
@@ -151,10 +160,11 @@
}
public function testGetHtml_containsEmptyDescriptionPlaceholder() {
- $fingerprint = $this->getFingerprint();
-
$view = $this->getEntityTermsView( 1 );
- $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null );
+ $labels = $this->getTermList( 'not empty' );
+ $descriptions = new TermList();
+ $aliasGroups = $this->getAliasGroupList( [ 'not empty' ] );
+ $html = $view->getHtml( 'en', $labels, $descriptions,
$aliasGroups, null );
$this->assertContains( 'wb-empty', $html );
$this->assertContains( '(wikibase-description-empty)', $html );
@@ -162,11 +172,8 @@
}
public function testGetHtml_containsEmptyAliasesList() {
- $fingerprint = $this->getFingerprint();
- $fingerprint->removeAliasGroup( 'en' );
-
$view = $this->getEntityTermsView( 1 );
- $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint );
+ $html = $view->getHtml( 'en', new TermList(), new TermList(),
new AliasGroupList() );
$this->assertContains( 'wb-empty', $html );
$this->assertContains( '<div
class="wikibase-entitytermsview-heading-aliases wb-empty"></div>', $html );
@@ -175,21 +182,27 @@
/**
* @dataProvider entityFingerprintProvider
*/
- public function testGetHtml_containsAllTerms( Fingerprint $fingerprint,
ItemId $entityId, $languageCode ) {
+ public function testGetHtml_containsAllTerms(
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliases,
+ ItemId $entityId,
+ $languageCode
+ ) {
$termsListView = $this->getMockBuilder( TermsListView::class )
->disableOriginalConstructor()
->getMock();
$termsListView->expects( $this->once() )
->method( 'getHtml' )
->with(
- $fingerprint,
- $fingerprint,
- $fingerprint,
+ $labels,
+ $descriptions,
+ $aliases,
$this->equalTo( $languageCode === 'de' ? [
'de', 'en' ] : [ 'en' ] )
)
->will( $this->returnValue( '<TERMSLISTVIEW>' ) );
$entityTermsView = $this->getEntityTermsView( 1, $termsListView
);
- $html = $entityTermsView->getHtml( $languageCode, $fingerprint,
$fingerprint, $fingerprint, $entityId );
+ $html = $entityTermsView->getHtml( $languageCode, $labels,
$descriptions, $aliases, $entityId );
$this->assertContains( '<TERMSLISTVIEW>', $html );
}
diff --git a/view/tests/phpunit/TermsListViewTest.php
b/view/tests/phpunit/TermsListViewTest.php
index 29ab15d..329dd0a 100644
--- a/view/tests/phpunit/TermsListViewTest.php
+++ b/view/tests/phpunit/TermsListViewTest.php
@@ -3,10 +3,9 @@
namespace Wikibase\View\Tests;
use PHPUnit_Framework_TestCase;
-use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Entity\Item;
-use Wikibase\DataModel\Entity\ItemId;
-use Wikibase\DataModel\Term\Fingerprint;
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\View\LanguageDirectionalityLookup;
use Wikibase\View\TermsListView;
@@ -62,31 +61,28 @@
);
}
- private function getFingerprint( $languageCode = 'en' ) {
- $fingerprint = new Fingerprint();
- $fingerprint->setLabel( $languageCode, '<LABEL>' );
- $fingerprint->setDescription( $languageCode, '<DESCRIPTION>' );
- $fingerprint->setAliasGroup( $languageCode, array( '<ALIAS1>',
'<ALIAS2>' ) );
- return $fingerprint;
+ private function getTermList( $term, $languageCode = 'en' ) {
+ return new TermList( [ new Term( $languageCode, $term ) ] );
}
public function getTermsListViewProvider() {
- $item = new Item(
- new ItemId( 'Q1' ),
- $this->getFingerprint( 'arc' )
- );
+ $languageCode = 'arc';
+ $labels = $this->getTermList( '<LABEL>', $languageCode );
+ $descriptions = $this->getTermList( '<DESCRIPTION>',
$languageCode );
+ $aliasGroups = new AliasGroupList();
+ $aliasGroups->setAliasesForLanguage( $languageCode, [
'<ALIAS1>', '<ALIAS2>' ] );
+
return [
[
- $item, 'arc', true, true, true
+ $labels, $descriptions, $aliasGroups,
$languageCode, true, true, true
],
[
- new Item(), 'lkt', false, false, false
+ new TermList(), new TermList(), new
AliasGroupList(), 'lkt', false, false, false
],
[
- new Item(
- new ItemId( 'Q1' ),
- new Fingerprint()
- ),
+ new TermList(),
+ new TermList(),
+ new AliasGroupList(),
'en',
false,
false,
@@ -99,7 +95,9 @@
* @dataProvider getTermsListViewProvider
*/
public function testGetTermsListView(
- EntityDocument $entity,
+ TermList $labels,
+ TermList $descriptions,
+ AliasGroupList $aliasGroups,
$languageCode,
$hasLabel,
$hasDescription,
@@ -107,7 +105,7 @@
) {
$languageDirectionality = $languageCode === 'arc' ? 'rtl' :
'ltr';
$view = $this->getTermsListView( 1 );
- $html = $view->getHtml( $entity, $entity, $entity, [
$languageCode ] );
+ $html = $view->getHtml( $labels, $descriptions, $aliasGroups, [
$languageCode ] );
$this->assertContains(
'(wikibase-entitytermsforlanguagelistview-language)', $html );
$this->assertContains( 'wikibase-entitytermsforlanguageview-' .
$languageCode, $html );
@@ -165,24 +163,18 @@
return $key ===
'wikibase-entitytermsforlanguagelistview-language' ? '"RAW"' : "($key)";
} ) );
- $item = new Item(
- new ItemId( 'Q1' ),
- new Fingerprint()
- );
$view = $this->getTermsListView( 0, $textProvider );
- $html = $view->getHtml( $item, $item, $item, [] );
+ $html = $view->getHtml( new TermList(), new TermList(), new
AliasGroupList(), [] );
$this->assertContains( '"RAW"', $html );
$this->assertNotContains( '"RAW"', $html );
}
public function testGetTermsListView_noAliasesProvider() {
- $item = new Item(
- new ItemId( 'Q1' ),
- $this->getFingerprint()
- );
+ $labels = $this->getTermList( '<LABEL>' );
+ $descriptions = $this->getTermList( '<DESCRIPTION>' );
$view = $this->getTermsListView( 1 );
- $html = $view->getHtml( $item, $item, null, array( 'en' ) );
+ $html = $view->getHtml( $labels, $descriptions, null, array(
'en' ) );
$this->assertContains(
'(wikibase-entitytermsforlanguagelistview-language)', $html );
$this->assertContains(
'(wikibase-entitytermsforlanguagelistview-label)', $html );
--
To view, visit https://gerrit.wikimedia.org/r/337849
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icbee448c0fee7fbf66f68456d637fb1aeecee9f8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits