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

Reply via email to