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