Page MenuHomePhabricator
Paste P1094


Authored by epriestley on Mar 18 2014, 2:18 AM.
Referenced Files
F131169: ExampleCustomField.php
Mar 18 2014, 2:18 AM
"Like" token, awarded by ofbeaton.
final class ExampleCustomField extends ManiphestCustomField {
public function getFieldKey() {
return 'example:test';
public function shouldAppearInPropertyView() {
return true;
public function renderPropertyViewLabel() {
return pht('Dependency Graph');
public function renderPropertyViewValue(array $handles) {
$task = $this->getObject();
$edge_type = PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK;
$graph = id(new PhabricatorEdgeGraph())
'<seed>' => array($task->getPHID()),
$nodes = $graph->getNodes();
if (count($nodes) == 1) {
return null;
$phids = array_keys($nodes);
$handles = id(new PhabricatorHandleQuery())
return $this->drawNodes($task->getPHID(), $nodes, $handles, true);
private function drawNodes($phid, $nodes, $handles, $is_top = false) {
$content = array();
if (!$is_top) {
$content[] = phutil_tag('li', array(), $handles[$phid]->renderLink());
foreach ($nodes[$phid] as $other) {
$content[] = phutil_tag(
'style' => $is_top ? null : 'padding-left: 16px;',
$this->drawNodes($other, $nodes, $handles));
return phutil_tag('ul', array(), $content);

Event Timeline

epriestley changed the title of this paste from untitled to ExampleCustomField.php.
epriestley updated the paste's language from autodetect to autodetect.

$edge_type = PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK;
This won't work in current code, since December 2014

Use ManiphestTaskDependsOnTaskEdgeType::EDGECONST instead

Hi guys, any update on this general issue of viewing subtasks in a nested manner?

I tried the above code for ExampleCustomField in the current (master) version of Phabricator. Neither of the 2 options work for $edge_type


Hi guys, any update on this general issue of viewing subtasks in a nested manner?

Every task here is 100% up to date, we don't have a secret second install with "real" updates. Just go to T4207 and click subscribe!

You may also want to follow T10034.

Does this workaround change anything in the database? - I'm thinking about using this in our production environment ;)

@OCram I've been using it in production for months, it works well enough for our needs, including in the current codebase. It just displays child tasks in a tree-like manner, doesn't change anything.