Sumit has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/227176

Change subject: WikidataPageBanner check for invalid Property name
......................................................................

WikidataPageBanner check for invalid Property name

Add a try-catch block to getWikidataBanner to catch InvalidArgumentExceptions in
case the property name is invalid.

Bug: T107001
Change-Id: Iade85972f384c2644a4b27e6bce76079c6a2697d
---
M includes/WikidataPageBanner.hooks.php
1 file changed, 29 insertions(+), 23 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikidataPageBanner 
refs/changes/76/227176/1

diff --git a/includes/WikidataPageBanner.hooks.php 
b/includes/WikidataPageBanner.hooks.php
index dea3058..be3b43f 100644
--- a/includes/WikidataPageBanner.hooks.php
+++ b/includes/WikidataPageBanner.hooks.php
@@ -260,32 +260,38 @@
        public static function getWikidataBanner( $title ) {
                global $wgBannerProperty;
                $banner = null;
-               // Ensure Wikibase client is installed
-               if ( class_exists( 'Wikibase\Client\WikibaseClient' ) ) {
-                       $entityIdLookup = 
Wikibase\Client\WikibaseClient::getDefaultInstance()
-                       ->getStore()
-                       ->getEntityIdLookup();
-                       $itemId = $entityIdLookup->getEntityIdForTitle( $title 
);
-                       // check if this page has an associated item page
-                       $entityLookup = 
Wikibase\Client\WikibaseClient::getDefaultInstance()
-                       ->getStore()
-                       ->getEntityLookup();
-                       /** @var Wikibase\DataModel\Entity\Item $item */
-                       if ( $itemId != null ) {
-                               $item = $entityLookup->getEntity( $itemId );
-                               $statements = 
$item->getStatements()->getByPropertyId(
-                                               new 
Wikibase\DataModel\Entity\PropertyId(
-                                                       $wgBannerProperty
-                                               )
-                                       )->getBestStatements();
-                               if ( !$statements->isEmpty() ) {
-                                       $statements = $statements->toArray();
-                                       $snak = $statements[0]->getMainSnak();
-                                       if ( $snak instanceof 
Wikibase\DataModel\Snak\PropertyValueSnak ) {
-                                               $banner = 
$snak->getDataValue()->getValue();
+               // Invalid Property name will throw an exception therefore use 
a try-catch block
+               try {
+                       // Ensure Wikibase client is installed
+                       if ( class_exists( 'Wikibase\Client\WikibaseClient' ) ) 
{
+                               $entityIdLookup = 
Wikibase\Client\WikibaseClient::getDefaultInstance()
+                               ->getStore()
+                               ->getEntityIdLookup();
+                               $itemId = $entityIdLookup->getEntityIdForTitle( 
$title );
+                               // check if this page has an associated item 
page
+                               $entityLookup = 
Wikibase\Client\WikibaseClient::getDefaultInstance()
+                               ->getStore()
+                               ->getEntityLookup();
+                               /** @var Wikibase\DataModel\Entity\Item $item */
+                               if ( $itemId != null ) {
+                                       $item = $entityLookup->getEntity( 
$itemId );
+                                       $statements = 
$item->getStatements()->getWithPropertyId(
+                                                       new 
Wikibase\DataModel\Entity\PropertyId(
+                                                               
$wgBannerProperty
+                                                       )
+                                               )->getBestStatements();
+                                       if ( !$statements->isEmpty() ) {
+                                               $statements = 
$statements->toArray();
+                                               $snak = 
$statements[0]->getMainSnak();
+                                               if ( $snak instanceof 
Wikibase\DataModel\Snak\PropertyValueSnak ) {
+                                                       $banner = 
$snak->getDataValue()->getValue();
+                                               }
                                        }
                                }
                        }
+               } catch ( InvalidArgumentException $e ) {
+                       // return null to safely avoid adding any Wikidata 
Banner
+                       return null;
                }
                return $banner;
        }

-- 
To view, visit https://gerrit.wikimedia.org/r/227176
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iade85972f384c2644a4b27e6bce76079c6a2697d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikidataPageBanner
Gerrit-Branch: master
Gerrit-Owner: Sumit <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to