Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15334795
D8442.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D8442.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D8442: Use TransactionEditor in differential.createcomment
Attached
Detach File
Event Timeline
Log In to Comment