Commit 45c740ac authored by epriestley's avatar epriestley
Browse files

Render revision and audit state icons in Maniphest

Summary:
Fixes T7076. This could probably use some tweaking but should get the basics in place.

This shows overall object state (e.g., "Needs Review"), not individual viewer state (e.g., "you need to review this"). After the bucketing changes it seems like we're mostly in a reasonable place on showing global state instead of viewer state. This makes the overall change much easier than it might otherwise have been.

Test Plan: {F2351867}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T7076

Differential Revision: https://secure.phabricator.com/D17193
parent a635da68
...@@ -33,16 +33,30 @@ final class DifferentialRevisionPHIDType extends PhabricatorPHIDType { ...@@ -33,16 +33,30 @@ final class DifferentialRevisionPHIDType extends PhabricatorPHIDType {
$revision = $objects[$phid]; $revision = $objects[$phid];
$title = $revision->getTitle(); $title = $revision->getTitle();
$id = $revision->getID();
$status = $revision->getStatus(); $status = $revision->getStatus();
$monogram = $revision->getMonogram();
$uri = $revision->getURI();
$handle->setName("D{$id}"); $handle
$handle->setURI("/D{$id}"); ->setName($monogram)
$handle->setFullName("D{$id}: {$title}"); ->setURI($uri)
->setFullName("{$monogram}: {$title}");
if ($revision->isClosed()) { if ($revision->isClosed()) {
$handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED);
} }
$status = $revision->getStatus();
$icon = DifferentialRevisionStatus::getRevisionStatusIcon($status);
$color = DifferentialRevisionStatus::getRevisionStatusColor($status);
$name = ArcanistDifferentialRevisionStatus::getNameForRevisionStatus(
$status);
$handle
->setStateIcon($icon)
->setStateColor($color)
->setStateName($name);
} }
} }
......
...@@ -397,7 +397,8 @@ final class ManiphestTaskDetailController extends ManiphestController { ...@@ -397,7 +397,8 @@ final class ManiphestTaskDetailController extends ManiphestController {
foreach ($commit_phids as $phid) { foreach ($commit_phids as $phid) {
$revisions_commits[$phid] = $handles->renderHandle($phid) $revisions_commits[$phid] = $handles->renderHandle($phid)
->setShowHovercard(true); ->setShowHovercard(true)
->setShowStateIcon(true);
$revision_phid = key($drev_edges[$phid][$commit_drev]); $revision_phid = key($drev_edges[$phid][$commit_drev]);
$revision_handle = $handles->getHandleIfExists($revision_phid); $revision_handle = $handles->getHandleIfExists($revision_phid);
if ($revision_handle) { if ($revision_handle) {
...@@ -412,12 +413,16 @@ final class ManiphestTaskDetailController extends ManiphestController { ...@@ -412,12 +413,16 @@ final class ManiphestTaskDetailController extends ManiphestController {
} }
foreach ($edge_types as $edge_type => $edge_name) { foreach ($edge_types as $edge_type => $edge_name) {
if ($edges[$edge_type]) { if (!$edges[$edge_type]) {
$edge_handles = $viewer->loadHandles(array_keys($edges[$edge_type])); continue;
$view->addProperty(
$edge_name,
$edge_handles->renderList());
} }
$edge_handles = $viewer->loadHandles(array_keys($edges[$edge_type]));
$edge_list = $edge_handles->renderList()
->setShowStateIcons(true);
$view->addProperty($edge_name, $edge_list);
} }
if ($revisions_commits) { if ($revisions_commits) {
......
...@@ -31,6 +31,10 @@ final class PhabricatorObjectHandle ...@@ -31,6 +31,10 @@ final class PhabricatorObjectHandle
private $tokenIcon; private $tokenIcon;
private $commandLineObjectName; private $commandLineObjectName;
private $stateIcon;
private $stateColor;
private $stateName;
public function setIcon($icon) { public function setIcon($icon) {
$this->icon = $icon; $this->icon = $icon;
return $this; return $this;
...@@ -284,6 +288,54 @@ final class PhabricatorObjectHandle ...@@ -284,6 +288,54 @@ final class PhabricatorObjectHandle
return $this->complete; return $this->complete;
} }
public function setStateIcon($state_icon) {
$this->stateIcon = $state_icon;
return $this;
}
public function getStateIcon() {
return $this->stateIcon;
}
public function setStateColor($state_color) {
$this->stateColor = $state_color;
return $this;
}
public function getStateColor() {
return $this->stateColor;
}
public function setStateName($state_name) {
$this->stateName = $state_name;
return $this;
}
public function getStateName() {
return $this->stateName;
}
public function renderStateIcon() {
$icon = $this->getStateIcon();
if ($icon === null) {
$icon = 'fa-question-circle-o';
}
$color = $this->getStateColor();
$name = $this->getStateName();
if ($name === null) {
$name = pht('Unknown');
}
return id(new PHUIIconView())
->setIcon($icon, $color)
->addSigil('has-tooltip')
->setMetadata(
array(
'tip' => $name,
));
}
public function renderLink($name = null) { public function renderLink($name = null) {
return $this->renderLinkWithAttributes($name, array()); return $this->renderLinkWithAttributes($name, array());
......
...@@ -13,6 +13,7 @@ final class PHUIHandleListView ...@@ -13,6 +13,7 @@ final class PHUIHandleListView
private $handleList; private $handleList;
private $asInline; private $asInline;
private $asText; private $asText;
private $showStateIcons;
public function setHandleList(PhabricatorHandleList $list) { public function setHandleList(PhabricatorHandleList $list) {
$this->handleList = $list; $this->handleList = $list;
...@@ -37,6 +38,15 @@ final class PHUIHandleListView ...@@ -37,6 +38,15 @@ final class PHUIHandleListView
return $this->asText; return $this->asText;
} }
public function setShowStateIcons($show_state_icons) {
$this->showStateIcons = $show_state_icons;
return $this;
}
public function getShowStateIcons() {
return $this->showStateIcons;
}
protected function getTagName() { protected function getTagName() {
if ($this->getAsText()) { if ($this->getAsText()) {
return null; return null;
...@@ -49,12 +59,19 @@ final class PHUIHandleListView ...@@ -49,12 +59,19 @@ final class PHUIHandleListView
protected function getTagContent() { protected function getTagContent() {
$list = $this->handleList; $list = $this->handleList;
$show_state_icons = $this->getShowStateIcons();
$items = array(); $items = array();
foreach ($list as $handle) { foreach ($list as $handle) {
$view = $list->renderHandle($handle->getPHID()) $view = $list->renderHandle($handle->getPHID())
->setShowHovercard(true) ->setShowHovercard(true)
->setAsText($this->getAsText()); ->setAsText($this->getAsText());
if ($show_state_icons) {
$view->setShowStateIcon(true);
}
$items[] = $view; $items[] = $view;
} }
......
...@@ -17,6 +17,7 @@ final class PHUIHandleView ...@@ -17,6 +17,7 @@ final class PHUIHandleView
private $asText; private $asText;
private $useShortName; private $useShortName;
private $showHovercard; private $showHovercard;
private $showStateIcon;
public function setHandleList(PhabricatorHandleList $list) { public function setHandleList(PhabricatorHandleList $list) {
$this->handleList = $list; $this->handleList = $list;
...@@ -48,6 +49,15 @@ final class PHUIHandleView ...@@ -48,6 +49,15 @@ final class PHUIHandleView
return $this; return $this;
} }
public function setShowStateIcon($show_state_icon) {
$this->showStateIcon = $show_state_icon;
return $this;
}
public function getShowStateIcon() {
return $this->showStateIcon;
}
public function render() { public function render() {
$handle = $this->handleList[$this->handlePHID]; $handle = $this->handleList[$this->handlePHID];
...@@ -77,6 +87,11 @@ final class PHUIHandleView ...@@ -77,6 +87,11 @@ final class PHUIHandleView
$link = $handle->renderLink($name); $link = $handle->renderLink($name);
} }
if ($this->showStateIcon) {
$icon = $handle->renderStateIcon();
$link = array($icon, ' ', $link);
}
return $link; return $link;
} }
......
...@@ -81,6 +81,16 @@ final class PhabricatorRepositoryCommitPHIDType extends PhabricatorPHIDType { ...@@ -81,6 +81,16 @@ final class PhabricatorRepositoryCommitPHIDType extends PhabricatorPHIDType {
$handle->setFullName($full_name); $handle->setFullName($full_name);
$handle->setURI($commit->getURI()); $handle->setURI($commit->getURI());
$handle->setTimestamp($commit->getEpoch()); $handle->setTimestamp($commit->getEpoch());
$status = $commit->getAuditStatus();
$icon = PhabricatorAuditCommitStatusConstants::getStatusIcon($status);
$color = PhabricatorAuditCommitStatusConstants::getStatusColor($status);
$name = PhabricatorAuditCommitStatusConstants::getStatusName($status);
$handle
->setStateIcon($icon)
->setStateColor($color)
->setStateName($name);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment