2011-01-30 20:02:22 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class DifferentialAddCommentView extends AphrontView {
|
|
|
|
|
|
|
|
private $revision;
|
|
|
|
private $actions;
|
|
|
|
private $actionURI;
|
2011-02-06 01:57:21 +01:00
|
|
|
private $draft;
|
2012-09-20 23:11:11 +02:00
|
|
|
private $reviewers = array();
|
|
|
|
private $ccs = array();
|
2014-03-09 21:18:17 +01:00
|
|
|
private $errorView;
|
|
|
|
|
|
|
|
public function setErrorView(AphrontErrorView $error_view) {
|
|
|
|
$this->errorView = $error_view;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getErrorView() {
|
|
|
|
return $this->errorView;
|
|
|
|
}
|
2011-01-30 20:02:22 +01:00
|
|
|
|
|
|
|
public function setRevision($revision) {
|
|
|
|
$this->revision = $revision;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setActions(array $actions) {
|
|
|
|
$this->actions = $actions;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setActionURI($uri) {
|
|
|
|
$this->actionURI = $uri;
|
2012-04-03 03:35:09 +02:00
|
|
|
return $this;
|
2011-01-30 20:02:22 +01:00
|
|
|
}
|
|
|
|
|
2012-09-20 23:11:11 +02:00
|
|
|
public function setDraft(PhabricatorDraft $draft = null) {
|
2011-02-06 01:57:21 +01:00
|
|
|
$this->draft = $draft;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2012-09-20 23:11:11 +02:00
|
|
|
public function setReviewers(array $names) {
|
|
|
|
$this->reviewers = $names;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setCCs(array $names) {
|
|
|
|
$this->ccs = $names;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2011-01-31 03:52:29 +01:00
|
|
|
public function render() {
|
2011-02-01 03:05:20 +01:00
|
|
|
|
2014-01-02 20:59:35 +01:00
|
|
|
$this->requireResource('differential-revision-add-comment-css');
|
2011-01-30 21:08:40 +01:00
|
|
|
$revision = $this->revision;
|
|
|
|
|
2012-09-20 23:11:11 +02:00
|
|
|
$action = null;
|
|
|
|
if ($this->draft) {
|
|
|
|
$action = idx($this->draft->getMetadata(), 'action');
|
|
|
|
}
|
|
|
|
|
|
|
|
$enable_reviewers = DifferentialAction::allowReviewers($action);
|
|
|
|
$enable_ccs = ($action == DifferentialAction::ACTION_ADDCCS);
|
2013-07-10 20:05:53 +02:00
|
|
|
$add_reviewers_labels = array(
|
|
|
|
'add_reviewers' => pht('Add Reviewers'),
|
2013-07-17 20:37:54 +02:00
|
|
|
'request_review' => pht('Add Reviewers'),
|
2013-07-10 20:05:53 +02:00
|
|
|
'resign' => pht('Suggest Reviewers'),
|
|
|
|
);
|
2012-09-20 23:11:11 +02:00
|
|
|
|
2011-01-30 20:02:22 +01:00
|
|
|
$form = new AphrontFormView();
|
|
|
|
$form
|
Improve behavior when user submits a no-op action in Differential
Summary:
See T730 and the slightly-less-pretty version of this in D1398.
When a user takes an action in Differential that has no effect (for instance,
accepting an already-accepted revision), prompt them:
Action Has No Effect
You can not accept this revision because it has already been accepted.
Do you want to post the feedback anyway, as a normal comment?
[Cancel] [Post as Comment]
If they have no comment text, the dialog only says "Cancel".
I think this is probably the best way to balance all the concerns here -- it
might occasionally be a little annoying, but that should be rare, and it should
never be confusing (the current workflow is extremely confusing).
This also fixes the issue where you can add all sorts of CCs who are already
part of the revision, either explicitly or via mentions.
Test Plan:
Posted some has-effect and has-no-effect comments, made different
choices in the dialog, everything seems to work OK?
Reviewers: vrana, btrahan, jungejason
Reviewed By: vrana
CC: aran, vrana
Maniphest Tasks: T730
Differential Revision: https://secure.phabricator.com/D1403
2012-01-14 20:39:22 +01:00
|
|
|
->setWorkflow(true)
|
2011-01-31 03:52:29 +01:00
|
|
|
->setUser($this->user)
|
2011-01-30 20:02:22 +01:00
|
|
|
->setAction($this->actionURI)
|
2011-01-30 21:08:40 +01:00
|
|
|
->addHiddenInput('revision_id', $revision->getID())
|
2011-01-30 20:02:22 +01:00
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormSelectControl())
|
2013-01-24 22:18:44 +01:00
|
|
|
->setLabel(pht('Action'))
|
2011-01-30 21:08:40 +01:00
|
|
|
->setName('action')
|
2012-09-20 23:11:11 +02:00
|
|
|
->setValue($action)
|
2011-02-01 03:05:20 +01:00
|
|
|
->setID('comment-action')
|
2011-10-27 21:32:02 +02:00
|
|
|
->setOptions($this->actions))
|
2011-02-05 07:45:42 +01:00
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormTokenizerControl())
|
2013-07-10 20:05:53 +02:00
|
|
|
->setLabel($enable_reviewers ? $add_reviewers_labels[$action] :
|
|
|
|
$add_reviewers_labels['add_reviewers'])
|
2011-02-05 07:45:42 +01:00
|
|
|
->setName('reviewers')
|
|
|
|
->setControlID('add-reviewers')
|
2012-09-20 23:11:11 +02:00
|
|
|
->setControlStyle($enable_reviewers ? null : 'display: none')
|
2011-02-05 07:45:42 +01:00
|
|
|
->setID('add-reviewers-tokenizer')
|
|
|
|
->setDisableBehavior(true))
|
2011-06-24 21:21:48 +02:00
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormTokenizerControl())
|
2014-06-04 00:53:52 +02:00
|
|
|
->setLabel(pht('Add Subscribers'))
|
2011-06-24 21:21:48 +02:00
|
|
|
->setName('ccs')
|
|
|
|
->setControlID('add-ccs')
|
2012-09-20 23:11:11 +02:00
|
|
|
->setControlStyle($enable_ccs ? null : 'display: none')
|
2011-06-24 21:21:48 +02:00
|
|
|
->setID('add-ccs-tokenizer')
|
|
|
|
->setDisableBehavior(true))
|
2011-01-30 20:02:22 +01:00
|
|
|
->appendChild(
|
2012-09-19 21:27:28 +02:00
|
|
|
id(new PhabricatorRemarkupControl())
|
2011-01-30 21:08:40 +01:00
|
|
|
->setName('comment')
|
2011-02-01 03:05:20 +01:00
|
|
|
->setID('comment-content')
|
2013-01-24 22:18:44 +01:00
|
|
|
->setLabel(pht('Comment'))
|
2012-11-27 23:06:31 +01:00
|
|
|
->setValue($this->draft ? $this->draft->getDraft() : null)
|
|
|
|
->setUser($this->user))
|
2011-01-30 20:02:22 +01:00
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormSubmitControl())
|
2014-04-19 02:51:46 +02:00
|
|
|
->setValue(pht('Submit')));
|
2011-01-30 20:02:22 +01:00
|
|
|
|
2011-02-05 07:45:42 +01:00
|
|
|
Javelin::initBehavior(
|
2011-06-24 21:21:48 +02:00
|
|
|
'differential-add-reviewers-and-ccs',
|
2011-02-05 07:45:42 +01:00
|
|
|
array(
|
2011-06-24 21:21:48 +02:00
|
|
|
'dynamic' => array(
|
2012-01-24 03:34:46 +01:00
|
|
|
'add-reviewers-tokenizer' => array(
|
2013-07-10 20:05:53 +02:00
|
|
|
'actions' => array(
|
|
|
|
'request_review' => 1,
|
|
|
|
'add_reviewers' => 1,
|
|
|
|
'resign' => 1,
|
|
|
|
),
|
2013-10-05 04:57:15 +02:00
|
|
|
'src' => '/typeahead/common/usersorprojects/',
|
2012-09-20 23:11:11 +02:00
|
|
|
'value' => $this->reviewers,
|
2011-06-24 21:21:48 +02:00
|
|
|
'row' => 'add-reviewers',
|
2013-07-10 20:05:53 +02:00
|
|
|
'labels' => $add_reviewers_labels,
|
2013-10-05 04:57:15 +02:00
|
|
|
'placeholder' => pht('Type a user or project name...'),
|
2011-06-24 21:21:48 +02:00
|
|
|
),
|
2012-01-24 03:34:46 +01:00
|
|
|
'add-ccs-tokenizer' => array(
|
|
|
|
'actions' => array('add_ccs' => 1),
|
2011-06-24 21:21:48 +02:00
|
|
|
'src' => '/typeahead/common/mailable/',
|
2012-09-20 23:11:11 +02:00
|
|
|
'value' => $this->ccs,
|
2011-06-24 21:21:48 +02:00
|
|
|
'row' => 'add-ccs',
|
2013-01-24 22:18:44 +01:00
|
|
|
'placeholder' => pht('Type a user or mailing list...'),
|
2011-06-24 21:21:48 +02:00
|
|
|
),
|
|
|
|
),
|
2011-02-05 07:45:42 +01:00
|
|
|
'select' => 'comment-action',
|
|
|
|
));
|
|
|
|
|
2011-06-10 03:56:47 +02:00
|
|
|
$diff = $revision->loadActiveDiff();
|
2011-02-03 04:38:43 +01:00
|
|
|
$rev_id = $revision->getID();
|
|
|
|
|
2011-02-01 03:05:20 +01:00
|
|
|
Javelin::initBehavior(
|
|
|
|
'differential-feedback-preview',
|
|
|
|
array(
|
2011-02-03 04:38:43 +01:00
|
|
|
'uri' => '/differential/comment/preview/'.$rev_id.'/',
|
|
|
|
'preview' => 'comment-preview',
|
|
|
|
'action' => 'comment-action',
|
|
|
|
'content' => 'comment-content',
|
2011-12-23 02:59:00 +01:00
|
|
|
'previewTokenizers' => array(
|
|
|
|
'reviewers' => 'add-reviewers-tokenizer',
|
|
|
|
'ccs' => 'add-ccs-tokenizer',
|
|
|
|
),
|
2011-02-03 04:38:43 +01:00
|
|
|
|
|
|
|
'inlineuri' => '/differential/comment/inline/preview/'.$rev_id.'/',
|
|
|
|
'inline' => 'inline-comment-preview',
|
2011-02-01 03:05:20 +01:00
|
|
|
));
|
|
|
|
|
2014-04-19 02:51:46 +02:00
|
|
|
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
|
|
|
|
$header_text = $is_serious
|
|
|
|
? pht('Add Comment')
|
|
|
|
: pht('Leap Into Action');
|
|
|
|
|
2013-09-17 18:12:37 +02:00
|
|
|
$header = id(new PHUIHeaderView())
|
2014-04-19 02:51:46 +02:00
|
|
|
->setHeader($header_text);
|
Tweak Maniphest CSS, fix remarkup in description change views
Summary:
Various CSS tweaks and fixes:
- Add remarkup styling to description change views, missed this before.
- Fix CSS so that transactions with only one item (e.g., changed priority)
don't have weird floater underneath them.
- Add more space between transaction items.
- Make default background color lighter and less heavy.
- Use beigey color for comment form in Maniphest.
- Share more CSS between Maniphest and Differential (previews, feedback).
- Move "Leap Into Action" call to Differential, replace Maniphest with
thematically-consistent "Weigh In" (obviously, Maniphest has a nautical theme).
Test Plan:
Browsed Maniphest and Differential in a couple browsers, styling all seems
correct.
Reviewed By: tomo
Reviewers: tomo, aran, jungejason, tuomaspelkonen
CC: anjali, aran, tomo
Differential Revision: 328
2011-05-22 17:49:07 +02:00
|
|
|
|
2013-09-29 00:55:38 +02:00
|
|
|
$anchor = id(new PhabricatorAnchorView())
|
|
|
|
->setAnchorName('comment')
|
|
|
|
->setNavigationMarker(true);
|
|
|
|
|
2013-11-11 18:23:23 +01:00
|
|
|
$loading = phutil_tag(
|
|
|
|
'span',
|
|
|
|
array('class' => 'aphront-panel-preview-loading-text'),
|
2013-02-13 23:50:15 +01:00
|
|
|
pht('Loading comment preview...'));
|
2013-09-29 00:55:38 +02:00
|
|
|
|
2013-11-11 18:23:23 +01:00
|
|
|
$preview = phutil_tag_div(
|
|
|
|
'aphront-panel-preview aphront-panel-flush',
|
|
|
|
array(
|
|
|
|
phutil_tag('div', array('id' => 'comment-preview'), $loading),
|
|
|
|
phutil_tag('div', array('id' => 'inline-comment-preview')),
|
|
|
|
));
|
2013-09-29 00:55:38 +02:00
|
|
|
|
|
|
|
|
|
|
|
$comment_box = id(new PHUIObjectBoxView())
|
|
|
|
->setHeader($header)
|
Provide more structure to PHUIObjectBoxView
Summary:
Three changes here.
- Add `setActionList()`, and use that to set the action list.
- Add `setPropertyList()`, and use that to set the property list.
These will let us add some apropriate CSS so we can fix the border issue, and get rid of a bunch of goofy `.x + .y` selectors.
- Replace `addContent()` with `appendChild()`.
This is just a consistency thing; `AphrontView` already provides `appendChild()`, and `addContent()` did the same thing.
Test Plan:
- Viewed "All Config".
- Viewed a countdown.
- Viewed a revision (add comment, change list, table of contents, comment, local commits, open revisions affecting these files, update history).
- Viewed Diffusion (browse, change, history, repository, lint).
- Viewed Drydock (resource, lease).
- Viewed Files.
- Viewed Herald.
- Viewed Legalpad.
- Viewed macro (edit, edit audio, view).
- Viewed Maniphest.
- Viewed Applications.
- Viewed Paste.
- Viewed People.
- Viewed Phulux.
- Viewed Pholio.
- Viewed Phame (blog, post).
- Viewed Phortune (account, product).
- Viewed Ponder (questions, answers, comments).
- Viewed Releeph.
- Viewed Projects.
- Viewed Slowvote.
NOTE: Images in Files aren't on a black background anymore -- I assume that's on purpose?
NOTE: Some jankiness in Phortune, I'll clean that up when I get back to it. Not related to this diff.
Reviewers: chad
Reviewed By: chad
CC: aran
Differential Revision: https://secure.phabricator.com/D7174
2013-09-30 18:36:04 +02:00
|
|
|
->appendChild($anchor)
|
|
|
|
->appendChild($form);
|
2013-09-29 00:55:38 +02:00
|
|
|
|
2014-03-09 21:18:17 +01:00
|
|
|
if ($this->errorView) {
|
|
|
|
$comment_box->setErrorView($this->errorView);
|
|
|
|
}
|
|
|
|
|
2013-09-29 00:55:38 +02:00
|
|
|
return array($comment_box, $preview);
|
2011-01-30 20:02:22 +01:00
|
|
|
}
|
|
|
|
}
|