mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-15 11:22:40 +01:00
5317f77f30
Summary: There is still some general buginess with answer comments, trying to work them out. This replaces timeline rendering into one offs (less performant) but resolves many bugs. Or if there is a more performant way, let me know? Also when leaving an answer comment, you currently get redirected back to the page, but both the comment form is still populated and you dont see your answer without a reload. I feel like I'm missing some magical parameter to pass, so just redirecting back to the question itself. Test Plan: Leave lots of answer comments. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D13946
62 lines
1.7 KiB
PHP
62 lines
1.7 KiB
PHP
<?php
|
|
|
|
final class PonderAnswerCommentController extends PonderController {
|
|
|
|
public function handleRequest(AphrontRequest $request) {
|
|
$viewer = $request->getViewer();
|
|
$id = $request->getURIData('id');
|
|
|
|
if (!$request->isFormPost()) {
|
|
return new Aphront400Response();
|
|
}
|
|
|
|
$answer = id(new PonderAnswerQuery())
|
|
->setViewer($viewer)
|
|
->withIDs(array($id))
|
|
->executeOne();
|
|
if (!$answer) {
|
|
return new Aphront404Response();
|
|
}
|
|
|
|
$is_preview = $request->isPreviewRequest();
|
|
|
|
$qid = $answer->getQuestion()->getID();
|
|
$aid = $answer->getID();
|
|
|
|
// TODO, this behaves badly when redirecting to the answer
|
|
$view_uri = "/Q{$qid}";
|
|
|
|
$xactions = array();
|
|
$xactions[] = id(new PonderAnswerTransaction())
|
|
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
|
->attachComment(
|
|
id(new PonderAnswerTransactionComment())
|
|
->setContent($request->getStr('comment')));
|
|
|
|
$editor = id(new PonderAnswerEditor())
|
|
->setActor($viewer)
|
|
->setContinueOnNoEffect($request->isContinueRequest())
|
|
->setContentSourceFromRequest($request)
|
|
->setIsPreview($is_preview);
|
|
|
|
try {
|
|
$xactions = $editor->applyTransactions($answer, $xactions);
|
|
} catch (PhabricatorApplicationTransactionNoEffectException $ex) {
|
|
return id(new PhabricatorApplicationTransactionNoEffectResponse())
|
|
->setCancelURI($view_uri)
|
|
->setException($ex);
|
|
}
|
|
|
|
|
|
if ($request->isAjax() && $is_preview) {
|
|
return id(new PhabricatorApplicationTransactionResponse())
|
|
->setViewer($viewer)
|
|
->setTransactions($xactions)
|
|
->setIsPreview($is_preview);
|
|
} else {
|
|
return id(new AphrontRedirectResponse())
|
|
->setURI($view_uri);
|
|
}
|
|
}
|
|
|
|
}
|