Adrian Heine has uploaded a new change for review.
https://gerrit.wikimedia.org/r/277777
Change subject: WIP Don't load full entity on current revision view
......................................................................
WIP Don't load full entity on current revision view
Change-Id: I7ebc1a0ae3ca76888ecf5cf688c5e2ee4dc1ea67
---
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M view/src/EntityViewPlaceholderExpander.php
2 files changed, 84 insertions(+), 4 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/77/277777/1
diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 2738d60..e909513 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -3,6 +3,7 @@
namespace Wikibase\Repo\Hooks;
use OutputPage;
+use Revision;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\Lib\ContentLanguages;
use Wikibase\Lib\LanguageNameLookup;
@@ -74,6 +75,8 @@
EntityIdParser $entityIdParser,
EntityRevisionLookup $entityRevisionLookup,
LanguageNameLookup $languageNameLookup,
+ $termIndex,
+ $entityPerPage,
OutputPageEntityIdReader $outputPageEntityIdReader
) {
$this->templateFactory = $templateFactory;
@@ -82,6 +85,8 @@
$this->entityIdParser = $entityIdParser;
$this->entityRevisionLookup = $entityRevisionLookup;
$this->languageNameLookup = $languageNameLookup;
+ $this->termIndex = $termIndex;
+ $this->entityPerPage = $entityPerPage;
$this->outputPageEntityIdReader = $outputPageEntityIdReader;
}
@@ -101,11 +106,14 @@
$entityIdParser,
$wikibaseRepo->getEntityRevisionLookup(),
new LanguageNameLookup( $wgLang->getCode() ),
+ $wikibaseRepo->getStore()->getTermIndex(),
+ $wikibaseRepo->getStore()->newEntityPerPage(),
new OutputPageEntityIdReader(
$wikibaseRepo->getEntityContentFactory(),
$wikibaseRepo->getEntityIdParser()
)
);
+
}
/**
@@ -161,10 +169,79 @@
$entityId =
$this->outputPageEntityIdReader->getEntityIdFromOutputPage( $out );
$revisionId = $out->getRevisionId();
- $entity = $this->entityRevisionLookup->getEntityRevision(
$entityId, $revisionId )->getEntity();
- $labelsProvider = $entity;
- $descriptionsProvider = $entity;
- $aliasesProvider = $entity;
+ if ( $revisionId === null || Revision::newFromId( $revisionId
)->isCurrent() ) {
+ $labelsProvider = new class( $this->termIndex,
$entityId ) implements \Wikibase\DataModel\Term\LabelsProvider {
+ public function __construct( $termIndex,
$entityId ) {
+ $this->termIndex = $termIndex;
+ $this->entityId = $entityId;
+ }
+
+ public function getLabels() {
+ if ( !$this->labels ) {
+ $this->labels = new
\Wikibase\DataModel\Term\TermList(
+ array_map(
+ function(
$termIndexEntry ) {
+ return
new \Wikibase\DataModel\Term\Term( $termIndexEntry->getLanguage(),
$termIndexEntry->getText() );
+ },
+
$this->termIndex->getTermsOfEntity( $this->entityId, [ 'label' ] ) // FIXME:
Filter languages?
+ )
+ );
+ }
+ return $this->labels;
+ }
+ };
+ $descriptionsProvider = new class( $this->termIndex,
$entityId ) implements \Wikibase\DataModel\Term\DescriptionsProvider {
+ public function __construct( $termIndex,
$entityId ) {
+ $this->termIndex = $termIndex;
+ $this->entityId = $entityId;
+ }
+
+ public function getDescriptions() {
+ if ( !$this->descriptions ) {
+ $this->descriptions = new
\Wikibase\DataModel\Term\TermList(
+ array_map(
+ function(
$termIndexEntry ) {
+ return
new \Wikibase\DataModel\Term\Term( $termIndexEntry->getLanguage(),
$termIndexEntry->getText() );
+ },
+
$this->termIndex->getTermsOfEntity( $this->entityId, [ 'description' ] ) //
FIXME: Filter languages?
+ )
+ );
+ }
+ return $this->descriptions;
+ }
+ };
+ $aliasesProvider = new class( $this->termIndex,
$entityId ) implements \Wikibase\DataModel\Term\AliasesProvider {
+ public function __construct( $termIndex,
$entityId ) {
+ $this->termIndex = $termIndex;
+ $this->entityId = $entityId;
+ }
+
+ public function getAliasGroups() {
+ if ( !$this->aliases ) {
+ $groupedAliases = [];
+ $aliasesEntries =
$this->termIndex->getTermsOfEntity( $this->entityId, [ 'alias' ] ); // FIXME:
Filter languages?
+ foreach( $aliasesEntries as
$aliasEntry ) {
+ $lang =
$aliasEntry->getLanguage();
+ $groupedAliases[ $lang
] = $groupedAliases[ $lang ] ?: [];
+ $groupedAliases[ $lang
][] = $aliasEntry->getText();
+ }
+ $this->aliases = new
\Wikibase\DataModel\Term\AliasGroupList( array_map(
+ function( $lang,
$aliases ) {
+ return new
\Wikibase\DataModel\Term\AliasGroup( $lang, $aliases );
+ },
+ array_keys(
$groupedAliases ),
+ $groupedAliases
+ ) );
+ }
+ return $this->aliases;
+ }
+ };
+ } else {
+ $entity =
$this->entityRevisionLookup->getEntityRevision( $entityId, $revisionId
)->getEntity();
+ $labelsProvider = $entity;
+ $descriptionsProvider = $entity;
+ $aliasesProvider = $entity;
+ }
return new EntityViewPlaceholderExpander(
$this->templateFactory,
diff --git a/view/src/EntityViewPlaceholderExpander.php
b/view/src/EntityViewPlaceholderExpander.php
index e48fab1..17811bf 100644
--- a/view/src/EntityViewPlaceholderExpander.php
+++ b/view/src/EntityViewPlaceholderExpander.php
@@ -134,6 +134,9 @@
$this->templateFactory = $templateFactory;
$this->termsLanguages = $termsLanguages;
$this->languageNameLookup = $languageNameLookup;
+ $this->labelsProvider = $labelsProvider;
+ $this->descriptionsProvider = $descriptionsProvider;
+ $this->aliasesProvider = $aliasesProvider;
}
/**
--
To view, visit https://gerrit.wikimedia.org/r/277777
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7ebc1a0ae3ca76888ecf5cf688c5e2ee4dc1ea67
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits