| Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/view/src/EntityTermsView.php |
<?php
namespace Wikibase\View;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Term\AliasGroupList;
use Wikibase\DataModel\Term\AliasesProvider;
use Wikibase\DataModel\Term\DescriptionsProvider;
use Wikibase\DataModel\Term\Fingerprint;
use Wikibase\DataModel\Term\LabelsProvider;
use Wikibase\DataModel\Term\TermList;
use Wikibase\View\Template\TemplateFactory;
/**
* Generates HTML to display the fingerprint of an entity
* in the user's current language.
*
* @since 0.5
*
* @license GPL-2.0+
* @author Thiemo Mättig
* @author Bene* < benestar.wikimedia@gmail.com >
* @author H. Snater < mediawiki@snater.com >
* @author Adrian Heine <adrian.heine@wikimedia.de>
*/
class EntityTermsView {
/**
* @var TemplateFactory
*/
private $templateFactory;
/**
* @var EditSectionGenerator
*/
private $sectionEditLinkGenerator;
/**
* @var LocalizedTextProvider
*/
private $textProvider;
/**
* @param TemplateFactory $templateFactory
* @param EditSectionGenerator $sectionEditLinkGenerator
* @param LocalizedTextProvider $textProvider
*/
public function __construct(
TemplateFactory $templateFactory,
EditSectionGenerator $sectionEditLinkGenerator,
LocalizedTextProvider $textProvider
) {
$this->sectionEditLinkGenerator = $sectionEditLinkGenerator;
$this->templateFactory = $templateFactory;
$this->textProvider = $textProvider;
}
/**
* @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 Fingerprint $fingerprint the fingerprint to render
* @param EntityId|null $entityId the id of the fingerprint's entity
* @param string $termBoxHtml
* @param TextInjector $textInjector
*
* @return string HTML
*/
public function getHtml(
$mainLanguageCode,
Fingerprint $fingerprint,
EntityId $entityId = null,
$termBoxHtml,
TextInjector $textInjector
) {
$descriptions = $fingerprint->getDescriptions();
$aliasGroups = $fingerprint->getAliasGroups();
$marker = $textInjector->newMarker(
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class'
);
return $this->templateFactory->render( 'wikibase-entitytermsview',
$descriptions->hasTermForLanguage( $mainLanguageCode ) ? '' : 'wb-empty',
$this->getDescriptionHtml( $mainLanguageCode, $descriptions ),
$aliasGroups->hasGroupForLanguage( $mainLanguageCode ) ? '' : 'wb-empty',
$this->getHtmlForAliases( $mainLanguageCode, $aliasGroups ),
$termBoxHtml,
$marker,
$this->getHtmlForLabelDescriptionAliasesEditSection( $mainLanguageCode, $entityId )
);
}
/**
* @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 Fingerprint $fingerprint
* @param EntityId|null $entityId
*
* @return string HTML
*/
public function getTitleHtml(
$mainLanguageCode,
Fingerprint $fingerprint,
EntityId $entityId = null
) {
$labels = $fingerprint->getLabels();
$idInParenthesesHtml = '';
if ( $entityId !== null ) {
$id = $entityId->getSerialization();
$idInParenthesesHtml = htmlspecialchars( $this->textProvider->get( 'parentheses', [ $id ] ) );
}
if ( $labels->hasTermForLanguage( $mainLanguageCode ) ) {
return $this->templateFactory->render( 'wikibase-title',
'',
htmlspecialchars( $labels->getByLanguage( $mainLanguageCode )->getText() ),
$idInParenthesesHtml
);
} else {
return $this->templateFactory->render( 'wikibase-title',
'wb-empty',
htmlspecialchars( $this->textProvider->get( 'wikibase-label-empty' ) ),
$idInParenthesesHtml
);
}
}
/**
* @param string $languageCode The language of the description
* @param TermList $descriptions The list of descriptions to render
*
* @return string HTML
*/
private function getDescriptionHtml( $languageCode, TermList $descriptions ) {
if ( $descriptions->hasTermForLanguage( $languageCode ) ) {
$text = $descriptions->getByLanguage( $languageCode )->getText();
} else {
$text = $this->textProvider->get( 'wikibase-description-empty' );
}
return htmlspecialchars( $text );
}
/**
* @param string $languageCode The language of the aliases
* @param AliasGroupList $aliasGroups the list of alias groups to render
*
* @return string HTML
*/
private function getHtmlForAliases( $languageCode, AliasGroupList $aliasGroups ) {
if ( $aliasGroups->hasGroupForLanguage( $languageCode ) ) {
$aliasesHtml = '';
$aliases = $aliasGroups->getByLanguage( $languageCode )->getAliases();
foreach ( $aliases as $alias ) {
$aliasesHtml .= $this->templateFactory->render(
'wikibase-entitytermsview-aliases-alias',
htmlspecialchars( $alias )
);
}
} else {
$aliasesHtml = htmlspecialchars( $this->textProvider->get( 'wikibase-aliases-empty' ) );
}
return $this->templateFactory->render( 'wikibase-entitytermsview-aliases', $aliasesHtml );
}
/**
* @param string $languageCode The language for which terms should be edited
* @param EntityId|null $entityId
*
* @return string HTML
*/
private function getHtmlForLabelDescriptionAliasesEditSection( $languageCode, EntityId $entityId = null ) {
return $this->sectionEditLinkGenerator->getLabelDescriptionAliasesEditSection(
$languageCode,
$entityId
);
}
}