Aude has uploaded a new change for review.
https://gerrit.wikimedia.org/r/131023
Change subject: Improve badge handling in SpecialSetSiteLink and fix uncaught
exception
......................................................................
Improve badge handling in SpecialSetSiteLink and fix uncaught exception
Bug: 63391
Change-Id: I9f5a58622f2cf242a2d53d639265c03707a8f85f
---
M repo/includes/specials/SpecialSetSiteLink.php
1 file changed, 59 insertions(+), 30 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/23/131023/1
diff --git a/repo/includes/specials/SpecialSetSiteLink.php
b/repo/includes/specials/SpecialSetSiteLink.php
index cc92aa5..0f23643 100644
--- a/repo/includes/specials/SpecialSetSiteLink.php
+++ b/repo/includes/specials/SpecialSetSiteLink.php
@@ -11,6 +11,7 @@
use Wikibase\ChangeOp\ChangeOpSiteLink;
use Wikibase\CopyrightMessageBuilder;
use Wikibase\DataModel\Entity\Entity;
+use Wikibase\DataModel\Entity\EntityIdParsingException;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\Summary;
@@ -18,6 +19,9 @@
/**
* Special page for setting the sitepage of a Wikibase entity.
+ *
+ * @todo put more handling into ChangeOpSiteLink
+ * @todo use WikibaseExceptionLocalizer for error handling
*
* @since 0.4
* @licence GNU GPL v2+
@@ -63,6 +67,16 @@
protected $rightsText;
/**
+ * @var EntityIdParser
+ */
+ private $entityIdParser;
+
+ /**
+ * @var array
+ */
+ private $badgeItems;
+
+ /**
* @since 0.4
*/
public function __construct() {
@@ -72,6 +86,10 @@
$this->rightsUrl = $settings->getSetting( 'dataRightsUrl' );
$this->rightsText = $settings->getSetting( 'dataRightsText' );
+
+ // @todo inject the dependencies
+ $this->entityIdParser =
WikibaseRepo::getDefaultInstance()->getEntityIdParser();
+ $this->badgeItems = $settings->getSetting( 'badgeItems' );
}
/**
@@ -367,47 +385,58 @@
* @return ItemId[]|boolean
*/
protected function parseBadges( array $badges, Status $status ) {
- $repo = WikibaseRepo::getDefaultInstance();
-
- $entityIdParser = $repo->getEntityIdParser();
-
$badgesObjects = array();
foreach ( $badges as $badge ) {
- try {
- $badgeId = $entityIdParser->parse( $badge );
- } catch( ParseException $e ) {
- $status->fatal( 'wikibase-setentity-invalid-id'
);
+ $badgeId = $this->extractBadgeId( $badge, $status );
+
+ if ( $badgeId ) {
+ $badgesObjects[] = $badgeId;
+ } else {
return false;
}
-
- if ( !( $badgeId instanceof ItemId ) ) {
- $status->fatal(
'wikibase-setsitelink-not-item', $badgeId->getPrefixedId() );
- return false;
- }
-
- $badgeItems =
WikibaseRepo::getDefaultInstance()->getSettings()
- ->getSetting( 'badgeItems' );
-
- if ( !array_key_exists( $badgeId->getPrefixedId(),
$badgeItems ) ) {
- $status->fatal(
'wikibase-setsitelink-not-badge', $badgeId->getPrefixedId() );
- return false;
- }
-
- $itemTitle = $this->getEntityTitle( $badgeId );
-
- if ( is_null( $itemTitle ) || !$itemTitle->exists() ) {
- $status->fatal( 'wikibase-setentity-invalid-id'
);
- return false;
- }
-
- $badgesObjects[] = $badgeId;
}
return $badgesObjects;
}
/**
+ * @param string $badge
+ * @param Status $status
+ *
+ * @return ItemId|boolean
+ */
+ private function extractBadgeId( $badge, Status $status ) {
+ try {
+ $badgeId = $this->entityIdParser->parse( $badge );
+ } catch( EntityIdParsingException $e ) {
+ $status->fatal( 'wikibase-wikibaserepopage-invalid-id',
$badge );
+ return false;
+ }
+
+ if ( !( $badgeId instanceof ItemId ) ) {
+ $status->fatal( 'wikibase-setsitelink-not-item',
$badgeId->getSerialization() );
+ return false;
+ }
+
+ $prefixedId = $badgeId->getSerialization();
+
+ if ( !array_key_exists( $prefixedId, $this->badgeItems ) ) {
+ $status->fatal( 'wikibase-setsitelink-not-badge',
$prefixedId );
+ return false;
+ }
+
+ $itemTitle = $this->getEntityTitle( $badgeId );
+
+ if ( is_null( $itemTitle ) || !$itemTitle->exists() ) {
+ $status->fatal( 'wikibase-wikibaserepopage-invalid-id',
$prefixedId );
+ return false;
+ }
+
+ return $badgeId;
+ }
+
+ /**
* Setting the sitepage of the entity.
*
* @since 0.4
--
To view, visit https://gerrit.wikimedia.org/r/131023
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9f5a58622f2cf242a2d53d639265c03707a8f85f
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