Legoktm has uploaded a new change for review.

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


Change subject: [WIP] Add the ability to send messages using the user's account
......................................................................

[WIP] Add the ability to send messages using the user's account

Change-Id: Ibf8f86c549a2ff0056828ef612ede3fccb0edb2d
---
M MassMessage.body.php
M MassMessage.php
M MassMessageJob.php
M SpecialMassMessage.php
M tests/MassMessageTest.php
5 files changed, 54 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MassMessage 
refs/changes/69/98469/1

diff --git a/MassMessage.body.php b/MassMessage.body.php
index 0a76dee..33c995a 100644
--- a/MassMessage.body.php
+++ b/MassMessage.body.php
@@ -31,13 +31,35 @@
        }
 
        /**
+        * @param string $name user name
+        * @param string $wiki wikiID we know the account exists on
+        * @return User
+        */
+       public static function getMessengerUser( $name = '', $wiki = '' ) {
+               global $wgMassMessageUseSystemAccount;
+               if ( $wgMassMessageUseSystemAccount || !$name || !$wiki ) {
+                       return self::getSystemMessengerUser();
+               }
+               $user = User::newFromName( $name );
+               if ( class_exists( 'CentralAuthUser' ) ) {
+                       $caUser = CentralAuthUser::getInstance( $user );
+                       return $caUser->attachedOn( $wiki ) && 
$caUser->attachedOn( wfWikiID() )
+                               ? $user
+                               : self::getSystemMessengerUser();
+               } else {
+                       return $user;
+               }
+       }
+
+
+       /**
         * Sets up the messenger account for our use if it hasn't been already.
         * Based on code from AbuseFilter
         * https://mediawiki.org/wiki/Extension:AbuseFilter
         *
         * @return User
         */
-       public static function getMessengerUser() {
+       public static function getSystemMessengerUser() {
                global $wgMassMessageAccountUsername;
                // Function kinda copied from the AbuseFilter
                $user = User::newFromName( $wgMassMessageAccountUsername );
diff --git a/MassMessage.php b/MassMessage.php
index 344b39f..3ce6d1a 100644
--- a/MassMessage.php
+++ b/MassMessage.php
@@ -51,6 +51,16 @@
  */
 $wgAllowGlobalMessaging = true;
 
+/**
+ * Whether to use a system account to send messages
+ *
+ * Otherwise the user who sent the message's account
+ * will be used. If set to false, it is assumed
+ * that you are using shared user tables or have
+ * Extension:CentralAuth installed.
+ */
+$wgMassMessageUseSystemAccount = true;
+
 $wgExtensionCredits['specialpage'][] = array(
        'path' => __FILE__,
        'name' => 'MassMessage',
diff --git a/MassMessageJob.php b/MassMessageJob.php
index 07d9414..4828327 100644
--- a/MassMessageJob.php
+++ b/MassMessageJob.php
@@ -80,7 +80,7 @@
         */
        function logLocalSkip( $reason ) {
                $logEntry = new ManualLogEntry( 'massmessage', $reason );
-               $logEntry->setPerformer( MassMessage::getMessengerUser() );
+               $logEntry->setPerformer( $this->getMessengerUser() );
                $logEntry->setTarget( $this->title );
                $logEntry->setParameters( array(
                        '4::subject' => $this->params['subject']
@@ -99,7 +99,9 @@
        function logLocalFailure( $reason ) {
 
                $logEntry = new ManualLogEntry( 'massmessage', 'failure' );
-               $logEntry->setPerformer( MassMessage::getMessengerUser() );
+               // Note that we use the system account here, we don't want
+               // these entries to show up in the user's log
+               $logEntry->setPerformer( MassMessage::getSystemMessengerUser() 
);
                $logEntry->setTarget( $this->title );
                $logEntry->setParameters( array(
                        '4::subject' => $this->params['subject'],
@@ -156,7 +158,7 @@
        }
 
        function editPage() {
-               $user = MassMessage::getMessengerUser();
+               $user = $this->getMessengerUser();
                $params = array(
                        'action' => 'edit',
                        'title' => $this->title->getPrefixedText(),
@@ -172,7 +174,7 @@
        }
 
        function addLQTThread() {
-               $user = MassMessage::getMessengerUser();
+               $user = $this->getMessengerUser();
                $params = array(
                        'action' => 'threadaction',
                        'threadaction' => 'newthread',
@@ -183,6 +185,16 @@
                ); // LQT will automatically mark the edit as bot if we're a bot
 
                $this->makeAPIRequest( $params );
+       }
+
+       /**
+        * @return User
+        */
+       function getMessengerUser() {
+               return MassMessage::getMessengerUser(
+                       $this->params['comment'][0],
+                       $this->params['comment'][1]
+               );
        }
 
        /**
@@ -203,7 +215,7 @@
                        $params,
                        true // was posted?
                );
-               $wgUser = MassMessage::getMessengerUser();
+               $wgUser = $this->getMessengerUser();
                // New user objects will use $wgRequest, so we set that
                // to our DerivativeRequest, so we don't run into any issues
 
diff --git a/SpecialMassMessage.php b/SpecialMassMessage.php
index beb692a..dbaf006 100644
--- a/SpecialMassMessage.php
+++ b/SpecialMassMessage.php
@@ -295,7 +295,8 @@
 
                // Hooks not being run: EditPageGetPreviewContent, 
EditPageGetPreviewText
 
-               $content = $content->preSaveTransform( $firstTarget, 
MassMessage::getMessengerUser(), $parserOptions );
+               $user = MassMessage::getMessengerUser( 
$this->getUser()->getName(), wfWikiID() );
+               $content = $content->preSaveTransform( $firstTarget, $user, 
$parserOptions );
                $parserOutput = $content->getParserOutput( $firstTarget, null, 
$parserOptions );
                $previewHTML = $parserOutput->getText();
                $this->getOutput()->addWikiMsg( 'massmessage-just-preview' );
diff --git a/tests/MassMessageTest.php b/tests/MassMessageTest.php
index 13250eb..bf98862 100644
--- a/tests/MassMessageTest.php
+++ b/tests/MassMessageTest.php
@@ -159,14 +159,14 @@
        }
 
        /**
-        * @covers MassMessage::getMessengerUser
+        * @covers MassMessage::getSystemMessengerUser
         * @dataProvider provideGetMessengerUser
         * @param $name
         */
        public function testGetMessengerUser( $name ) {
                global $wgMassMessageAccountUsername;
                $wgMassMessageAccountUsername = $name;
-               $user = MassMessage::getMessengerUser();
+               $user = MassMessage::getSystemMessengerUser();
                $this->assertEquals( $user->getName(), $name );
                $this->assertTrue( in_array( 'bot' , $user->getGroups() ) );
                $this->assertEquals( $user->mPassword, '' );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibf8f86c549a2ff0056828ef612ede3fccb0edb2d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MassMessage
Gerrit-Branch: master
Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com>

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

Reply via email to