Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15413637
D21234.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
D21234.diff
View Options
diff --git a/src/applications/differential/editor/DifferentialRevisionEditEngine.php b/src/applications/differential/editor/DifferentialRevisionEditEngine.php
--- a/src/applications/differential/editor/DifferentialRevisionEditEngine.php
+++ b/src/applications/differential/editor/DifferentialRevisionEditEngine.php
@@ -302,24 +302,14 @@
protected function newAutomaticCommentTransactions($object) {
$viewer = $this->getViewer();
- $xactions = array();
-
- $inlines = DifferentialTransactionQuery::loadUnsubmittedInlineComments(
- $viewer,
- $object);
- $inlines = msort($inlines, 'getID');
$editor = $object->getApplicationTransactionEditor()
->setActor($viewer);
- $query_template = id(new DifferentialDiffInlineCommentQuery())
- ->withRevisionPHIDs(array($object->getPHID()));
-
$xactions = $editor->newAutomaticInlineTransactions(
$object,
- $inlines,
DifferentialTransaction::TYPE_INLINE,
- $query_template);
+ new DifferentialDiffInlineCommentQuery());
return $xactions;
}
diff --git a/src/applications/differential/engine/DifferentialRevisionDraftEngine.php b/src/applications/differential/engine/DifferentialRevisionDraftEngine.php
--- a/src/applications/differential/engine/DifferentialRevisionDraftEngine.php
+++ b/src/applications/differential/engine/DifferentialRevisionDraftEngine.php
@@ -7,9 +7,11 @@
$viewer = $this->getViewer();
$revision = $this->getObject();
- $inlines = DifferentialTransactionQuery::loadUnsubmittedInlineComments(
- $viewer,
- $revision);
+ $inlines = id(new DifferentialDiffInlineCommentQuery())
+ ->setViewer($viewer)
+ ->withRevisionPHIDs(array($revision->getPHID()))
+ ->withPublishableComments(true)
+ ->execute();
return (bool)$inlines;
}
diff --git a/src/applications/differential/query/DifferentialTransactionQuery.php b/src/applications/differential/query/DifferentialTransactionQuery.php
--- a/src/applications/differential/query/DifferentialTransactionQuery.php
+++ b/src/applications/differential/query/DifferentialTransactionQuery.php
@@ -7,49 +7,4 @@
return new DifferentialTransaction();
}
- public static function loadUnsubmittedInlineComments(
- PhabricatorUser $viewer,
- DifferentialRevision $revision) {
-
- $inlines = id(new DifferentialDiffInlineCommentQuery())
- ->setViewer($viewer)
- ->withRevisionPHIDs(array($revision->getPHID()))
- ->withAuthorPHIDs(array($viewer->getPHID()))
- ->withHasTransaction(false)
- ->withIsDeleted(false)
- ->needReplyToComments(true)
- ->execute();
-
- foreach ($inlines as $key => $inline) {
- $inlines[$key] = DifferentialInlineComment::newFromModernComment(
- $inline);
- }
-
- PhabricatorInlineComment::loadAndAttachVersionedDrafts(
- $viewer,
- $inlines);
-
- // Don't count void inlines when considering draft state.
- foreach ($inlines as $key => $inline) {
- if ($inline->isVoidComment($viewer)) {
- unset($inlines[$key]);
- continue;
- }
-
- // For other inlines: if they have a nonempty draft state, set their
- // content to the draft state content. We want to submit the comment
- // as it is currently shown to the user, not as it was stored the last
- // time they clicked "Save".
-
- $draft_content = $inline->getContentForEdit($viewer);
- if (strlen($draft_content)) {
- $inline->setContent($draft_content);
- }
- }
-
- $inlines = mpull($inlines, 'getStorageObject');
-
- return $inlines;
- }
-
}
diff --git a/src/applications/diffusion/editor/DiffusionCommitEditEngine.php b/src/applications/diffusion/editor/DiffusionCommitEditEngine.php
--- a/src/applications/diffusion/editor/DiffusionCommitEditEngine.php
+++ b/src/applications/diffusion/editor/DiffusionCommitEditEngine.php
@@ -126,27 +126,14 @@
protected function newAutomaticCommentTransactions($object) {
$viewer = $this->getViewer();
- $xactions = array();
-
- $inlines = id(new DiffusionDiffInlineCommentQuery())
- ->setViewer($viewer)
- ->withObjectPHIDs(array($object->getPHID()))
- ->withPublishableComments(true)
- ->needReplyToComments(true)
- ->execute();
- $inlines = msort($inlines, 'getID');
$editor = $object->getApplicationTransactionEditor()
->setActor($viewer);
- $query_template = id(new DiffusionDiffInlineCommentQuery())
- ->withCommitPHIDs(array($object->getPHID()));
-
$xactions = $editor->newAutomaticInlineTransactions(
$object,
- $inlines,
PhabricatorAuditActionConstants::INLINE,
- $query_template);
+ new DiffusionDiffInlineCommentQuery());
return $xactions;
}
diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
--- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
+++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php
@@ -5027,18 +5027,23 @@
public function newAutomaticInlineTransactions(
PhabricatorLiskDAO $object,
- array $inlines,
$transaction_type,
PhabricatorCursorPagedPolicyAwareQuery $query_template) {
+ $actor = $this->getActor();
+
+ $inlines = id(clone $query_template)
+ ->setViewer($actor)
+ ->withObjectPHIDs(array($object->getPHID()))
+ ->withPublishableComments(true)
+ ->needAppliedDrafts(true)
+ ->needReplyToComments(true)
+ ->execute();
+ $inlines = msort($inlines, 'getID');
+
$xactions = array();
foreach ($inlines as $key => $inline) {
- if ($inline->isEmptyInlineComment()) {
- unset($inlines[$key]);
- continue;
- }
-
$xactions[] = $object->getApplicationTransactionTemplate()
->setTransactionType($transaction_type)
->attachComment($inline);
@@ -5065,31 +5070,17 @@
$state_map = PhabricatorTransactions::getInlineStateMap();
- $query = id(clone $query_template)
+ $inline_query = id(clone $query_template)
->setViewer($this->getActor())
- ->withFixedStates(array_keys($state_map));
-
- $inlines = array();
-
- $inlines[] = id(clone $query)
- ->withAuthorPHIDs(array($actor_phid))
- ->withHasTransaction(false)
- ->execute();
+ ->withObjectPHIDs(array($object->getPHID()))
+ ->withFixedStates(array_keys($state_map))
+ ->withPublishableComments(true);
if ($actor_is_author) {
- $inlines[] = id(clone $query)
- ->withHasTransaction(true)
- ->execute();
+ $inline_query->withPublishedComments(true);
}
- $inlines = array_mergev($inlines);
-
- foreach ($inlines as $key => $inline) {
- if ($inline->isEmptyInlineComment()) {
- unset($inlines[$key]);
- continue;
- }
- }
+ $inlines = $inline_query->execute();
if (!$inlines) {
return null;
diff --git a/src/infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php b/src/infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php
--- a/src/infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php
+++ b/src/infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php
@@ -8,6 +8,7 @@
private $publishedComments;
private $publishableComments;
private $needHidden;
+ private $needAppliedDrafts;
abstract protected function buildInlineCommentWhereClauseParts(
AphrontDatabaseConnection $conn);
@@ -41,6 +42,11 @@
return $this;
}
+ final public function needAppliedDrafts($need_applied) {
+ $this->needAppliedDrafts = $need_applied;
+ return $this;
+ }
+
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
$where = parent::buildWhereClauseParts($conn);
$alias = $this->getPrimaryTableAlias();
@@ -124,65 +130,121 @@
return $where;
}
- protected function willFilterPage(array $comments) {
+ protected function willFilterPage(array $inlines) {
+ $viewer = $this->getViewer();
+
if ($this->needReplyToComments) {
$reply_phids = array();
- foreach ($comments as $comment) {
- $reply_phid = $comment->getReplyToCommentPHID();
+ foreach ($inlines as $inline) {
+ $reply_phid = $inline->getReplyToCommentPHID();
if ($reply_phid) {
$reply_phids[] = $reply_phid;
}
}
if ($reply_phids) {
- $reply_comments = newv(get_class($this), array())
+ $reply_inlines = newv(get_class($this), array())
->setViewer($this->getViewer())
->setParentQuery($this)
->withPHIDs($reply_phids)
->execute();
- $reply_comments = mpull($reply_comments, null, 'getPHID');
+ $reply_inlines = mpull($reply_inlines, null, 'getPHID');
} else {
- $reply_comments = array();
+ $reply_inlines = array();
}
- foreach ($comments as $key => $comment) {
- $reply_phid = $comment->getReplyToCommentPHID();
+ foreach ($inlines as $key => $inline) {
+ $reply_phid = $inline->getReplyToCommentPHID();
if (!$reply_phid) {
- $comment->attachReplyToComment(null);
+ $inline->attachReplyToComment(null);
continue;
}
- $reply = idx($reply_comments, $reply_phid);
+ $reply = idx($reply_inlines, $reply_phid);
if (!$reply) {
- $this->didRejectResult($comment);
- unset($comments[$key]);
+ $this->didRejectResult($inline);
+ unset($inlines[$key]);
continue;
}
- $comment->attachReplyToComment($reply);
+ $inline->attachReplyToComment($reply);
}
}
- if (!$comments) {
- return $comments;
+ if (!$inlines) {
+ return $inlines;
}
if ($this->needHidden) {
- $viewer = $this->getViewer();
$viewer_phid = $viewer->getPHID();
if ($viewer_phid) {
$hidden = $this->loadHiddenCommentIDs(
$viewer_phid,
- $comments);
+ $inlines);
} else {
$hidden = array();
}
- foreach ($comments as $inline) {
+ foreach ($inlines as $inline) {
$inline->attachIsHidden(isset($hidden[$inline->getID()]));
}
}
- return $comments;
+ if (!$inlines) {
+ return $inlines;
+ }
+
+ $need_drafts = $this->needAppliedDrafts;
+ $drop_void = $this->publishableComments;
+ $convert_objects = ($need_drafts || $drop_void);
+
+ if ($convert_objects) {
+ $inlines = mpull($inlines, 'newInlineCommentObject');
+
+ PhabricatorInlineComment::loadAndAttachVersionedDrafts(
+ $viewer,
+ $inlines);
+
+ if ($need_drafts) {
+ // Don't count void inlines when considering draft state.
+ foreach ($inlines as $key => $inline) {
+ if ($inline->isVoidComment($viewer)) {
+ $this->didRejectResult($inline->getStorageObject());
+ unset($inlines[$key]);
+ continue;
+ }
+
+ // For other inlines: if they have a nonempty draft state, set their
+ // content to the draft state content. We want to submit the comment
+ // as it is currently shown to the user, not as it was stored the last
+ // time they clicked "Save".
+
+ $draft_content = $inline->getContentForEdit($viewer);
+ if (strlen($draft_content)) {
+ $inline->setContent($draft_content);
+ }
+ }
+ }
+
+ // If we're loading publishable comments, discard any comments that are
+ // empty.
+ if ($drop_void) {
+ foreach ($inlines as $key => $inline) {
+ if ($inline->getTransactionPHID()) {
+ continue;
+ }
+
+ if ($inline->isVoidComment($viewer)) {
+ $this->didRejectResult($inline->getStorageObject());
+ unset($inlines[$key]);
+ continue;
+ }
+ }
+ }
+
+ $inlines = mpull($inlines, 'getStorageObject');
+ }
+
+ return $inlines;
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Mar 20, 8:16 PM (2 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7332174
Default Alt Text
D21234.diff (11 KB)
Attached To
Mode
D21234: Replace "loadUnsubmittedInlineComments()" with a modern "DiffQuery"
Attached
Detach File
Event Timeline
Log In to Comment