jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/397909 )

Change subject: Update for Block::setBlocker() requiring a valid user or 
interwiki username
......................................................................


Update for Block::setBlocker() requiring a valid user or interwiki username

In prepraration for the upcoming actor table, Block requires the blockers
to either be a local user or an interwiki username.

We can use CentralIdLookup to check whether the blocker on the foreign wiki
is the same as the local wiki, otherwise fallback to an interwiki username
that uses the wiki as a prefix.

Bug: T182344
Change-Id: Ia3c85fced974a4edabc172bd3ef6a7a255ffa462
---
M includes/GlobalBlock.php
1 file changed, 28 insertions(+), 1 deletion(-)

Approvals:
  jenkins-bot: Verified
  Anomie: Looks good to me, approved



diff --git a/includes/GlobalBlock.php b/includes/GlobalBlock.php
index 46f1ded..93cafc9 100644
--- a/includes/GlobalBlock.php
+++ b/includes/GlobalBlock.php
@@ -14,7 +14,7 @@
                parent::__construct();
 
                $this->error = $error;
-               $this->setBlocker( $block->gb_by );
+               $this->setGlobalBlocker( $block );
        }
 
        /**
@@ -23,4 +23,31 @@
        public function getPermissionsError( IContextSource $context ) {
                return $this->error;
        }
+
+       /**
+        * Block requires that the blocker exist or be an interwiki username, 
so do
+        * some validation to figure out what we need to use (T182344)
+        *
+        * @param stdClass $block DB row from globalblocks table
+        */
+       public function setGlobalBlocker( stdClass $block ) {
+               // If the block was inserted from this wiki, then we know the 
blocker exists
+               if ( $block->gb_by_wiki === wfWikiID() ) {
+                       $this->setBlocker( $block->gb_by );
+                       return;
+               }
+               $user = User::newFromName( $block->gb_by );
+               // If the blocker is the same user on the foreign wiki and the 
current wiki
+               // then we can use the username
+               $lookup = CentralIdLookup::factory();
+               if ( $user->getId() && $lookup->isAttached( $user )
+                       && $lookup->isAttached( $user, $block->gb_by_wiki )
+               ) {
+                       $this->setBlocker( $user );
+                       return;
+               }
+
+               // They don't exist locally, so we need to use an interwiki 
username
+               $this->setBlocker( "{$block->gb_by_wiki}>{$block->gb_by}" );
+       }
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ia3c85fced974a4edabc172bd3ef6a7a255ffa462
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/GlobalBlocking
Gerrit-Branch: master
Gerrit-Owner: Legoktm <lego...@member.fsf.org>
Gerrit-Reviewer: Anomie <bjor...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to