Aude has uploaded a new change for review.
https://gerrit.wikimedia.org/r/285289
Change subject: Fix fatal error in OutputPageBeforeHTMLHookHandler
......................................................................
Fix fatal error in OutputPageBeforeHTMLHookHandler
Check that we have valid EntityId and EntityRevision objects
before trying to load an Entity from EntityRevision.
There are cases (e.g. an admin viewing a revision of a deleted item)
where the EntityId is not available or an EntityRevision is not found.
Bug: T132645
Change-Id: I839b7ccbd81de8ed8ac738130b524b7de3612325
---
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
1 file changed, 58 insertions(+), 18 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/89/285289/1
diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 133497b..1da8940 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -3,7 +3,10 @@
namespace Wikibase\Repo\Hooks;
use OutputPage;
+use User;
+use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Term\AliasesProvider;
+use Wikibase\EntityRevision;
use Wikibase\Lib\ContentLanguages;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -126,16 +129,7 @@
$placeholders = $out->getProperty( 'wikibase-view-chunks' );
if ( !empty( $placeholders ) ) {
- // All user languages that are valid term languages
- $termsLanguages = array_intersect(
- $this->userLanguageLookup->getAllUserLanguages(
$out->getUser() ),
- $this->termsLanguages->getLanguages()
- );
-
- $injector = new TextInjector( $placeholders );
- $expander = $this->getEntityViewPlaceholderExpander(
$out, $termsLanguages );
-
- $html = $injector->inject( $html, array( $expander,
'getHtmlForPlaceholder' ) );
+ $this->replacePlaceholders( $placeholders, $out, $html
);
$out->addJsConfigVars(
'wbUserSpecifiedLanguages',
@@ -151,30 +145,76 @@
}
/**
+ * @param string[] $placeholders
* @param OutputPage $out
+ * @param string &$html
+ */
+ private function replacePlaceholders( array $placeholders, OutputPage
$out, &$html ) {
+ $injector = new TextInjector( $placeholders );
+
+ $entityId =
$this->outputPageEntityIdReader->getEntityIdFromOutputPage( $out );
+
+ if ( $entityId !== null ) {
+ $entityRev =
$this->entityRevisionLookup->getEntityRevision(
+ $entityId,
+ $out->getRevisionId()
+ );
+
+ if ( $entityRev instanceof EntityRevision ) {
+ // All user languages that are valid term
languages
+ $termsLanguages = array_intersect(
+
$this->userLanguageLookup->getAllUserLanguages( $out->getUser() ),
+ $this->termsLanguages->getLanguages()
+ );
+
+ $expander =
$this->getEntityViewPlaceholderExpander(
+ $entityRev->getEntity(),
+ $out->getUser(),
+ $termsLanguages,
+ $out->getLanguage()->getCode()
+ );
+
+ $html = $injector->inject( $html, [ $expander,
'getHtmlForPlaceholder' ] );
+
+ return;
+ }
+ }
+
+ $html = $injector->inject(
+ $html,
+ function() {
+ return '';
+ }
+ );
+ }
+
+ /**
+ * @param EntityDocument $entity
+ * @param User $user
* @param string[] $termsLanguages
+ * @param string $languageCode
*
* @return EntityViewPlaceholderExpander
*/
- private function getEntityViewPlaceholderExpander( OutputPage $out,
array $termsLanguages ) {
- $languageCode = $out->getLanguage()->getCode();
-
- $entityId =
$this->outputPageEntityIdReader->getEntityIdFromOutputPage( $out );
- $revisionId = $out->getRevisionId();
- $entity = $this->entityRevisionLookup->getEntityRevision(
$entityId, $revisionId )->getEntity();
+ private function getEntityViewPlaceholderExpander(
+ EntityDocument $entity,
+ User $user,
+ array $termsLanguages,
+ $languageCode
+ ) {
$labelsProvider = $entity;
$descriptionsProvider = $entity;
$aliasesProvider = $entity instanceof AliasesProvider ? $entity
: null;
return new EntityViewPlaceholderExpander(
$this->templateFactory,
- $out->getUser(),
+ $user,
$labelsProvider,
$descriptionsProvider,
$aliasesProvider,
array_merge( [ $languageCode ], $termsLanguages ),
$this->languageNameLookup,
- new MediaWikiLocalizedTextProvider(
$out->getLanguage()->getCode() )
+ new MediaWikiLocalizedTextProvider( $languageCode )
);
}
--
To view, visit https://gerrit.wikimedia.org/r/285289
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I839b7ccbd81de8ed8ac738130b524b7de3612325
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits