mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-09-23 10:29:11 +00:00
EventDispatcher: Generate dt-added-topic events
Change-Id: I98b67e016995866558274809743fa21ed23ee063
This commit is contained in:
parent
fd519ff015
commit
4367595bfd
|
@ -6,6 +6,7 @@ use Config;
|
|||
use LogicException;
|
||||
use MediaWiki\Extension\DiscussionTools\ThreadItem\ContentCommentItem;
|
||||
use MediaWiki\Extension\DiscussionTools\ThreadItem\ContentThreadItem;
|
||||
use Title;
|
||||
use Wikimedia\Assert\Assert;
|
||||
use Wikimedia\Parsoid\DOM\Comment;
|
||||
use Wikimedia\Parsoid\DOM\Element;
|
||||
|
@ -761,4 +762,14 @@ class CommentUtils {
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ID for a new topics subscription from a page title
|
||||
*
|
||||
* @param Title $title Page title
|
||||
* @return string ID for a new topics subscription
|
||||
*/
|
||||
public static function getNewTopicsSubscriptionId( Title $title ) {
|
||||
return "p-topics-{$title->getNamespace()}:{$title->getDBkey()}";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,6 +92,7 @@ class EchoHooks {
|
|||
case 'dt-subscribed-new-comment':
|
||||
$bundleString = $event->getType() . '-' . $event->getExtraParam( 'subscribed-comment-name' );
|
||||
break;
|
||||
case 'dt-added-topic':
|
||||
case 'dt-removed-topic':
|
||||
$bundleString = $event->getType() . '-' . $event->getTitle()->getNamespace()
|
||||
. '-' . $event->getTitle()->getDBkey();
|
||||
|
|
|
@ -17,6 +17,7 @@ use EchoEvent;
|
|||
use ExtensionRegistry;
|
||||
use IDBAccessObject;
|
||||
use Iterator;
|
||||
use MediaWiki\Extension\DiscussionTools\CommentUtils;
|
||||
use MediaWiki\Extension\DiscussionTools\ContentThreadItemSet;
|
||||
use MediaWiki\Extension\DiscussionTools\Hooks\HookUtils;
|
||||
use MediaWiki\Extension\DiscussionTools\SubscriptionItem;
|
||||
|
@ -226,6 +227,13 @@ class EventDispatcher {
|
|||
|
||||
$newHeadings = static::groupSubscribableHeadings( $newItemSet->getThreads() );
|
||||
$oldHeadings = static::groupSubscribableHeadings( $oldItemSet->getThreads() );
|
||||
|
||||
$addedHeadings = [];
|
||||
foreach ( static::findAddedItems( $oldHeadings, $newHeadings ) as $newHeading ) {
|
||||
Assert::precondition( $newHeading instanceof ContentHeadingItem, 'Must be ContentHeadingItem' );
|
||||
$addedHeadings[] = $newHeading;
|
||||
}
|
||||
|
||||
$removedHeadings = [];
|
||||
// Pass swapped parameters to findAddedItems() to find *removed* items
|
||||
foreach ( static::findAddedItems( $newHeadings, $oldHeadings ) as $oldHeading ) {
|
||||
|
@ -293,6 +301,10 @@ class EventDispatcher {
|
|||
continue;
|
||||
}
|
||||
$events[] = [
|
||||
// This probably should've been called "dt-new-comment": this code is
|
||||
// unaware if there are any subscriptions to the containing topic and
|
||||
// an event is generated for every comment posted.
|
||||
// However, changing this would require a complex migration.
|
||||
'type' => 'dt-subscribed-new-comment',
|
||||
'title' => $title,
|
||||
'extra' => [
|
||||
|
@ -325,6 +337,35 @@ class EventDispatcher {
|
|||
'agent' => $user,
|
||||
];
|
||||
}
|
||||
|
||||
$titleObj = Title::castFromPageIdentity( $title );
|
||||
if ( $titleObj ) {
|
||||
foreach ( $addedHeadings as $newHeading ) {
|
||||
// Don't use $event here as that already exists as a reference from above
|
||||
$addTopicEvent = [
|
||||
'type' => 'dt-added-topic',
|
||||
'title' => $title,
|
||||
'extra' => [
|
||||
// As no one can be subscribed to a topic before it has been created,
|
||||
// we will notify users who have subscribed to the whole page.
|
||||
'subscribed-comment-name' => CommentUtils::getNewTopicsSubscriptionId( $titleObj ),
|
||||
'heading-id' => $newHeading->getId(),
|
||||
'heading-name' => $newHeading->getName(),
|
||||
'section-title' => $newHeading->getLinkableTitle(),
|
||||
'revid' => $newRevRecord->getId(),
|
||||
],
|
||||
'agent' => $user,
|
||||
];
|
||||
// Add metadata about the accompanying comment
|
||||
$firstComment = $newHeading->getOldestReply();
|
||||
if ( $firstComment ) {
|
||||
$addTopicEvent['extra']['comment-id'] = $firstComment->getId();
|
||||
$addTopicEvent['extra']['comment-name'] = $firstComment->getName();
|
||||
$addTopicEvent['extra']['content'] = $firstComment->getBodyText( true );
|
||||
}
|
||||
$events[] = $addTopicEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -12,5 +12,20 @@
|
|||
"mentioned-users": []
|
||||
},
|
||||
"agent": {}
|
||||
},
|
||||
{
|
||||
"type": "dt-added-topic",
|
||||
"title": {},
|
||||
"extra": {
|
||||
"subscribed-comment-name": "p-topics-1:MediaWiki\\Extension\\DiscussionTools\\Tests\\EventDispatcherTest",
|
||||
"heading-id": "h-C-2020-01-01T00:02:00.000Z",
|
||||
"heading-name": "h-Y-2020-01-01T00:02:00.000Z",
|
||||
"section-title": "C",
|
||||
"revid": null,
|
||||
"comment-id": "c-Y-2020-01-01T00:02:00.000Z-C",
|
||||
"comment-name": "c-Y-2020-01-01T00:02:00.000Z",
|
||||
"content": "D."
|
||||
},
|
||||
"agent": {}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -12,5 +12,20 @@
|
|||
"mentioned-users": []
|
||||
},
|
||||
"agent": {}
|
||||
},
|
||||
{
|
||||
"type": "dt-added-topic",
|
||||
"title": {},
|
||||
"extra": {
|
||||
"subscribed-comment-name": "p-topics-1:MediaWiki\\Extension\\DiscussionTools\\Tests\\EventDispatcherTest",
|
||||
"heading-id": "h-E-2020-01-01T00:03:00.000Z",
|
||||
"heading-name": "h-Z-2020-01-01T00:03:00.000Z",
|
||||
"section-title": "E",
|
||||
"revid": null,
|
||||
"comment-id": "c-Z-2020-01-01T00:03:00.000Z-E",
|
||||
"comment-name": "c-Z-2020-01-01T00:03:00.000Z",
|
||||
"content": "F."
|
||||
},
|
||||
"agent": {}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1 +1,17 @@
|
|||
[]
|
||||
[
|
||||
{
|
||||
"type": "dt-added-topic",
|
||||
"title": {},
|
||||
"extra": {
|
||||
"subscribed-comment-name": "p-topics-1:MediaWiki\\Extension\\DiscussionTools\\Tests\\EventDispatcherTest",
|
||||
"heading-id": "h-E-2020-01-01T00:03:00.000Z",
|
||||
"heading-name": "h-X-2020-01-01T00:03:00.000Z",
|
||||
"section-title": "E",
|
||||
"revid": null,
|
||||
"comment-id": "c-X-2020-01-01T00:03:00.000Z-E",
|
||||
"comment-name": "c-X-2020-01-01T00:03:00.000Z",
|
||||
"content": "F."
|
||||
},
|
||||
"agent": {}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -12,5 +12,20 @@
|
|||
"mentioned-users": []
|
||||
},
|
||||
"agent": {}
|
||||
},
|
||||
{
|
||||
"type": "dt-added-topic",
|
||||
"title": {},
|
||||
"extra": {
|
||||
"subscribed-comment-name": "p-topics-1:MediaWiki\\Extension\\DiscussionTools\\Tests\\EventDispatcherTest",
|
||||
"heading-id": "h-D-A-2020-01-01T00:03:00.000Z",
|
||||
"heading-name": "h-Z-2020-01-01T00:03:00.000Z",
|
||||
"section-title": "D",
|
||||
"revid": null,
|
||||
"comment-id": "c-Z-2020-01-01T00:03:00.000Z-D",
|
||||
"comment-name": "c-Z-2020-01-01T00:03:00.000Z",
|
||||
"content": "E."
|
||||
},
|
||||
"agent": {}
|
||||
}
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue