Page MenuHomePhabricator

D8442.diff
No OneTemporary

D8442.diff

Index: src/applications/differential/conduit/ConduitAPI_differential_createcomment_Method.php
===================================================================
--- src/applications/differential/conduit/ConduitAPI_differential_createcomment_Method.php
+++ src/applications/differential/conduit/ConduitAPI_differential_createcomment_Method.php
@@ -7,7 +7,7 @@
extends ConduitAPIMethod {
public function getMethodDescription() {
- return "Add a comment to a Differential revision.";
+ return pht("Add a comment to a Differential revision.");
}
public function defineParamTypes() {
@@ -31,32 +31,55 @@
}
protected function execute(ConduitAPIRequest $request) {
+ $viewer = $request->getUser();
+
$revision = id(new DifferentialRevisionQuery())
- ->setViewer($request->getUser())
+ ->setViewer($viewer)
->withIDs(array($request->getValue('revision_id')))
+ ->needReviewerStatus(true)
->executeOne();
if (!$revision) {
throw new ConduitException('ERR_BAD_REVISION');
}
- $content_source = PhabricatorContentSource::newForSource(
- PhabricatorContentSource::SOURCE_CONDUIT,
- array());
+ $xactions = array();
$action = $request->getValue('action');
- if (!$action) {
- $action = 'none';
+ if ($action && ($action != 'comment')) {
+ $xactions[] = id(new DifferentialTransaction())
+ ->setTransactionType(DifferentialTransaction::TYPE_ACTION)
+ ->setNewValue($action);
+ }
+
+ $content = $request->getValue('message');
+ if (strlen($content)) {
+ $xactions[] = id(new DifferentialTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
+ ->attachComment(
+ id(new DifferentialTransactionComment())
+ ->setContent($content));
}
- $editor = new DifferentialCommentEditor(
- $revision,
- $action);
- $editor->setActor($request->getUser());
- $editor->setContentSource($content_source);
- $editor->setMessage($request->getValue('message'));
- $editor->setNoEmail($request->getValue('silent'));
- $editor->setAttachInlineComments($request->getValue('attach_inlines'));
- $editor->save();
+ if ($request->getValue('attach_inlines')) {
+ $type_inline = DifferentialTransaction::TYPE_INLINE;
+ $inlines = DifferentialTransactionQuery::loadUnsubmittedInlineComments(
+ $viewer,
+ $revision);
+ foreach ($inlines as $inline) {
+ $xactions[] = id(new DifferentialTransaction())
+ ->setTransactionType($type_inline)
+ ->attachComment($inline);
+ }
+ }
+
+ $editor = id(new DifferentialTransactionEditor())
+ ->setActor($viewer)
+ ->setDisableEmail($request->getValue('silent'))
+ ->setContentSourceFromConduitRequest($request)
+ ->setContinueOnNoEffect(true)
+ ->setContinueOnMissingFields(true);
+
+ $editor->applyTransactions($revision, $xactions);
return array(
'revisionid' => $revision->getID(),
Index: src/applications/differential/controller/DifferentialCommentSaveController.php
===================================================================
--- src/applications/differential/controller/DifferentialCommentSaveController.php
+++ src/applications/differential/controller/DifferentialCommentSaveController.php
@@ -87,17 +87,9 @@
->setNewValue(array('+' => $reviewer_edges));
}
- $inline_phids = $this->loadUnsubmittedInlinePHIDs($revision);
- if ($inline_phids) {
- $inlines = id(new PhabricatorApplicationTransactionCommentQuery())
- ->setTemplate(new DifferentialTransactionComment())
- ->setViewer($viewer)
- ->withPHIDs($inline_phids)
- ->execute();
- } else {
- $inlines = array();
- }
-
+ $inlines = DifferentialTransactionQuery::loadUnsubmittedInlineComments(
+ $viewer,
+ $revision);
foreach ($inlines as $inline) {
$xactions[] = id(new DifferentialTransaction())
->setTransactionType($type_inline)
@@ -153,30 +145,4 @@
->setURI('/D'.$revision->getID());
}
-
- private function loadUnsubmittedInlinePHIDs(DifferentialRevision $revision) {
- $viewer = $this->getRequest()->getUser();
-
- // TODO: This probably needs to move somewhere more central as we move
- // away from DifferentialInlineCommentQuery, but
- // PhabricatorApplicationTransactionCommentQuery is currently `final` and
- // I'm not yet decided on how to approach that. For now, just get the PHIDs
- // and then execute a PHID-based query through the standard stack.
-
- $table = new DifferentialTransactionComment();
- $conn_r = $table->establishConnection('r');
-
- $phids = queryfx_all(
- $conn_r,
- 'SELECT phid FROM %T
- WHERE revisionPHID = %s
- AND authorPHID = %s
- AND transactionPHID IS NULL',
- $table->getTableName(),
- $revision->getPHID(),
- $viewer->getPHID());
-
- return ipull($phids, 'phid');
- }
-
}
Index: src/applications/differential/query/DifferentialTransactionQuery.php
===================================================================
--- src/applications/differential/query/DifferentialTransactionQuery.php
+++ src/applications/differential/query/DifferentialTransactionQuery.php
@@ -7,4 +7,39 @@
return new DifferentialTransaction();
}
+ public static function loadUnsubmittedInlineComments(
+ PhabricatorUser $viewer,
+ DifferentialRevision $revision) {
+
+ // TODO: This probably needs to move somewhere more central as we move
+ // away from DifferentialInlineCommentQuery, but
+ // PhabricatorApplicationTransactionCommentQuery is currently `final` and
+ // I'm not yet decided on how to approach that. For now, just get the PHIDs
+ // and then execute a PHID-based query through the standard stack.
+
+ $table = new DifferentialTransactionComment();
+ $conn_r = $table->establishConnection('r');
+
+ $phids = queryfx_all(
+ $conn_r,
+ 'SELECT phid FROM %T
+ WHERE revisionPHID = %s
+ AND authorPHID = %s
+ AND transactionPHID IS NULL',
+ $table->getTableName(),
+ $revision->getPHID(),
+ $viewer->getPHID());
+
+ $phids = ipull($phids, 'phid');
+ if (!$phids) {
+ return array();
+ }
+
+ return id(new PhabricatorApplicationTransactionCommentQuery())
+ ->setTemplate(new DifferentialTransactionComment())
+ ->setViewer($viewer)
+ ->withPHIDs($phids)
+ ->execute();
+ }
+
}
Index: src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
===================================================================
--- src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
+++ src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
@@ -25,6 +25,7 @@
private $isPreview;
private $isHeraldEditor;
private $actingAsPHID;
+ private $disableEmail;
public function setActingAsPHID($acting_as_phid) {
$this->actingAsPHID = $acting_as_phid;
@@ -128,6 +129,21 @@
return $this->isHeraldEditor;
}
+ /**
+ * Prevent this editor from generating email when applying transactions.
+ *
+ * @param bool True to disable email.
+ * @return this
+ */
+ public function setDisableEmail($disable_email) {
+ $this->disableEmail = $disable_email;
+ return $this;
+ }
+
+ public function getDisableEmail() {
+ return $this->disableEmail;
+ }
+
public function getTransactionTypes() {
$types = array();
@@ -682,8 +698,10 @@
$this->loadHandles($xactions);
$mail = null;
- if ($this->shouldSendMail($object, $xactions)) {
- $mail = $this->sendMail($object, $xactions);
+ if (!$this->getDisableEmail()) {
+ if ($this->shouldSendMail($object, $xactions)) {
+ $mail = $this->sendMail($object, $xactions);
+ }
}
if ($this->supportsSearch()) {

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 9, 12:11 PM (2 d, 13 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7386210
Default Alt Text
D8442.diff (7 KB)

Event Timeline