mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-15 03:12:41 +01:00
d8bbf55959
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
102 lines
3.2 KiB
PHP
102 lines
3.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright 2012 Facebook, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
class DifferentialCommentSaveController extends DifferentialController {
|
|
|
|
public function processRequest() {
|
|
$request = $this->getRequest();
|
|
if (!$request->isFormPost()) {
|
|
return new Aphront400Response();
|
|
}
|
|
|
|
$revision_id = $request->getInt('revision_id');
|
|
$revision = id(new DifferentialRevision())->load($revision_id);
|
|
if (!$revision) {
|
|
return new Aphront400Response();
|
|
}
|
|
|
|
$comment = $request->getStr('comment');
|
|
$action = $request->getStr('action');
|
|
$reviewers = $request->getArr('reviewers');
|
|
$ccs = $request->getArr('ccs');
|
|
|
|
$editor = new DifferentialCommentEditor(
|
|
$revision,
|
|
$request->getUser()->getPHID(),
|
|
$action);
|
|
|
|
$content_source = PhabricatorContentSource::newForSource(
|
|
PhabricatorContentSource::SOURCE_WEB,
|
|
array(
|
|
'ip' => $request->getRemoteAddr(),
|
|
));
|
|
|
|
try {
|
|
$editor
|
|
->setMessage($comment)
|
|
->setContentSource($content_source)
|
|
->setAttachInlineComments(true)
|
|
->setAddedReviewers($reviewers)
|
|
->setAddedCCs($ccs)
|
|
->save();
|
|
} catch (DifferentialActionHasNoEffectException $no_effect) {
|
|
$has_inlines = id(new DifferentialInlineComment())->loadAllWhere(
|
|
'authorPHID = %s AND revisionID = %d AND commentID IS NULL',
|
|
$request->getUser()->getPHID(),
|
|
$revision->getID());
|
|
|
|
$dialog = new AphrontDialogView();
|
|
$dialog->setUser($request->getUser());
|
|
$dialog->addCancelButton('/D'.$revision_id);
|
|
|
|
$dialog->addHiddenInput('revision_id', $revision_id);
|
|
$dialog->addHiddenInput('action', 'none');
|
|
$dialog->addHiddenInput('reviewers', $reviewers);
|
|
$dialog->addHiddenInput('ccs', $ccs);
|
|
$dialog->addHiddenInput('comment', $comment);
|
|
|
|
$dialog->setTitle('Action Has No Effect');
|
|
$dialog->appendChild(
|
|
'<p>'.phutil_escape_html($no_effect->getMessage()).'</p>');
|
|
|
|
if (strlen($comment) || $has_inlines) {
|
|
$dialog->addSubmitButton('Post as Comment');
|
|
$dialog->appendChild('<br />');
|
|
$dialog->appendChild(
|
|
'<p>Do you want to post your feedback anyway, as a normal '.
|
|
'comment?</p>');
|
|
}
|
|
|
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
|
}
|
|
|
|
// TODO: Diff change detection?
|
|
|
|
$draft = id(new PhabricatorDraft())->loadOneWhere(
|
|
'authorPHID = %s AND draftKey = %s',
|
|
$request->getUser()->getPHID(),
|
|
'differential-comment-'.$revision->getID());
|
|
if ($draft) {
|
|
$draft->delete();
|
|
}
|
|
|
|
return id(new AphrontRedirectResponse())
|
|
->setURI('/D'.$revision->getID());
|
|
}
|
|
|
|
}
|