Page MenuHomePhabricator

D17208.diff
No OneTemporary

D17208.diff

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

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)

Event Timeline