Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15188693
D17208.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
D17208.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -629,6 +629,7 @@
'DiffusionCommitDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentHeraldField.php',
'DiffusionCommitDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentRemovedHeraldField.php',
'DiffusionCommitDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffEnormousHeraldField.php',
+ 'DiffusionCommitDraftEngine' => 'applications/diffusion/engine/DiffusionCommitDraftEngine.php',
'DiffusionCommitEditConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitEditConduitAPIMethod.php',
'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
'DiffusionCommitEditEngine' => 'applications/diffusion/editor/DiffusionCommitEditEngine.php',
@@ -5341,6 +5342,7 @@
'DiffusionCommitDiffContentHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffContentRemovedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitDiffEnormousHeraldField' => 'DiffusionCommitHeraldField',
+ 'DiffusionCommitDraftEngine' => 'PhabricatorDraftEngine',
'DiffusionCommitEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
'DiffusionCommitEditController' => 'DiffusionController',
'DiffusionCommitEditEngine' => 'PhabricatorEditEngine',
@@ -8794,6 +8796,7 @@
'PhabricatorApplicationTransactionInterface',
'PhabricatorFulltextInterface',
'PhabricatorConduitResultInterface',
+ 'PhabricatorDraftInterface',
),
'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
diff --git a/src/applications/audit/query/PhabricatorCommitSearchEngine.php b/src/applications/audit/query/PhabricatorCommitSearchEngine.php
--- a/src/applications/audit/query/PhabricatorCommitSearchEngine.php
+++ b/src/applications/audit/query/PhabricatorCommitSearchEngine.php
@@ -14,7 +14,8 @@
public function newQuery() {
return id(new DiffusionCommitQuery())
->needAuditRequests(true)
- ->needCommitData(true);
+ ->needCommitData(true)
+ ->needDrafts(true);
}
protected function newResultBuckets() {
@@ -140,7 +141,8 @@
$bucket = $this->getResultBucket($query);
$template = id(new PhabricatorAuditListView())
- ->setViewer($viewer);
+ ->setViewer($viewer)
+ ->setShowDrafts(true);
$views = array();
if ($bucket) {
diff --git a/src/applications/audit/view/PhabricatorAuditListView.php b/src/applications/audit/view/PhabricatorAuditListView.php
--- a/src/applications/audit/view/PhabricatorAuditListView.php
+++ b/src/applications/audit/view/PhabricatorAuditListView.php
@@ -4,6 +4,7 @@
private $commits;
private $header;
+ private $showDrafts;
private $noDataString;
private $highlightedAudits;
@@ -25,6 +26,15 @@
return $this->header;
}
+ public function setShowDrafts($show_drafts) {
+ $this->showDrafts = $show_drafts;
+ return $this;
+ }
+
+ public function getShowDrafts() {
+ return $this->showDrafts;
+ }
+
/**
* These commits should have both commit data and audit requests attached.
*/
@@ -75,6 +85,16 @@
$handles = $viewer->loadHandles(mpull($this->commits, 'getPHID'));
+ $show_drafts = $this->getShowDrafts();
+
+ $draft_icon = id(new PHUIIconView())
+ ->setIcon('fa-comment yellow')
+ ->addSigil('has-tooltip')
+ ->setMetadata(
+ array(
+ 'tip' => pht('Unsubmitted Comments'),
+ ));
+
$list = new PHUIObjectItemListView();
foreach ($this->commits as $commit) {
$commit_phid = $commit->getPHID();
@@ -88,7 +108,6 @@
$audits = mpull($commit->getAudits(), null, 'getAuditorPHID');
$auditors = array();
- $reasons = array();
foreach ($audits as $audit) {
$auditor_phid = $audit->getAuditorPHID();
$auditors[$auditor_phid] = $viewer->renderHandle($auditor_phid);
@@ -114,9 +133,16 @@
$item = id(new PHUIObjectItemView())
->setObjectName($commit_name)
->setHeader($commit_desc)
- ->setHref($commit_link)
+ ->setHref($commit_link);
+
+ if ($show_drafts) {
+ if ($commit->getHasDraft($viewer)) {
+ $item->addAttribute($draft_icon);
+ }
+ }
+
+ $item
->addAttribute(pht('Author: %s', $author_name))
- ->addAttribute($reasons)
->addIcon('none', $committed);
if (!empty($auditors)) {
diff --git a/src/applications/differential/query/DifferentialRevisionQuery.php b/src/applications/differential/query/DifferentialRevisionQuery.php
--- a/src/applications/differential/query/DifferentialRevisionQuery.php
+++ b/src/applications/differential/query/DifferentialRevisionQuery.php
@@ -473,34 +473,9 @@
}
if ($this->needDrafts) {
- $viewer_phid = $viewer->getPHID();
- $draft_type = PhabricatorObjectHasDraftEdgeType::EDGECONST;
-
- if (!$viewer_phid) {
- // Viewers without a valid PHID can never have drafts.
- foreach ($revisions as $revision) {
- $revision->attachHasDraft($viewer, false);
- }
- } else {
- $edge_query = id(new PhabricatorEdgeQuery())
- ->withSourcePHIDs(mpull($revisions, 'getPHID'))
- ->withEdgeTypes(
- array(
- $draft_type,
- ))
- ->withDestinationPHIDs(array($viewer_phid));
-
- $edge_query->execute();
-
- foreach ($revisions as $revision) {
- $has_draft = (bool)$edge_query->getDestinationPHIDs(
- array(
- $revision->getPHID(),
- ));
-
- $revision->attachHasDraft($viewer, $has_draft);
- }
- }
+ PhabricatorDraftEngine::attachDrafts(
+ $viewer,
+ $revisions);
}
return $revisions;
diff --git a/src/applications/diffusion/engine/DiffusionCommitDraftEngine.php b/src/applications/diffusion/engine/DiffusionCommitDraftEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/engine/DiffusionCommitDraftEngine.php
@@ -0,0 +1,18 @@
+<?php
+
+final class DiffusionCommitDraftEngine
+ extends PhabricatorDraftEngine {
+
+ protected function hasCustomDraftContent() {
+ $viewer = $this->getViewer();
+ $commit = $this->getObject();
+
+ $inlines = PhabricatorAuditInlineComment::loadDraftComments(
+ $viewer,
+ $commit->getPHID(),
+ $raw = true);
+
+ return (bool)$inlines;
+ }
+
+}
diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php
--- a/src/applications/diffusion/query/DiffusionCommitQuery.php
+++ b/src/applications/diffusion/query/DiffusionCommitQuery.php
@@ -22,6 +22,7 @@
private $importing;
private $needCommitData;
+ private $needDrafts;
public function withIDs(array $ids) {
$this->ids = $ids;
@@ -98,6 +99,11 @@
return $this;
}
+ public function needDrafts($need) {
+ $this->needDrafts = $need;
+ return $this;
+ }
+
public function needAuditRequests($need) {
$this->needAuditRequests = $need;
return $this;
@@ -239,6 +245,8 @@
}
protected function didFilterPage(array $commits) {
+ $viewer = $this->getViewer();
+
if ($this->needCommitData) {
$data = id(new PhabricatorRepositoryCommitData())->loadAllWhere(
'commitID in (%Ld)',
@@ -268,6 +276,12 @@
}
}
+ if ($this->needDrafts) {
+ PhabricatorDraftEngine::attachDrafts(
+ $viewer,
+ $commits);
+ }
+
return $commits;
}
diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php
--- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php
+++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php
@@ -14,7 +14,8 @@
PhabricatorCustomFieldInterface,
PhabricatorApplicationTransactionInterface,
PhabricatorFulltextInterface,
- PhabricatorConduitResultInterface {
+ PhabricatorConduitResultInterface,
+ PhabricatorDraftInterface {
protected $repositoryID;
protected $phid;
@@ -39,6 +40,7 @@
private $audits = self::ATTACHABLE;
private $repository = self::ATTACHABLE;
private $customFields = self::ATTACHABLE;
+ private $drafts = array();
public function attachRepository(PhabricatorRepository $repository) {
$this->repository = $repository;
@@ -342,6 +344,7 @@
return nonempty($parsed->getDisplayName(), $parsed->getAddress());
}
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */
public function getCapabilities() {
@@ -603,4 +606,20 @@
return array();
}
+
+/* -( PhabricatorDraftInterface )------------------------------------------ */
+
+ public function newDraftEngine() {
+ return new DiffusionCommitDraftEngine();
+ }
+
+ public function getHasDraft(PhabricatorUser $viewer) {
+ return $this->assertAttachedKey($this->drafts, $viewer->getCacheFragment());
+ }
+
+ public function attachHasDraft(PhabricatorUser $viewer, $has_draft) {
+ $this->drafts[$viewer->getCacheFragment()] = $has_draft;
+ return $this;
+ }
+
}
diff --git a/src/applications/transactions/draft/PhabricatorDraftEngine.php b/src/applications/transactions/draft/PhabricatorDraftEngine.php
--- a/src/applications/transactions/draft/PhabricatorDraftEngine.php
+++ b/src/applications/transactions/draft/PhabricatorDraftEngine.php
@@ -95,4 +95,41 @@
$editor->save();
}
+ final public static function attachDrafts(
+ PhabricatorUser $viewer,
+ array $objects) {
+ assert_instances_of($objects, 'PhabricatorDraftInterface');
+
+ $viewer_phid = $viewer->getPHID();
+
+ if (!$viewer_phid) {
+ // Viewers without a valid PHID can never have drafts.
+ foreach ($objects as $object) {
+ $object->attachHasDraft($viewer, false);
+ }
+ return;
+ } else {
+ $draft_type = PhabricatorObjectHasDraftEdgeType::EDGECONST;
+
+ $edge_query = id(new PhabricatorEdgeQuery())
+ ->withSourcePHIDs(mpull($objects, 'getPHID'))
+ ->withEdgeTypes(
+ array(
+ $draft_type,
+ ))
+ ->withDestinationPHIDs(array($viewer_phid));
+
+ $edge_query->execute();
+
+ foreach ($objects as $object) {
+ $has_draft = (bool)$edge_query->getDestinationPHIDs(
+ array(
+ $object->getPHID(),
+ ));
+
+ $object->attachHasDraft($viewer, $has_draft);
+ }
+ }
+ }
+
}
diff --git a/src/applications/transactions/draft/PhabricatorDraftInterface.php b/src/applications/transactions/draft/PhabricatorDraftInterface.php
--- a/src/applications/transactions/draft/PhabricatorDraftInterface.php
+++ b/src/applications/transactions/draft/PhabricatorDraftInterface.php
@@ -4,4 +4,25 @@
public function newDraftEngine();
+ public function getHasDraft(PhabricatorUser $viewer);
+ public function attachHasDraft(PhabricatorUser $viewer, $has_draft);
+
}
+
+/* -( PhabricatorDraftInterface )------------------------------------------ */
+/*
+
+ public function newDraftEngine() {
+ return new <...>DraftEngine();
+ }
+
+ public function getHasDraft(PhabricatorUser $viewer) {
+ return $this->assertAttachedKey($this->drafts, $viewer->getCacheFragment());
+ }
+
+ public function attachHasDraft(PhabricatorUser $viewer, $has_draft) {
+ $this->drafts[$viewer->getCacheFragment()] = $has_draft;
+ return $this;
+ }
+
+*/
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 22, 3:04 PM (3 h, 28 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7181155
Default Alt Text
D17208.diff (11 KB)
Attached To
Mode
D17208: Show yellow "draft" bubble in Audit
Attached
Detach File
Event Timeline
Log In to Comment