mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-28 09:42:41 +01:00
9f2efd0fa0
Summary: Fixes T5424. - One concrete issue: drafts were not being cleared properly because `__draft__` was not set on submission. This (mostly) fixes phantom drafts. - This ajax comment magic feels weird and floaty and generally has problems. For example, if you add subscribers or inlines, all the stuff on the page which represents those won't update automatically. Instead, just reload. Maybe we'll ajax this stuff some day, but it feels like a net negative for now. - Also remove it from other applications where it's currently used. - Fix an issue with inline previews. Test Plan: Made some comments on a mock, everything worked normally like I expected it to. Reviewers: chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T5424 Differential Revision: https://secure.phabricator.com/D9649
82 lines
2.1 KiB
PHP
82 lines
2.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group legalpad
|
|
*/
|
|
final class LegalpadDocumentCommentController extends LegalpadController {
|
|
|
|
private $id;
|
|
|
|
public function willProcessRequest(array $data) {
|
|
$this->id = $data['id'];
|
|
}
|
|
|
|
public function processRequest() {
|
|
$request = $this->getRequest();
|
|
$user = $request->getUser();
|
|
|
|
if (!$request->isFormPost()) {
|
|
return new Aphront400Response();
|
|
}
|
|
|
|
$document = id(new LegalpadDocumentQuery())
|
|
->setViewer($user)
|
|
->withIDs(array($this->id))
|
|
->needDocumentBodies(true)
|
|
->executeOne();
|
|
|
|
if (!$document) {
|
|
return new Aphront404Response();
|
|
}
|
|
|
|
$is_preview = $request->isPreviewRequest();
|
|
|
|
$draft = PhabricatorDraft::buildFromRequest($request);
|
|
|
|
$document_uri = $this->getApplicationURI('view/'.$document->getID());
|
|
|
|
$comment = $request->getStr('comment');
|
|
|
|
$xactions = array();
|
|
|
|
if (strlen($comment)) {
|
|
$xactions[] = id(new LegalpadTransaction())
|
|
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
|
->attachComment(
|
|
id(new LegalpadTransactionComment())
|
|
->setDocumentID($document->getID())
|
|
->setLineNumber(0)
|
|
->setLineLength(0)
|
|
->setContent($comment));
|
|
}
|
|
|
|
$editor = id(new LegalpadDocumentEditor())
|
|
->setActor($user)
|
|
->setContentSourceFromRequest($request)
|
|
->setContinueOnNoEffect($request->isContinueRequest())
|
|
->setIsPreview($is_preview);
|
|
|
|
try {
|
|
$xactions = $editor->applyTransactions($document, $xactions);
|
|
} catch (PhabricatorApplicationTransactionNoEffectException $ex) {
|
|
return id(new PhabricatorApplicationTransactionNoEffectResponse())
|
|
->setCancelURI($document_uri)
|
|
->setException($ex);
|
|
}
|
|
|
|
if ($draft) {
|
|
$draft->replaceOrDelete();
|
|
}
|
|
|
|
if ($request->isAjax() && $is_preview) {
|
|
return id(new PhabricatorApplicationTransactionResponse())
|
|
->setViewer($user)
|
|
->setTransactions($xactions)
|
|
->setIsPreview($is_preview)
|
|
->setAnchorOffset($request->getStr('anchor'));
|
|
} else {
|
|
return id(new AphrontRedirectResponse())->setURI($document_uri);
|
|
}
|
|
}
|
|
|
|
}
|