jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/234929 )
Change subject: initial commit ...................................................................... initial commit Change-Id: I92b56a64a1f7d87e718259219a85423648782bf1 --- A MassMessageEmail.hooks.php A MassMessageEmail.php A extension.json A i18n/en.json A i18n/qqq.json 5 files changed, 135 insertions(+), 0 deletions(-) Approvals: jenkins-bot: Verified tosfos: Looks good to me, approved diff --git a/MassMessageEmail.hooks.php b/MassMessageEmail.hooks.php new file mode 100644 index 0000000..db09f09 --- /dev/null +++ b/MassMessageEmail.hooks.php @@ -0,0 +1,64 @@ +<?php + +/** + * This inherits from MassMessageJob, as a hacky way to get access to its protected methods. + */ +class MassMessageEmailHooks extends MassMessageJob { + + /** + * Hooks into MassMessage + * + * @param MassMessageJob $massMessageJob + * @return boolean + */ + public static function onMassMessageJobBeforeMessageSent( MassMessageJob $massMessageJob ) { + $title = $massMessageJob->getTitle(); + $user = User::newFromName( $title->getBaseText() ); + + if ( $title->getNamespace() == NS_USER || $title->getNamespace() == NS_USER_TALK ) { + if ( $user->canReceiveEmail() ) { + return self::sendMassMessageEmail( $massMessageJob ); + } + } + + //We didn't do anything. Continue execution as if we're not here. + return true; + } + + /** + * Sends the email + * + * @global string $wgArticlePath + * @global string $wgServer + * @param MassMessageJob $massMessageJob + * @return boolean + */ + public static function sendMassMessageEmail( MassMessageJob $massMessageJob ) { + $title = $massMessageJob->getTitle(); + $user = User::newFromName( $title->getBaseText() ); + $params = $massMessageJob->getParams(); + + // Generate plain text ... + $text = $massMessageJob->makeText(); + // Make sure we don't send relative links in the email. Shouldn't that be a ParserOption? + global $wgArticlePath, $wgServer; + $oldArticlePath = $wgArticlePath; + $wgArticlePath = $wgServer . $wgArticlePath; + $parser = new Parser(); + $parserOutput = $parser->parse( $text, $title, new ParserOptions() ); + // ... and also generate HTML from the wikitext, which makes sense since + // we're sending an email, but it requires $wgAllowHTMLEmail + $html = $parserOutput->getText(); + $status = $user->sendMail( $params['subject'], array( 'text' => $text, 'html' => $html ) ); + $wgArticlePath = $oldArticlePath; + if ( !$status->isGood() ) { + /** @todo This should really be sending a code - not a message */ + $massMessageJob->logLocalFailure( $status->getMessage() ); + return true; + // If the status isn't good, MassMessage will proceed to post to the user's page instead. + } else { + // Good status - stop execution since we already emailed the user. + return false; + } + } +} diff --git a/MassMessageEmail.php b/MassMessageEmail.php new file mode 100644 index 0000000..8dd0cc6 --- /dev/null +++ b/MassMessageEmail.php @@ -0,0 +1,32 @@ +<?php +/** + * Adds email capability to the MassMessage extension + * Tested with MassMessage 0.4.0 + * See https://mediawiki.org/wiki/Extension:MassMessage + * + * @file + * @ingroup Extensions + * @author Ike Hecht + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + * @todo Add extension.json + */ + +if ( !defined( 'MEDIAWIKI' ) ) { + exit; +} + +$wgExtensionCredits['other'][] = array( + 'path' => __FILE__, + 'name' => 'MassMessageEmail', + 'author' => 'Ike Hecht', + 'url' => 'https://www.mediawiki.org/wiki/Extension:MassMessageEmail', + 'descriptionmsg' => 'massmessageemail-desc', + 'version' => '0.2.0', + 'license-name' => 'GPL-2.0+', +); + +$wgMessagesDirs['MassMessageEmail'] = __DIR__ . '/i18n'; + +$wgAutoloadClasses['MassMessageEmailHooks'] = __DIR__ . '/MassMessageEmail.hooks.php'; + +$wgHooks['MassMessageJobBeforeMessageSent'][] = 'MassMessageEmailHooks::onMassMessageJobBeforeMessageSent'; diff --git a/extension.json b/extension.json new file mode 100644 index 0000000..facfa78 --- /dev/null +++ b/extension.json @@ -0,0 +1,23 @@ +{ + "name": "MassMessageEmail", + "version": "0.2.0", + "author": "Ike Hecht", + "url": "https://www.mediawiki.org/wiki/Extension:MassMessageEmail", + "descriptionmsg": "massmessageemail-desc", + "license-name": "GPL-2.0+", + "type": "other", + "MessagesDirs": { + "MassMessageEmail": [ + "i18n" + ] + }, + "AutoloadClasses": { + "MassMessageEmailHooks": "MassMessageEmail.hooks.php" + }, + "Hooks": { + "MassMessageJobBeforeMessageSent": [ + "MassMessageEmailHooks::onMassMessageJobBeforeMessageSent" + ] + }, + "manifest_version": 1 +} diff --git a/i18n/en.json b/i18n/en.json new file mode 100644 index 0000000..6da3492 --- /dev/null +++ b/i18n/en.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Ike Hecht" + ] + }, + "massmessageemail-desc": "Adds email capability to the MassMessage extension" +} diff --git a/i18n/qqq.json b/i18n/qqq.json new file mode 100644 index 0000000..18e8055 --- /dev/null +++ b/i18n/qqq.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "Ike Hecht" + ] + }, + "massmessageemail-desc": "{{desc|name=Mass Message Email|url=http://www.mediawiki.org/wiki/Extension:MassMessageEmail}}" +} -- To view, visit https://gerrit.wikimedia.org/r/234929 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I92b56a64a1f7d87e718259219a85423648782bf1 Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/extensions/MassMessageEmail Gerrit-Branch: master Gerrit-Owner: tosfos <tos...@yahoo.com> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Aklapper <aklap...@wikimedia.org> Gerrit-Reviewer: Hashar <has...@free.fr> Gerrit-Reviewer: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: Siebrand <siebr...@kitano.nl> Gerrit-Reviewer: Wctaiwan <wctai...@gmail.com> Gerrit-Reviewer: jenkins-bot <> Gerrit-Reviewer: tosfos <tos...@yahoo.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits