Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15335452
D21833.id52034.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D21833.id52034.diff
View Options
diff --git a/src/applications/files/markup/PhabricatorEmbedFileRemarkupRule.php b/src/applications/files/markup/PhabricatorEmbedFileRemarkupRule.php
--- a/src/applications/files/markup/PhabricatorEmbedFileRemarkupRule.php
+++ b/src/applications/files/markup/PhabricatorEmbedFileRemarkupRule.php
@@ -5,7 +5,7 @@
private $viewer;
- const KEY_EMBED_FILE_PHIDS = 'phabricator.embedded-file-phids';
+ const KEY_ATTACH_INTENT_FILE_PHIDS = 'files.attach-intent';
protected function getObjectNamePrefix() {
return 'F';
@@ -23,13 +23,44 @@
PhabricatorFileThumbnailTransform::TRANSFORM_PREVIEW,
))
->execute();
+ $objects = mpull($objects, null, 'getID');
- $phids_key = self::KEY_EMBED_FILE_PHIDS;
- $phids = $engine->getTextMetadata($phids_key, array());
- foreach (mpull($objects, 'getPHID') as $phid) {
- $phids[] = $phid;
+
+ // Identify files embedded in the block with "attachment intent", i.e.
+ // those files which the user appears to want to attach to the object.
+ // Files referenced inside quoted blocks are not considered to have this
+ // attachment intent.
+
+ $metadata_key = self::KEY_RULE_OBJECT.'.'.$this->getObjectNamePrefix();
+ $metadata = $engine->getTextMetadata($metadata_key, array());
+
+ $attach_key = self::KEY_ATTACH_INTENT_FILE_PHIDS;
+ $attach_phids = $engine->getTextMetadata($attach_key, array());
+
+ foreach ($metadata as $item) {
+
+ // If this reference was inside a quoted block, don't count it. Quoting
+ // someone else doesn't establish an intent to attach a file.
+ $depth = idx($item, 'quote.depth');
+ if ($depth > 0) {
+ continue;
+ }
+
+ $id = $item['id'];
+ $file = idx($objects, $id);
+
+ if (!$file) {
+ continue;
+ }
+
+ $attach_phids[] = $file->getPHID();
}
- $engine->setTextMetadata($phids_key, $phids);
+
+ $attach_phids = array_fuse($attach_phids);
+ $attach_phids = array_keys($attach_phids);
+
+ $engine->setTextMetadata($attach_key, $attach_phids);
+
return $objects;
}
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
@@ -2286,7 +2286,7 @@
foreach ($remarkup_changes as $remarkup_change) {
$metadata = $remarkup_change->getMetadata();
- $attached_phids = idx($metadata, 'attachedFilePHIDs');
+ $attached_phids = idx($metadata, 'attachedFilePHIDs', array());
foreach ($attached_phids as $file_phid) {
// If the blocks don't include a new embedded reference to this file,
diff --git a/src/infrastructure/markup/PhabricatorMarkupEngine.php b/src/infrastructure/markup/PhabricatorMarkupEngine.php
--- a/src/infrastructure/markup/PhabricatorMarkupEngine.php
+++ b/src/infrastructure/markup/PhabricatorMarkupEngine.php
@@ -632,7 +632,7 @@
foreach ($content_blocks as $content_block) {
$engine->markupText($content_block);
$phids = $engine->getTextMetadata(
- PhabricatorEmbedFileRemarkupRule::KEY_EMBED_FILE_PHIDS,
+ PhabricatorEmbedFileRemarkupRule::KEY_ATTACH_INTENT_FILE_PHIDS,
array());
foreach ($phids as $phid) {
$files[$phid] = $phid;
diff --git a/src/infrastructure/markup/blockrule/PhutilRemarkupBlockRule.php b/src/infrastructure/markup/blockrule/PhutilRemarkupBlockRule.php
--- a/src/infrastructure/markup/blockrule/PhutilRemarkupBlockRule.php
+++ b/src/infrastructure/markup/blockrule/PhutilRemarkupBlockRule.php
@@ -43,6 +43,14 @@
return;
}
+ public function willMarkupChildBlocks() {
+ return;
+ }
+
+ public function didMarkupChildBlocks() {
+ return;
+ }
+
final public function setEngine(PhutilRemarkupEngine $engine) {
$this->engine = $engine;
$this->updateRules();
diff --git a/src/infrastructure/markup/blockrule/PhutilRemarkupQuotedBlockRule.php b/src/infrastructure/markup/blockrule/PhutilRemarkupQuotedBlockRule.php
--- a/src/infrastructure/markup/blockrule/PhutilRemarkupQuotedBlockRule.php
+++ b/src/infrastructure/markup/blockrule/PhutilRemarkupQuotedBlockRule.php
@@ -7,6 +7,22 @@
return true;
}
+ public function willMarkupChildBlocks() {
+ $engine = $this->getEngine();
+
+ $depth = $engine->getQuoteDepth();
+ $depth = $depth + 1;
+ $engine->setQuoteDepth($depth);
+ }
+
+ public function didMarkupChildBlocks() {
+ $engine = $this->getEngine();
+
+ $depth = $engine->getQuoteDepth();
+ $depth = $depth - 1;
+ $engine->setQuoteDepth($depth);
+ }
+
final protected function normalizeQuotedBody($text) {
$text = phutil_split_lines($text, true);
foreach ($text as $key => $line) {
diff --git a/src/infrastructure/markup/remarkup/PhutilRemarkupEngine.php b/src/infrastructure/markup/remarkup/PhutilRemarkupEngine.php
--- a/src/infrastructure/markup/remarkup/PhutilRemarkupEngine.php
+++ b/src/infrastructure/markup/remarkup/PhutilRemarkupEngine.php
@@ -42,6 +42,14 @@
return $this->mode & self::MODE_HTML_MAIL;
}
+ public function getQuoteDepth() {
+ return $this->getConfig('runtime.quote.depth', 0);
+ }
+
+ public function setQuoteDepth($depth) {
+ return $this->setConfig('runtime.quote.depth', $depth);
+ }
+
public function setBlockRules(array $rules) {
assert_instances_of($rules, 'PhutilRemarkupBlockRule');
@@ -255,18 +263,24 @@
}
private function markupBlock(array $block) {
+ $rule = $block['rule'];
+
+ $rule->willMarkupChildBlocks();
+
$children = array();
foreach ($block['children'] as $child) {
$children[] = $this->markupBlock($child);
}
+ $rule->didMarkupChildBlocks();
+
if ($children) {
$children = $this->flattenOutput($children);
} else {
$children = null;
}
- return $block['rule']->markupText($block['text'], $children);
+ return $rule->markupText($block['text'], $children);
}
private function flattenOutput(array $output) {
diff --git a/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php b/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php
--- a/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php
+++ b/src/infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php
@@ -318,6 +318,7 @@
'id' => $matches[1],
'options' => idx($matches, 2),
'original' => $matches[0],
+ 'quote.depth' => $engine->getQuoteDepth(),
));
}
@@ -337,6 +338,7 @@
'id' => $matches[1],
'anchor' => idx($matches, 2),
'original' => $matches[0],
+ 'quote.depth' => $engine->getQuoteDepth(),
));
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 9, 3:31 PM (2 w, 19 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7389527
Default Alt Text
D21833.id52034.diff (6 KB)
Attached To
Mode
D21833: Don't consider file references inside quoted text blocks to grant "attachment intent"
Attached
Detach File
Event Timeline
Log In to Comment