Send mentions when editing multiple sections in between sections.

This patch fixes mentions not being send when multiple sections were added
in between sections.

Since we only want to send mentions when userlinks and signature are present
in the same section a new method was added extracting sections and the related
content from an addition. The results are checked whether a section content
contains a signature and might be relevant for mentions.

Bug: T141863
Change-Id: I434c664552bbadbeef6e897e20703e813f5a4c52
This commit is contained in:
WMDE-Fisch 2016-08-09 18:20:50 +02:00
parent 39720f926b
commit 4ac1711be8
6 changed files with 182 additions and 19 deletions

View file

@ -176,6 +176,9 @@ $wgEchoMaxMentionsCount = 50;
// Enable this when you want to enable mention failure notifications for the users.
$wgEchoMentionStatusNotifications = false;
// Disable this when you want to disable mentions for multiple section edits.
$wgEchoMentionsOnMultipleSectionEdits = true;
// The time interval between each bundle email in seconds
// set a small number for test wikis, should set this to 0 to disable email bundling
// if there is no delay queue support

View file

@ -18,6 +18,7 @@ abstract class EchoDiscussionParser {
* @return null
*/
static function generateEventsForRevision( Revision $revision ) {
global $wgEchoMentionsOnMultipleSectionEdits;
// use slave database if there is a previous revision
if ( $revision->getPrevious() ) {
$title = Title::newFromID( $revision->getPage() );
@ -53,20 +54,11 @@ abstract class EchoDiscussionParser {
$header = self::extractHeader( $content );
$userLinks = self::getUserLinks( $content, $title );
self::generateMentionEvents( $header, $userLinks, $content, $revision, $user );
} elseif ( $action['type'] == 'add-section-multiple' ) {
} elseif ( $action['type'] == 'add-section-multiple' && $wgEchoMentionsOnMultipleSectionEdits ) {
$content = self::stripHeader( $action['content'] );
$content = self::stripSignature( $content );
$userLinks = self::getUserLinks( $content, $title );
if ( $userLinks ) {
$logger->debug(
'Triggered add-section-multiple action with user links by {user} on {diff}',
array(
'user' => $user->getName(),
'diff' => $diffUrl,
'user-links' => $userLinks,
)
);
}
self::generateMentionEvents( $action['header'], $userLinks, $content, $revision, $user );
} elseif ( $action['type'] === 'unknown-signed-change' ) {
$userLinks = array_diff_key(
self::getUserLinks( $action['new_content'], $title ) ?: [],
@ -757,7 +749,7 @@ abstract class EchoDiscussionParser {
$content = substr( $text, $matches[0][$i][1] );
}
$sections[] = array(
'header' => $matches[0][$i][0],
'header' => self::extractHeader( $matches[0][$i][0] ),
'content' => trim( $content )
);
}

View file

@ -453,6 +453,85 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
'title' => 'UTPage',
'expected' => array(),
),
array(
'new' => 747798770,
'old' => 747798765,
'username' => 'Admin',
'lang' => 'en',
'pages' => array(),
'title' => 'UTPage',
'expected' => array(
array(
'type' => 'mention',
'agent' => 'Admin',
'section-title' => 'Section 1.5',
'subject-name' => null,
'notifyAgent' => null,
),
array(
'type' => 'mention-success',
'agent' => 'Admin',
'section-title' => 'Section 1.5',
'subject-name' => 'Test11',
'notifyAgent' => true,
),
),
),
array(
'new' => 747798771,
'old' => 747798765,
'username' => 'Admin',
'lang' => 'en',
'pages' => array(),
'title' => 'UTPage',
'expected' => array(
array(
'type' => 'mention-failure',
'agent' => 'Admin',
'section-title' => 'Section 1.5',
'subject-name' => 'NoUser1.5',
'notifyAgent' => true,
),
array(
'type' => 'mention-failure',
'agent' => 'Admin',
'section-title' => 'Section 2',
'subject-name' => 'NoUser2',
'notifyAgent' => true,
),
),
),
array(
'new' => 747798772,
'old' => 747798765,
'username' => 'Admin',
'lang' => 'en',
'pages' => array(),
'title' => 'UTPage',
'expected' => array(
array(
'type' => 'mention-failure',
'agent' => 'Admin',
'section-title' => 'Section 1',
'subject-name' => 'NoUser1',
'notifyAgent' => true,
),
array(
'type' => 'mention-failure',
'agent' => 'Admin',
'section-title' => 'Section 1.75',
'subject-name' => 'NoUser1.75',
'notifyAgent' => true,
),
array(
'type' => 'mention-failure',
'agent' => 'Admin',
'section-title' => 'Section 2',
'subject-name' => 'NoUser2',
'notifyAgent' => true,
),
),
),
);
}
@ -481,6 +560,8 @@ class EchoDiscussionParserTest extends MediaWikiTestCase {
// enable mention failure and success notifications
$this->setMwGlobals( 'wgEchoMentionStatusNotifications', true );
// enable multiple sections mentions
$this->setMwGlobals( 'wgEchoMentionsOnMultipleSectionEdits', true );
EchoDiscussionParser::generateEventsForRevision( $revision );
@ -516,7 +597,7 @@ TEXT
,
),
array(
'header' => '== Headline ==',
'header' => 'Headline',
'content' =>
<<<TEXT
== Headline ==
@ -535,7 +616,7 @@ TEXT
,
'result' => array(
array(
'header' => '== Headline ==',
'header' => 'Headline',
'content' =>
<<<TEXT
== Headline ==
@ -561,7 +642,7 @@ TEXT
'content' => 'Content 0',
),
array(
'header' => '== Headline 1 ==',
'header' => 'Headline 1',
'content' =>
<<<TEXT
== Headline 1 ==
@ -570,7 +651,7 @@ TEXT
,
),
array(
'header' => '=== Headline 2 ===',
'header' => 'Headline 2',
'content' =>
<<<TEXT
=== Headline 2 ===
@ -591,7 +672,7 @@ TEXT
,
'result' => array(
array(
'header' => '== Headline 1 ==',
'header' => 'Headline 1',
'content' =>
<<<TEXT
== Headline 1 ==
@ -600,7 +681,7 @@ TEXT
,
),
array(
'header' => '=== Headline 2 ===',
'header' => 'Headline 2',
'content' =>
<<<TEXT
=== Headline 2 ===
@ -628,7 +709,7 @@ TEXT
,
),
array(
'header' => '=== Headline 1 ===',
'header' => 'Headline 1',
'content' =>
<<<TEXT
=== Headline 1 ===

View file

@ -0,0 +1,25 @@
Simultaneously edit multiple sections
== Section 1 ==
Content 1
New Content with userlink ( dont try to mention this one )
[[User:NoUser1]]
== Section 1.5 ==
New section in between with userlink & signature ( try to mention this one )
[[User:Test11]]
[[:User:Admin|Admin]] 13:22, 23 June 2016 (UTC)
== Section 2 ==
Content 2
New Content with userlink ( dont try to mention this one )
[[User:NoUser2]]

View file

@ -0,0 +1,27 @@
Simultaneously edit multiple sections
== Section 1 ==
Content 1
New Content with userlink ( dont try to mention this one )
[[User:NoUser1]]
== Section 1.5 ==
New section in between with userlink & signature ( try to mention this one )
[[User:NoUser1.5]]
[[:User:Admin|Admin]] 13:22, 23 June 2016 (UTC)
== Section 2 ==
Content 2
New Content with userlink & signature ( try to mention this one )
[[User:NoUser2]]
[[:User:Admin|Admin]] 13:22, 23 June 2016 (UTC)

View file

@ -0,0 +1,35 @@
Simultaneously edit multiple sections
== Section 1 ==
Content 1
New Content with userlink & signature ( try to mention this one )
[[User:NoUser1]]
[[:User:Admin|Admin]] 13:22, 23 June 2016 (UTC)
== Section 1.5 ==
New section in between with userlink ( don't try to mention this one )
[[User:NoUser1.5]]
== Section 1.75 ==
New section in between with userlink & signature ( try to mention this one )
[[User:NoUser1.75]]
[[:User:Admin|Admin]] 13:22, 23 June 2016 (UTC
== Section 2 ==
Content 2
New Content with userlink & signature ( try to mention this one )
[[User:NoUser2]]
[[:User:Admin|Admin]] 13:22, 23 June 2016 (UTC)