Sbisson has uploaded a new change for review.
https://gerrit.wikimedia.org/r/216312
Change subject: [WIP] RC patrolling for Flow
......................................................................
[WIP] RC patrolling for Flow
Patrolling link on
* board description revision page
* topic and post revision page
* todo: board description diff page
* todo: topic and post diff page
Uses core's JS and API
Bug: T94452
Change-Id: I04dcba1248a60f67385f736934207c90048b8ee3
---
M Resources.php
M handlebars/compiled/flow_block_header_single_view.handlebars.php
M handlebars/compiled/flow_block_topic_diff_view.handlebars.php
M handlebars/compiled/flow_block_topic_single_view.handlebars.php
M handlebars/flow_block_header_single_view.handlebars
M handlebars/flow_block_topic_single_view.handlebars
A handlebars/flow_patrol_action.partial.handlebars
M i18n/en.json
M i18n/qqq.json
M includes/Formatter/RevisionViewFormatter.php
M includes/Model/AbstractRevision.php
M includes/UrlGenerator.php
M modules/engine/components/board/flow-board.js
13 files changed, 128 insertions(+), 13 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Flow
refs/changes/12/216312/1
diff --git a/Resources.php b/Resources.php
index 6b9dc22..4647afd 100644
--- a/Resources.php
+++ b/Resources.php
@@ -414,6 +414,7 @@
'mediawiki.api',
'mediawiki.util',
'mediawiki.api.options', // required by switch-editor
feature
+ 'mediawiki.page.patrol.ajax',
),
'messages' => array(
'flow-error-external',
diff --git a/handlebars/compiled/flow_block_header_single_view.handlebars.php
b/handlebars/compiled/flow_block_header_single_view.handlebars.php
index 04b3511..c442e13 100644
--- a/handlebars/compiled/flow_block_header_single_view.handlebars.php
+++ b/handlebars/compiled/flow_block_header_single_view.handlebars.php
@@ -11,12 +11,26 @@
'debug' => $debugopt,
),
'constants' => array(),
- 'helpers' => array( 'l10nParse' =>
'Flow\TemplateHelper::l10nParse',
+ 'helpers' => array( 'l10n' => 'Flow\TemplateHelper::l10n',
+ 'l10nParse' => 'Flow\TemplateHelper::l10nParse',
'escapeContent' => 'Flow\TemplateHelper::escapeContent',
),
'blockhelpers' => array(),
'hbhelpers' => array(),
- 'partials' => array(),
+ 'partials' => array('flow_patrol_action' => function ($cx, $in, $sp)
{return ''.$sp.''.((LCRun3::ifvar($cx,
((isset($in['revision']['rev_view_links']['markPatrolled']) &&
is_array($in['revision']['rev_view_links'])) ?
$in['revision']['rev_view_links']['markPatrolled'] : null))) ? '<div
class="patrollink">
+'.$sp.''.((LCRun3::ifvar($cx, ((isset($in['diffPage']) && is_array($in)) ?
$in['diffPage'] : null))) ? ' <a class="mw-ui-quiet"
+'.$sp.'
href="'.htmlentities((string)((isset($in['revision']['rev_view_links']['markPatrolled']['url'])
&& is_array($in['revision']['rev_view_links']['markPatrolled'])) ?
$in['revision']['rev_view_links']['markPatrolled']['url'] : null), ENT_QUOTES,
'UTF-8').'"
+'.$sp.' title="'.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-diff-patrolled-link-title'),array()), 'encq').'"
+'.$sp.' data-role="patrol">
+'.$sp.' ['.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-diff-patrolled-link-text'),array()), 'encq').']
+'.$sp.' </a>
+'.$sp.'' : ' <a class="mw-ui-quiet"
+'.$sp.'
href="'.htmlentities((string)((isset($in['revision']['rev_view_links']['markPatrolled']['url'])
&& is_array($in['revision']['rev_view_links']['markPatrolled'])) ?
$in['revision']['rev_view_links']['markPatrolled']['url'] : null), ENT_QUOTES,
'UTF-8').'"
+'.$sp.' title="'.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-revision-patrolled-link-title'),array()), 'encq').'"
+'.$sp.' data-role="patrol">
+'.$sp.' ['.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-revision-patrolled-link-text'),array()), 'encq').']
+'.$sp.' </a>
+'.$sp.'').' </div>' : '').'';},),
'scopes' => array(),
'sp_vars' => array('root' => $in),
'lcrun' => 'LCRun3',
@@ -32,7 +46,8 @@
<div class="flow-revision-content">
'.LCRun3::ch($cx, 'escapeContent',
array(array(((isset($in['revision']['content']['format']) &&
is_array($in['revision']['content'])) ? $in['revision']['content']['format'] :
null),((isset($in['revision']['content']['content']) &&
is_array($in['revision']['content'])) ? $in['revision']['content']['content'] :
null)),array()), 'encq').'
</div>
-</div>
+
+'.LCRun3::p($cx, 'flow_patrol_action', array(array($in),array())).'</div>
';
}
?>
\ No newline at end of file
diff --git a/handlebars/compiled/flow_block_topic_diff_view.handlebars.php
b/handlebars/compiled/flow_block_topic_diff_view.handlebars.php
index f089d6e..e8c94b0 100644
--- a/handlebars/compiled/flow_block_topic_diff_view.handlebars.php
+++ b/handlebars/compiled/flow_block_topic_diff_view.handlebars.php
@@ -30,6 +30,7 @@
<div class="flow-compare-revisions">
'.LCRun3::ch($cx, 'diffRevision',
array(array(((isset($in['revision']['diff_content']) &&
is_array($in['revision'])) ? $in['revision']['diff_content'] :
null),((isset($in['revision']['old']['human_timestamp']) &&
is_array($in['revision']['old'])) ? $in['revision']['old']['human_timestamp'] :
null),((isset($in['revision']['new']['human_timestamp']) &&
is_array($in['revision']['new'])) ? $in['revision']['new']['human_timestamp'] :
null),((isset($in['revision']['old']['author']['name']) &&
is_array($in['revision']['old']['author'])) ?
$in['revision']['old']['author']['name'] :
null),((isset($in['revision']['new']['author']['name']) &&
is_array($in['revision']['new']['author'])) ?
$in['revision']['new']['author']['name'] :
null),((isset($in['revision']['old']['rev_view_links']['single-view']['url'])
&& is_array($in['revision']['old']['rev_view_links']['single-view'])) ?
$in['revision']['old']['rev_view_links']['single-view']['url'] :
null),((isset($in['revision']['new']['rev_view_links']['single-view']['url'])
&& is_array($in['revision']['new']['rev_view_links']['single-view'])) ?
$in['revision']['new']['rev_view_links']['single-view']['url'] :
null),((isset($in['revision']['links']['previous']) &&
is_array($in['revision']['links'])) ? $in['revision']['links']['previous'] :
null),((isset($in['revision']['links']['next']) &&
is_array($in['revision']['links'])) ? $in['revision']['links']['next'] :
null)),array()), 'encq').'
</div>
+ <h1>ASDFASD</h1>
</div>
';
}
diff --git a/handlebars/compiled/flow_block_topic_single_view.handlebars.php
b/handlebars/compiled/flow_block_topic_single_view.handlebars.php
index 6da2a7e..05e69e8 100644
--- a/handlebars/compiled/flow_block_topic_single_view.handlebars.php
+++ b/handlebars/compiled/flow_block_topic_single_view.handlebars.php
@@ -11,12 +11,26 @@
'debug' => $debugopt,
),
'constants' => array(),
- 'helpers' => array( 'l10nParse' =>
'Flow\TemplateHelper::l10nParse',
+ 'helpers' => array( 'l10n' => 'Flow\TemplateHelper::l10n',
+ 'l10nParse' => 'Flow\TemplateHelper::l10nParse',
'escapeContent' => 'Flow\TemplateHelper::escapeContent',
),
'blockhelpers' => array(),
'hbhelpers' => array(),
- 'partials' => array(),
+ 'partials' => array('flow_patrol_action' => function ($cx, $in, $sp)
{return ''.$sp.''.((LCRun3::ifvar($cx,
((isset($in['revision']['rev_view_links']['markPatrolled']) &&
is_array($in['revision']['rev_view_links'])) ?
$in['revision']['rev_view_links']['markPatrolled'] : null))) ? '<div
class="patrollink">
+'.$sp.''.((LCRun3::ifvar($cx, ((isset($in['diffPage']) && is_array($in)) ?
$in['diffPage'] : null))) ? ' <a class="mw-ui-quiet"
+'.$sp.'
href="'.htmlentities((string)((isset($in['revision']['rev_view_links']['markPatrolled']['url'])
&& is_array($in['revision']['rev_view_links']['markPatrolled'])) ?
$in['revision']['rev_view_links']['markPatrolled']['url'] : null), ENT_QUOTES,
'UTF-8').'"
+'.$sp.' title="'.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-diff-patrolled-link-title'),array()), 'encq').'"
+'.$sp.' data-role="patrol">
+'.$sp.' ['.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-diff-patrolled-link-text'),array()), 'encq').']
+'.$sp.' </a>
+'.$sp.'' : ' <a class="mw-ui-quiet"
+'.$sp.'
href="'.htmlentities((string)((isset($in['revision']['rev_view_links']['markPatrolled']['url'])
&& is_array($in['revision']['rev_view_links']['markPatrolled'])) ?
$in['revision']['rev_view_links']['markPatrolled']['url'] : null), ENT_QUOTES,
'UTF-8').'"
+'.$sp.' title="'.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-revision-patrolled-link-title'),array()), 'encq').'"
+'.$sp.' data-role="patrol">
+'.$sp.' ['.LCRun3::ch($cx, 'l10n',
array(array('flow-mark-revision-patrolled-link-text'),array()), 'encq').']
+'.$sp.' </a>
+'.$sp.'').' </div>' : '').'';},),
'scopes' => array(),
'sp_vars' => array('root' => $in),
'lcrun' => 'LCRun3',
@@ -31,7 +45,8 @@
<div class="flow-revision-content">
'.LCRun3::ch($cx, 'escapeContent',
array(array(((isset($in['revision']['content']['format']) &&
is_array($in['revision']['content'])) ? $in['revision']['content']['format'] :
null),((isset($in['revision']['content']['content']) &&
is_array($in['revision']['content'])) ? $in['revision']['content']['content'] :
null)),array()), 'encq').'
</div>
-</div>
+
+'.LCRun3::p($cx, 'flow_patrol_action', array(array($in),array()), '
').'</div>
';
diff --git a/handlebars/flow_block_header_single_view.handlebars
b/handlebars/flow_block_header_single_view.handlebars
index 640a048..a4c4a1b 100644
--- a/handlebars/flow_block_header_single_view.handlebars
+++ b/handlebars/flow_block_header_single_view.handlebars
@@ -16,4 +16,6 @@
<div class="flow-revision-content">
{{escapeContent revision.content.format
revision.content.content}}
</div>
+
+{{> flow_patrol_action}}
</div>
diff --git a/handlebars/flow_block_topic_single_view.handlebars
b/handlebars/flow_block_topic_single_view.handlebars
index dca9b8e..a55b8c9 100644
--- a/handlebars/flow_block_topic_single_view.handlebars
+++ b/handlebars/flow_block_topic_single_view.handlebars
@@ -19,6 +19,8 @@
<div class="flow-revision-content">
{{escapeContent revision.content.format
revision.content.content}}
</div>
+
+ {{> flow_patrol_action}}
</div>
diff --git a/handlebars/flow_patrol_action.partial.handlebars
b/handlebars/flow_patrol_action.partial.handlebars
new file mode 100644
index 0000000..fcfe559
--- /dev/null
+++ b/handlebars/flow_patrol_action.partial.handlebars
@@ -0,0 +1,19 @@
+{{~#if revision.rev_view_links.markPatrolled~}}
+ <div class="patrollink">
+ {{#if diffPage}}
+ <a class="mw-ui-quiet"
+ href="{{revision.rev_view_links.markPatrolled.url}}"
+ title="{{l10n 'flow-mark-diff-patrolled-link-title'}}"
+ data-role="patrol">
+ [{{l10n 'flow-mark-diff-patrolled-link-text'}}]
+ </a>
+ {{else}}
+ <a class="mw-ui-quiet"
+ href="{{revision.rev_view_links.markPatrolled.url}}"
+ title="{{l10n 'flow-mark-revision-patrolled-link-title'}}"
+ data-role="patrol">
+ [{{l10n 'flow-mark-revision-patrolled-link-text'}}]
+ </a>
+ {{/if}}
+ </div>
+{{~/if~}}
diff --git a/i18n/en.json b/i18n/en.json
index 1f3f99e..9e215d3 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -545,5 +545,7 @@
"flow-wikitext-editor-help-uses-wikitext": "[[mw:Help:Formatting|uses
markup]]",
"flow-wikitext-editor-help-preview-the-result": "preview the result",
"flow-wikitext-switch-editor-tooltip": "Switch to VisualEditor",
- "flow-ve-switch-editor-tool-title": "Switch to Wikitext editor"
+ "flow-ve-switch-editor-tool-title": "Switch to Wikitext editor",
+ "flow-mark-revision-patrolled-link-text": "Mark this page as patrolled",
+ "flow-mark-revision-patrolled-link-title": "Mark this page as patrolled"
}
diff --git a/i18n/qqq.json b/i18n/qqq.json
index fcaeed0..fdbe09a 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -550,5 +550,7 @@
"flow-wikitext-editor-help-uses-wikitext": "Link to wikitext help. Used
in the following messages:\n* {{msg-mw|flow-wikitext-editor-help}}\n*
{{msg-mw|flow-wikitext-editor-help-and-preview}}",
"flow-wikitext-editor-help-preview-the-result": "Text of link that will
switch from wikitext editor to an html preview. See also
flow-wikitext-editor-help",
"flow-wikitext-switch-editor-tooltip": "Tooltip for button shown below
a wikitext editor to switch to VisualEditor.",
- "flow-ve-switch-editor-tool-title": "Tooltip for button in visualeditor
toolbar to switch to the wikitext editor."
+ "flow-ve-switch-editor-tool-title": "Tooltip for button in visualeditor
toolbar to switch to the wikitext editor.",
+ "flow-mark-revision-patrolled-link-text": "Text of the link to mark a
revision as patrolled.",
+ "flow-mark-revision-patrolled-link-title": "Title of the link to mark a
revision as patrolled."
}
diff --git a/includes/Formatter/RevisionViewFormatter.php
b/includes/Formatter/RevisionViewFormatter.php
index b17a23d..9c24721 100644
--- a/includes/Formatter/RevisionViewFormatter.php
+++ b/includes/Formatter/RevisionViewFormatter.php
@@ -7,6 +7,7 @@
use Flow\Model\PostSummary;
use Flow\UrlGenerator;
use IContextSource;
+use ChangesList;
class RevisionViewFormatter {
/**
@@ -39,7 +40,7 @@
*/
public function formatApi( FormatterRow $row, IContextSource $ctx ) {
$res = $this->serializer->formatApi( $row, $ctx );
- $res['rev_view_links'] = $this->buildLinks( $row );
+ $res['rev_view_links'] = $this->buildLinks( $row, $ctx );
$res['human_timestamp'] = $this->getHumanTimestamp(
$res['timestamp'] );
if ( $row->revision instanceof PostRevision ) {
$res['properties']['topic-of-post'] =
$this->serializer->processParam(
@@ -61,11 +62,13 @@
}
/**
- * Generate the links for single and diff vie actions
+ * Generate the links for single and diff view actions
+ *
* @param FormatterRow $row
+ * @param IContextSource $ctx
* @return array
*/
- public function buildLinks( FormatterRow $row ) {
+ public function buildLinks( FormatterRow $row, IContextSource $ctx ) {
$workflowId = $row->workflow->getId();
$boardTitle = $row->workflow->getOwnerTitle();
@@ -120,6 +123,15 @@
);
}
+ $recentChange = $row->revision->getRecentChange();
+ if ( ChangesList::isUnpatrolled( $recentChange, $ctx->getUser()
) ) {
+ $links['markPatrolled'] =
$this->urlGenerator->markRevisionPatrolledAction(
+ $title,
+ $workflowId,
+ $recentChange
+ );
+ }
+
return $links;
}
diff --git a/includes/Model/AbstractRevision.php
b/includes/Model/AbstractRevision.php
index 3a2e5f2..3fac8a6 100644
--- a/includes/Model/AbstractRevision.php
+++ b/includes/Model/AbstractRevision.php
@@ -8,6 +8,7 @@
use Flow\Parsoid\Utils;
use Title;
use User;
+use RecentChange;
abstract class AbstractRevision {
const MODERATED_NONE = '';
@@ -700,6 +701,28 @@
}
/**
+ * Finds the RecentChange object associated with this flow revision.
+ *
+ * @return null|RecentChange
+ */
+ public function getRecentChange() {
+ $timestamp = $this->revId->getTimestamp();
+ //if ($this->changeType === 'new-topic' ns will be different
+ $title = $this->getCollection()->getTitle();
+ $namespace = $title->getNamespace();
+
+ // note: there could be more than 1 result with the same exact
timestamp
+ return RecentChange::newFromConds(
+ array(
+ 'rc_title' => $title->getDBkey(),
+ 'rc_timestamp' => $timestamp,
+ 'rc_namespace' => $namespace
+ ),
+ __METHOD__
+ );
+ }
+
+ /**
* @return string
*/
abstract public function getRevisionType();
diff --git a/includes/UrlGenerator.php b/includes/UrlGenerator.php
index f142a26..b1b4bd3 100644
--- a/includes/UrlGenerator.php
+++ b/includes/UrlGenerator.php
@@ -12,10 +12,10 @@
use Flow\Model\PostRevision;
use Flow\Model\PostSummary;
use Flow\Model\UUID;
-use Flow\Model\Workflow;
use SpecialPage;
use Title;
use RequestContext;
+use RecentChange;
/**
* Provides url generation capabilities for Flow. Ties together an
@@ -835,4 +835,25 @@
wfMessage( 'flow-thank-link-title', $sender, $recipient
)->text()
);
}
+
+ /**
+ * Mark a revision as patrolled
+ *
+ * @param Title|null $title
+ * @param UUID $workflowId
+ * @param RecentChange $rc
+ * @return Anchor
+ * @throws FlowException
+ * @throws InvalidInputException
+ */
+ public function markRevisionPatrolledAction( Title $title = null, UUID
$workflowId, RecentChange $rc ) {
+ return new Anchor(
+ wfMessage( 'flow-mark-revision-patrolled-link-text'
)->text(),
+ $this->resolveTitle( $title, $workflowId ),
+ array(
+ 'action' => 'markpatrolled',
+ 'rcid' => $rc->getAttribute( 'rc_id' )
+ )
+ );
+ }
}
diff --git a/modules/engine/components/board/flow-board.js
b/modules/engine/components/board/flow-board.js
index 621324b..b239ec8 100644
--- a/modules/engine/components/board/flow-board.js
+++ b/modules/engine/components/board/flow-board.js
@@ -185,7 +185,7 @@
var _notify = mw.notify;
mw.notify = function ( message, options ) {
// override message when we've just watched the board
- if ( options.tag === 'watch-self' && $( '#ca-watch'
).length ) {
+ if ( options && options.tag === 'watch-self' && $(
'#ca-watch' ).length ) {
// Render a div telling the user that they have
subscribed
message = $(
mw.flow.TemplateEngine.processTemplateGetFragment(
'flow_subscribed.partial',
--
To view, visit https://gerrit.wikimedia.org/r/216312
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I04dcba1248a60f67385f736934207c90048b8ee3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: Sbisson <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits