Page MenuHomePhabricator

D19859.diff
No OneTemporary

D19859.diff

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
@@ -4658,9 +4658,21 @@
$new_value[$key] = $state_map[$state];
}
+ // See PHI995. Copy some information about the inlines into the transaction
+ // so we can tailor rendering behavior. In particular, we don't want to
+ // render transactions about users marking their own inlines as "Done".
+
+ $inline_details = array();
+ foreach ($inlines as $inline) {
+ $inline_details[$inline->getPHID()] = array(
+ 'authorPHID' => $inline->getAuthorPHID(),
+ );
+ }
+
return $object->getApplicationTransactionTemplate()
->setTransactionType(PhabricatorTransactions::TYPE_INLINESTATE)
->setIgnoreOnNoEffect(true)
+ ->setMetadataValue('inline.details', $inline_details)
->setOldValue($old_value)
->setNewValue($new_value);
}
diff --git a/src/applications/transactions/storage/PhabricatorApplicationTransaction.php b/src/applications/transactions/storage/PhabricatorApplicationTransaction.php
--- a/src/applications/transactions/storage/PhabricatorApplicationTransaction.php
+++ b/src/applications/transactions/storage/PhabricatorApplicationTransaction.php
@@ -664,6 +664,16 @@
break;
}
break;
+
+ case PhabricatorTransactions::TYPE_INLINESTATE:
+ list($done, $undone) = $this->getInterestingInlineStateChangeCounts();
+
+ if (!$done && !$undone) {
+ return true;
+ }
+
+ break;
+
}
return false;
@@ -1007,15 +1017,7 @@
}
case PhabricatorTransactions::TYPE_INLINESTATE:
- $done = 0;
- $undone = 0;
- foreach ($new as $phid => $state) {
- if ($state == PhabricatorInlineCommentInterface::STATE_DONE) {
- $done++;
- } else {
- $undone++;
- }
- }
+ list($done, $undone) = $this->getInterestingInlineStateChangeCounts();
if ($done && $undone) {
return pht(
'%s marked %s inline comment(s) as done and %s inline comment(s) '.
@@ -1582,6 +1584,49 @@
return $moves;
}
+ private function getInterestingInlineStateChangeCounts() {
+ // See PHI995. Newer inline state transactions have additional details
+ // which we use to tailor the rendering behavior. These details are not
+ // present on older transactions.
+ $details = $this->getMetadataValue('inline.details', array());
+
+ $new = $this->getNewValue();
+
+ $done = 0;
+ $undone = 0;
+ foreach ($new as $phid => $state) {
+ $is_done = ($state == PhabricatorInlineCommentInterface::STATE_DONE);
+
+ // See PHI995. If you're marking your own inline comments as "Done",
+ // don't count them when rendering a timeline story. In the case where
+ // you're only affecting your own comments, this will hide the
+ // "alice marked X comments as done" story entirely.
+
+ // Usually, this happens when you pre-mark inlines as "done" and submit
+ // them yourself. We'll still generate an "alice added inline comments"
+ // story (in most cases/contexts), but the state change story is largely
+ // just clutter and slightly confusing/misleading.
+
+ $inline_details = idx($details, $phid, array());
+ $inline_author_phid = idx($inline_details, 'authorPHID');
+ if ($inline_author_phid) {
+ if ($inline_author_phid == $this->getAuthorPHID()) {
+ if ($is_done) {
+ continue;
+ }
+ }
+ }
+
+ if ($is_done) {
+ $done++;
+ } else {
+ $undone++;
+ }
+ }
+
+ return array($done, $undone);
+ }
+
/* -( PhabricatorPolicyInterface Implementation )-------------------------- */

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 26, 3:49 PM (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7324846
Default Alt Text
D19859.diff (3 KB)

Event Timeline