jenkins-bot has submitted this change and it was merged.
Change subject: Combine target fetching; add importing on creation
......................................................................
Combine target fetching; add importing on creation
Contains the following minor changes:
* Simplify MassMessage::getCategoryTargets()
* Bugfix wrt. error message on API errors
Change-Id: Ic0d3d212bc51d8b5732d5371e41a2a9ad5749254
---
M MassMessage.php
M i18n/en.json
M i18n/qqq.json
M includes/MassMessage.php
M includes/SpecialCreateMassMessageList.php
M includes/SpecialEditMassMessageList.php
A modules/ext.MassMessage.create.js
M tests/MassMessageTest.php
8 files changed, 107 insertions(+), 24 deletions(-)
Approvals:
Legoktm: Looks good to me, approved
jenkins-bot: Verified
diff --git a/MassMessage.php b/MassMessage.php
index 1033937..6228d6e 100644
--- a/MassMessage.php
+++ b/MassMessage.php
@@ -127,6 +127,13 @@
'localBasePath' => $dir . '/modules',
'remoteExtPath' => 'MassMessage/modules',
);
+$wgResourceModules['ext.MassMessage.create'] = array(
+ 'scripts' => array(
+ 'ext.MassMessage.create.js',
+ ),
+ 'localBasePath' => $dir . '/modules',
+ 'remoteExtPath' => 'MassMessage/modules',
+);
// Logging
$wgLogTypes[] = 'massmessage';
diff --git a/i18n/en.json b/i18n/en.json
index 2d3a73a..c181306 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -59,6 +59,7 @@
"massmessage-create-invalidtitle": "The specified title is invalid.",
"massmessage-create-exists": "A page already exists at the specified
title.",
"massmessage-create-nopermission": "You do not have permission to
create a list at this title.",
+ "massmessage-create-invalidsource": "The specified source is not a
valid delivery list or category.",
"massmessage-create-tojsonerror": "The list could not be encoded for
storage.",
"massmessage-create-apierror": "Creating the list through the API
failed with errror code $1.",
"editmassmessagelist-legend": "Edit mass message delivery list",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 47b349a..4f4bedb 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -61,6 +61,7 @@
"massmessage-create-exists": "Error message shown on
[[Special:CreateMassMessageList]] when a page with the title already exists",
"massmessage-create-nopermission": "Error message shown on
[[Special:CreateMassMessageList]] when the user cannot create a page with the
title",
"massmessage-create-tojsonerror": "Error message shown on
[[Special:CreateMassMessageList]] when the input could not be successfully
encoded",
+ "massmessage-create-invalidsource": "Error message shown on
[[Special:CreateMassMessageList]] when the source from which to import targets
is invalid",
"massmessage-create-apierror": "Error message shown on
[[Special:CreateMassMessageList]] when the API request to create the page
failed",
"editmassmessagelist-legend": "Form legend for
[[Special:EditMassMessageList]]",
"massmessage-edit-title": "Label for an inputbox on
[[Special:EditMassMessageList]]",
diff --git a/includes/MassMessage.php b/includes/MassMessage.php
index 8bcbbe6..e29c3ac 100644
--- a/includes/MassMessage.php
+++ b/includes/MassMessage.php
@@ -146,24 +146,45 @@
}
/**
+ * Get an array of targets given a title.
+ * @param Title $spamlist
+ * @param IContextSource $context
+ * @return array|null
+ */
+ public static function getTargets( Title $spamlist, $context ) {
+ if ( !$spamlist->exists() && !$spamlist->inNamespace(
NS_CATEGORY ) ) {
+ return null;
+ }
+
+ if ( $spamlist->inNamespace( NS_CATEGORY ) ) {
+ return self::getCategoryTargets( $spamlist );
+ } elseif ( $spamlist->hasContentModel( 'MassMessageListContent'
) ) {
+ return self::getMassMessageListContentTargets(
$spamlist );
+ } elseif ( $spamlist->hasContentModel( CONTENT_MODEL_WIKITEXT )
) {
+ return self::getParserFunctionTargets( $spamlist,
$context );
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Get an array of targets from a category
* @param Title $spamlist
* @return array
*/
public static function getCategoryTargets( Title $spamlist ) {
- $cat = Category::newFromTitle( $spamlist );
- $members = $cat->getMembers();
+ $members = Category::newFromTitle( $spamlist )->getMembers();
$targets = array();
/** @var Title $member */
foreach ( $members as $member ) {
- $target = array();
- $target['title'] = $member->getPrefixedText();
- $target['wiki'] = wfWikiID();
- $targets[] = $target;
+ $targets[] = array(
+ 'title' => $member->getPrefixedText(),
+ 'wiki' => wfWikiID(),
+ );
}
- return self::normalizeTargets( $targets );
+ return $targets;
}
/**
@@ -182,7 +203,7 @@
$target['wiki'] = wfWikiID();
}
}
- return self::normalizeTargets( $targets );
+ return $targets;
}
/**
@@ -206,7 +227,7 @@
$data = unserialize( $output->getProperty(
'massmessage-targets' ) );
if ( $data ) {
- return self::normalizeTargets( $data );
+ return $data;
} else {
return array(); // No parser functions on page
}
@@ -368,13 +389,7 @@
$spamlist = self::getSpamlist( $data['spamlist'] );
// Get the array of pages to deliver to.
- if ( $spamlist->inNamespace( NS_CATEGORY ) ) {
- $pages = self::getCategoryTargets( $spamlist );
- } elseif ( $spamlist->hasContentModel( 'MassMessageListContent'
) ) {
- $pages = self::getMassMessageListContentTargets(
$spamlist );
- } else {
- $pages = self::getParserFunctionTargets( $spamlist,
$context );
- }
+ $pages = self::normalizeTargets( self::getTargets( $spamlist,
$context ) );
// Log it.
self::logToWiki( $spamlist, $context->getUser(),
$data['subject'] );
diff --git a/includes/SpecialCreateMassMessageList.php
b/includes/SpecialCreateMassMessageList.php
index 0d7b48e..ce1f9ec 100644
--- a/includes/SpecialCreateMassMessageList.php
+++ b/includes/SpecialCreateMassMessageList.php
@@ -7,6 +7,15 @@
}
/**
+ * Add ResourceLoader module and call parent implementation.
+ * @param string $par
+ */
+ public function execute( $par ) {
+ $this->getOutput()->addModules( 'ext.MassMessage.create' );
+ parent::execute( $par );
+ }
+
+ /**
* @return array
*/
protected function getFormFields() {
@@ -28,7 +37,6 @@
),
'source' => array(
'type' => 'text',
- 'disabled' => true,
'label-message' => 'massmessage-create-source',
),
);
@@ -48,11 +56,16 @@
return Status::newFatal(
'massmessage-create-nopermission' );
}
- if ( $data['content'] === 'import' ) {
+ if ( $data['content'] === 'import' ) { // Importing from an
existing list
+ $source = Title::newFromText( $data['source'] );
+ if ( !$source ) {
+ return Status::newFatal(
'massmessage-create-invalidsource' );
+ }
- // TODO: Implement importing from existing lists
- $targets = array();
-
+ $targets = $this->getTargets( $source );
+ if ( $targets === null ) {
+ return Status::newFatal(
'massmessage-create-invalidsource' );
+ }
} else {
$targets = array();
}
@@ -82,7 +95,7 @@
$api->execute();
} catch ( UsageException $e ) {
return Status::newFatal( $this->msg(
'massmessage-create-apierror',
- $e->getCodeString ) );
+ $e->getCodeString() ) );
}
$this->getOutput()->redirect( $title->getFullUrl() );
@@ -108,4 +121,26 @@
}
return $options;
}
+
+ /**
+ * Get targets from an existing delivery list or category.
+ * @param Title $source
+ * @return array|null
+ */
+ protected function getTargets( Title $source ) {
+ $pages = MassMessage::getTargets( $source, $this->getContext()
);
+ if ( $pages === null ) {
+ return null;
+ }
+
+ $targets = array();
+ foreach ( $pages as $page ) {
+ $target = array( 'title' => $page['title'] );
+ if ( $page['wiki'] !== wfWikiID() ) {
+ $target['site'] = $page['site'];
+ }
+ $targets[] = $target;
+ }
+ return $targets;
+ }
}
diff --git a/includes/SpecialEditMassMessageList.php
b/includes/SpecialEditMassMessageList.php
index 5807167..877ef8f 100644
--- a/includes/SpecialEditMassMessageList.php
+++ b/includes/SpecialEditMassMessageList.php
@@ -135,7 +135,8 @@
$api = new ApiMain( $request, true );
$api->execute();
} catch ( UsageException $e ) {
- return Status::newFatal( $this->msg(
'massmessage-edit-apierror', $e->getCodeString ) );
+ return Status::newFatal( $this->msg(
'massmessage-edit-apierror',
+ $e->getCodeString() ) );
}
$this->getOutput()->redirect( $this->title->getFullUrl() );
diff --git a/modules/ext.MassMessage.create.js
b/modules/ext.MassMessage.create.js
new file mode 100644
index 0000000..d396cf5
--- /dev/null
+++ b/modules/ext.MassMessage.create.js
@@ -0,0 +1,20 @@
+( function ( mw, $ ) {
+ $( function () {
+
+ // Set the correct field state on load.
+ if ( $( '#mw-input-wpcontent-import' ).is( ':checked' ) ) {
+ $( '#mw-input-wpsource' ).prop( 'disabled', false );
+ } else {
+ $( '#mw-input-wpsource' ).prop( 'disabled', true );
+ }
+
+ $( '#mw-input-wpcontent-new' ).click( function () {
+ $( '#mw-input-wpsource' ).prop( 'disabled', true );
+ } );
+
+ $( '#mw-input-wpcontent-import' ).click( function () {
+ $( '#mw-input-wpsource' ).prop( 'disabled', false );
+ } );
+
+ } );
+} )( mediaWiki, jQuery );
diff --git a/tests/MassMessageTest.php b/tests/MassMessageTest.php
index 9bc0bfe..910df11 100644
--- a/tests/MassMessageTest.php
+++ b/tests/MassMessageTest.php
@@ -109,7 +109,10 @@
public function testGetParserFunctionTargets( $text, $check ) {
$title = Title::newFromText( 'Input list ');
self::updatePage( $title, $text );
- $data = MassMessage::getParserFunctionTargets( $title,
RequestContext::getMain() );
+ $data = MassMessage::normalizeTargets(
+ MassMessage::getParserFunctionTargets( $title,
RequestContext::getMain() )
+ );
+
if ( empty( $check ) ) {
// Check that the spamlist is empty
$this->assertTrue( empty( $data ) );
--
To view, visit https://gerrit.wikimedia.org/r/142488
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic0d3d212bc51d8b5732d5371e41a2a9ad5749254
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/MassMessage
Gerrit-Branch: contenthandler
Gerrit-Owner: Wctaiwan <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Prtksxna <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits