jenkins-bot has submitted this change and it was merged.
Change subject: New-topic recentchanges must use the board title
......................................................................
New-topic recentchanges must use the board title
Currently watchlisting a board does not give you entries
for new topics on that board, they are being inserted against
the topic.
The patch adds a new option, 'rc_title', that allows the action
configuration to toggle between using the owner or article title
as the recent change source.
Change-Id: Id60c6d7b05650ac12567626083814bf6526575c1
---
M FlowActions.php
M autoload.php
M container.php
M includes/Data/RecentChanges/HeaderRecentChanges.php
M includes/Data/RecentChanges/PostRevisionRecentChanges.php
M includes/Data/RecentChanges/PostSummaryRecentChanges.php
A includes/Data/RecentChanges/RecentChangeFactory.php
M includes/Data/RecentChanges/RecentChanges.php
A tests/phpunit/Data/RecentChanges/RecentChangesTest.php
9 files changed, 158 insertions(+), 10 deletions(-)
Approvals:
Matthias Mullie: Looks good to me, approved
jenkins-bot: Verified
diff --git a/FlowActions.php b/FlowActions.php
index 012009d..8b7a45a 100644
--- a/FlowActions.php
+++ b/FlowActions.php
@@ -29,6 +29,11 @@
* * bundle: array with, again, all of the above information if multiple
types
* should be bundled (then the bundle i18n & class will be used to generate
* the list-item; clicking on it will reveal the individual history
entries)
+ * * watch: Used by the WatchTopicListener to auto-subscribe users to topics.
Only
+ * value value currently is immediate.
+ * * immediate: watchlist the title in the current process
+ * * rc_title: Either 'article' or 'owner' to select between
Workflow::getArticleTitle
+ * or Workflow::getOwnerTitle being used as the related recentchanges
entry on insert
*/
$wgFlowActions = array(
'create-header' => array(
@@ -150,6 +155,7 @@
'performs-writes' => true,
'log_type' => false,
'rc_insert' => true,
+ 'rc_title' => 'owner',
'permissions' => array(
PostRevision::MODERATED_NONE => '',
),
diff --git a/autoload.php b/autoload.php
index 35a6e09..836b397 100644
--- a/autoload.php
+++ b/autoload.php
@@ -97,6 +97,7 @@
$wgAutoloadClasses['Flow\\Data\\RecentChanges\\HeaderRecentChanges'] = __DIR__
. '/includes/Data/RecentChanges/HeaderRecentChanges.php';
$wgAutoloadClasses['Flow\\Data\\RecentChanges\\PostRevisionRecentChanges'] =
__DIR__ . '/includes/Data/RecentChanges/PostRevisionRecentChanges.php';
$wgAutoloadClasses['Flow\\Data\\RecentChanges\\PostSummaryRecentChanges'] =
__DIR__ . '/includes/Data/RecentChanges/PostSummaryRecentChanges.php';
+$wgAutoloadClasses['Flow\\Data\\RecentChanges\\RecentChangeFactory'] = __DIR__
. '/includes/Data/RecentChanges/RecentChangeFactory.php';
$wgAutoloadClasses['Flow\\Data\\RecentChanges\\RecentChanges'] = __DIR__ .
'/includes/Data/RecentChanges/RecentChanges.php';
$wgAutoloadClasses['Flow\\Data\\Storage\\BasicDbStorage'] = __DIR__ .
'/includes/Data/Storage/BasicDbStorage.php';
$wgAutoloadClasses['Flow\\Data\\Storage\\BoardHistoryStorage'] = __DIR__ .
'/includes/Data/Storage/BoardHistoryStorage.php';
@@ -227,9 +228,13 @@
$wgAutoloadClasses['Flow\\Tests\\Data\\FlowNothingTest'] = __DIR__ .
'/tests/phpunit/Data/NothingTest.php';
$wgAutoloadClasses['Flow\\Tests\\Data\\IndexTest'] = __DIR__ .
'/tests/phpunit/Data/IndexTest.php';
$wgAutoloadClasses['Flow\\Tests\\Data\\ObjectLocatorTest'] = __DIR__ .
'/tests/phpunit/Data/ObjectLocatorTest.php';
+$wgAutoloadClasses['Flow\\Tests\\Data\\Pager\\PagerTest'] = __DIR__ .
'/tests/phpunit/Data/Pager/PagerTest.php';
+$wgAutoloadClasses['Flow\\Tests\\Data\\RecentChanges\\RecentChangesMock'] =
__DIR__ . '/tests/phpunit/Data/RecentChanges/RecentChangesTest.php';
+$wgAutoloadClasses['Flow\\Tests\\Data\\RecentChanges\\RecentChangesTest'] =
__DIR__ . '/tests/phpunit/Data/RecentChanges/RecentChangesTest.php';
$wgAutoloadClasses['Flow\\Tests\\Data\\RevisionStorageTest'] = __DIR__ .
'/tests/phpunit/Data/RevisionStorageTest.php';
$wgAutoloadClasses['Flow\\Tests\\Data\\UserNameBatchTest'] = __DIR__ .
'/tests/phpunit/Data/UserNameBatchTest.php';
$wgAutoloadClasses['Flow\\Tests\\Data\\UserNameListenerTest'] = __DIR__ .
'/tests/phpunit/Data/UserNameListenerTest.php';
+$wgAutoloadClasses['Flow\\Tests\\FlowActionsTest'] = __DIR__ .
'/tests/phpunit/FlowActionsTest.php';
$wgAutoloadClasses['Flow\\Tests\\FlowTestCase'] = __DIR__ .
'/tests/phpunit/FlowTestCase.php';
$wgAutoloadClasses['Flow\\Tests\\Formatter\\FormatterTest'] = __DIR__ .
'/tests/phpunit/Formatter/FormatterTest.php';
$wgAutoloadClasses['Flow\\Tests\\HookTest'] = __DIR__ .
'/tests/phpunit/HookTest.php';
diff --git a/container.php b/container.php
index 861ae2c..23050fa 100644
--- a/container.php
+++ b/container.php
@@ -237,6 +237,7 @@
new Flow\Data\RecentChanges\HeaderRecentChanges(
$c['flow_actions'],
$c['repository.username'],
+ new Flow\Data\RecentChanges\RecentChangeFactory,
$wgContLang
)
),
@@ -301,6 +302,7 @@
new Flow\Data\RecentChanges\PostSummaryRecentChanges(
$c['flow_actions'],
$c['repository.username'],
+ new Flow\Data\RecentChanges\RecentChangeFactory,
$wgContLang
)
),
@@ -409,6 +411,7 @@
new Flow\Data\RecentChanges\PostRevisionRecentChanges(
$c['flow_actions'],
$c['repository.username'],
+ new Flow\Data\RecentChanges\RecentChangeFactory,
$wgContLang
)
),
@@ -596,7 +599,6 @@
$wgFlowDefaultWorkflow
);
} );
-
// Initialized in FlowHooks to faciliate only loading the flow container
// when flow is specifically requested to run. Extension initialization
// must always happen before calling flow code.
diff --git a/includes/Data/RecentChanges/HeaderRecentChanges.php
b/includes/Data/RecentChanges/HeaderRecentChanges.php
index 5a0aee4..dbda7bf 100644
--- a/includes/Data/RecentChanges/HeaderRecentChanges.php
+++ b/includes/Data/RecentChanges/HeaderRecentChanges.php
@@ -18,8 +18,13 @@
*/
protected $contLang;
- public function __construct( FlowActions $actions, UserNameBatch
$usernames, Language $contLang ) {
- parent::__construct( $actions, $usernames );
+ public function __construct(
+ FlowActions $actions,
+ UserNameBatch $usernames,
+ RecentChangeFactory $rcFactory,
+ Language $contLang
+ ) {
+ parent::__construct( $actions, $usernames, $rcFactory );
$this->contLang = $contLang;
}
diff --git a/includes/Data/RecentChanges/PostRevisionRecentChanges.php
b/includes/Data/RecentChanges/PostRevisionRecentChanges.php
index 4af3fde..c03e2b6 100644
--- a/includes/Data/RecentChanges/PostRevisionRecentChanges.php
+++ b/includes/Data/RecentChanges/PostRevisionRecentChanges.php
@@ -17,8 +17,13 @@
*/
protected $contLang;
- public function __construct( FlowActions $actions, UserNameBatch
$usernames, Language $contLang ) {
- parent::__construct( $actions, $usernames );
+ public function __construct(
+ FlowActions $actions,
+ UserNameBatch $usernames,
+ RecentChangeFactory $rcFactory,
+ Language $contLang
+ ) {
+ parent::__construct( $actions, $usernames, $rcFactory );
$this->contLang = $contLang;
}
diff --git a/includes/Data/RecentChanges/PostSummaryRecentChanges.php
b/includes/Data/RecentChanges/PostSummaryRecentChanges.php
index a27c2f1..cff4517 100644
--- a/includes/Data/RecentChanges/PostSummaryRecentChanges.php
+++ b/includes/Data/RecentChanges/PostSummaryRecentChanges.php
@@ -17,8 +17,13 @@
*/
protected $contLang;
- public function __construct( FlowActions $actions, UserNameBatch
$usernames, Language $contLang ) {
- parent::__construct( $actions, $usernames );
+ public function __construct(
+ FlowActions $actions,
+ UserNameBatch $usernames,
+ RecentChangeFactory $rcFactory,
+ Language $contLang
+ ) {
+ parent::__construct( $actions, $usernames, $rcFactory );
$this->contLang = $contLang;
}
diff --git a/includes/Data/RecentChanges/RecentChangeFactory.php
b/includes/Data/RecentChanges/RecentChangeFactory.php
new file mode 100644
index 0000000..3c09451
--- /dev/null
+++ b/includes/Data/RecentChanges/RecentChangeFactory.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Flow\Data\RecentChanges;
+
+/**
+ * Provides access to static methods of RecentChange so they
+ * can be swapped out during tests
+ */
+class RecentChangeFactory {
+ public function newFromRow( $obj ) {
+ return \RecentChange::newFromRow( $obj );
+ }
+}
diff --git a/includes/Data/RecentChanges/RecentChanges.php
b/includes/Data/RecentChanges/RecentChanges.php
index 2278d67..313826b 100644
--- a/includes/Data/RecentChanges/RecentChanges.php
+++ b/includes/Data/RecentChanges/RecentChanges.php
@@ -39,10 +39,12 @@
/**
* @param FlowActions $actions
* @param UserNameBatch $usernames
+ * @param RecentChangeFactory $rcFactory Creates mw RecentChange
instances
*/
- public function __construct( FlowActions $actions, UserNameBatch
$usernames ) {
+ public function __construct( FlowActions $actions, UserNameBatch
$usernames, RecentChangeFactory $rcFactory ) {
$this->actions = $actions;
$this->usernames = $usernames;
+ $this->rcFactory = $rcFactory;
}
public function onAfterUpdate( $object, array $old, array $new, array
$metadata ) {
@@ -76,7 +78,8 @@
return;
}
- $title = $workflow->getArticleTitle();
+ $title = $this->getRcTitle( $workflow,
$revision->getChangeType() );
+
$collection = $revision->getCollection();
// get content of both this & the current revision
@@ -120,7 +123,7 @@
'rc_deleted' => 0,
);
- $rc = RecentChange::newFromRow( (object)$attribs );
+ $rc = $this->rcFactory->newFromRow( (object)$attribs );
$rc->save( /* $noudp = */ true ); // Insert into db
$feeds = $wgRCFeeds;
// Override the IRC formatter with our own formatter
@@ -131,6 +134,14 @@
$rc->notifyRCFeeds( $feeds );
}
+ public function getRcTitle( Workflow $workflow, $action ) {
+ if ( $this->actions->getValue( $action, 'rc_title' ) ===
'owner' ) {
+ return $workflow->getOwnerTitle();
+ } else {
+ return $workflow->getArticleTitle();
+ }
+ }
+
/**
* @param AbstractRevision $revision
* @param string $action
diff --git a/tests/phpunit/Data/RecentChanges/RecentChangesTest.php
b/tests/phpunit/Data/RecentChanges/RecentChangesTest.php
new file mode 100644
index 0000000..713d94b
--- /dev/null
+++ b/tests/phpunit/Data/RecentChanges/RecentChangesTest.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Flow\Tests\Data\RecentChanges;
+
+use Flow\Container;
+use Flow\Data\RecentChanges\RecentChanges;
+use Flow\Model\PostRevision;
+use Flow\Model\Workflow;
+use Title;
+use User;
+
+class RecentChangesTest extends \MediaWikiTestCase {
+
+ public function somethingProvider() {
+ return array(
+ array(
+ 'Newly created topic inserts as board',
+ // expect
+ NS_MAIN,
+ // something
+ function( $workflow ) {
+ return PostRevision::create( $workflow,
'blah blah' );
+ }
+ ),
+
+ array(
+ 'Replies go to the topic',
+ NS_TOPIC,
+ function( $workflow ) {
+ $first = PostRevision::create(
$workflow, 'blah blah' );
+ $user =
$workflow->getUserTuple()->createUser();
+ return $first->reply( $workflow, $user,
'fofofo' );
+ },
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider somethingProvider
+ */
+ public function testSomething( $message, $expect, $init ) {
+ $actions = Container::get( 'flow_actions' );
+ $usernames = $this->getMockBuilder(
'Flow\Repository\UserNameBatch' )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $rcFactory = $this->getMockBuilder(
'Flow\Data\RecentChanges\RecentChangeFactory' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $rc = new RecentChangesMock( $actions, $usernames, $rcFactory );
+ $change = $this->getMock( 'RecentChange' );
+ $rcFactory->expects( $this->once() )
+ ->method( 'newFromRow' )
+ ->will( $this->returnCallback( function( $obj ) use (
&$ref, $change ) {
+ $ref = $obj;
+ return $change;
+ } ) );
+
+ $title = Title::newMainPage();
+ $user = User::newFromName( '127.0.0.1', false );
+ $workflow = Workflow::create( 'topic', $user, $title );
+
+ $revision = $init( $workflow );
+
+ $rc->onAfterInsert( $revision, array(), array(
+ 'workflow' => $workflow,
+ ) );
+ $this->assertNotNull( $ref );
+ $this->assertEquals( $expect, $ref->rc_namespace, $message );
+ }
+}
+
+class RecentChangesMock extends RecentChanges {
+ // Mock abuses metadata parameter to test parent class
+ public function onAfterInsert( $object, array $new, array $metadata ) {
+ $metadata += array(
+ 'block' => null,
+ 'revisionType' => null,
+ 'row' => array(),
+ 'workflow' => null, // @todo real workflow is required
+ 'changes' => array()
+ );
+
+ $this->insert(
+ $object,
+ $metadata['block'],
+ $metadata['revisionType'],
+ $metadata['row'] + array(
+ 'rev_user_id' => 0,
+ 'rev_user_ip' => '127.0.0.1',
+ ),
+ $metadata['workflow'],
+ $metadata['changes']
+ );
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/165316
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Id60c6d7b05650ac12567626083814bf6526575c1
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: EBernhardson <[email protected]>
Gerrit-Reviewer: Matthias Mullie <[email protected]>
Gerrit-Reviewer: SG <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits