mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-15 19:32:40 +01:00
dcd7a316d2
Summary: ...do it somewhat generically, so we could fairly easily add this to other applications. Fixes T3496. I got a wee bit lazy and decided not to migrate existing drafts. My excuses aside from laziness are doing it this way will let us see if anyone complains, we can always do a migration later if people do complain, and there's likely to be a lot of garbage data for older / bigger installs, and the migration didn't seem worth itgiven it would also likely be expensive in these cases. Test Plan: made a draft inline comment on DX and observed DX had a note icon on Differential home page. made a draft comment on DX and observed DX had a note icon on Differential home page. deleted a draft inline comment and noted icon disappeared from Differential homepage. Submitted a draft comment + inline comment and noted icon disappeared. Reviewers: epriestley Reviewed By: epriestley CC: Korvin, epriestley, aran Maniphest Tasks: T3496 Differential Revision: https://secure.phabricator.com/D8275
91 lines
2.8 KiB
PHP
91 lines
2.8 KiB
PHP
<?php
|
|
|
|
final class DifferentialCommentSaveController extends DifferentialController {
|
|
|
|
public function processRequest() {
|
|
$request = $this->getRequest();
|
|
if (!$request->isFormPost()) {
|
|
return new Aphront400Response();
|
|
}
|
|
|
|
$viewer = $request->getUser();
|
|
|
|
$revision_id = $request->getInt('revision_id');
|
|
$revision = id(new DifferentialRevisionQuery())
|
|
->setViewer($viewer)
|
|
->withIDs(array($revision_id))
|
|
->executeOne();
|
|
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,
|
|
$action);
|
|
|
|
$content_source = PhabricatorContentSource::newForSource(
|
|
PhabricatorContentSource::SOURCE_WEB,
|
|
array(
|
|
'ip' => $request->getRemoteAddr(),
|
|
));
|
|
|
|
try {
|
|
$editor
|
|
->setActor($request->getUser())
|
|
->setMessage($comment)
|
|
->setContentSource($content_source)
|
|
->setAttachInlineComments(true)
|
|
->setAddedReviewers($reviewers)
|
|
->setAddedCCs($ccs)
|
|
->save();
|
|
} catch (DifferentialActionHasNoEffectException $no_effect) {
|
|
$has_inlines = id(new DifferentialInlineCommentQuery())
|
|
->withDraftComments($request->getUser()->getPHID(), $revision->getID())
|
|
->execute();
|
|
|
|
$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(pht('Action Has No Effect'));
|
|
$dialog->appendChild(
|
|
phutil_tag('p', array(), $no_effect->getMessage()));
|
|
|
|
if (strlen($comment) || $has_inlines) {
|
|
$dialog->addSubmitButton(pht('Post as Comment'));
|
|
$dialog->appendChild(phutil_tag('br'));
|
|
$dialog->appendChild(phutil_tag('p', array(), pht(
|
|
'Do you want to post your feedback anyway, as a normal comment?')));
|
|
}
|
|
|
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
|
}
|
|
|
|
// TODO: Diff change detection?
|
|
|
|
$user = $request->getUser();
|
|
$draft = id(new PhabricatorDraft())->loadOneWhere(
|
|
'authorPHID = %s AND draftKey = %s',
|
|
$user->getPHID(),
|
|
'differential-comment-'.$revision->getID());
|
|
if ($draft) {
|
|
$draft->delete();
|
|
}
|
|
DifferentialDraft::deleteAllDrafts($user->getPHID(), $revision->getPHID());
|
|
|
|
return id(new AphrontRedirectResponse())
|
|
->setURI('/D'.$revision->getID());
|
|
}
|
|
|
|
}
|