Differential D20884 Diff 49786 src/applications/maniphest/controller/ManiphestTaskDetailController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/maniphest/controller/ManiphestTaskDetailController.php
Show First 20 Lines • Show All 588 Lines • ▼ Show 20 Lines | if ($revision_phids) { | ||||
$revisions = mpull($revisions, null, 'getPHID'); | $revisions = mpull($revisions, null, 'getPHID'); | ||||
} else { | } else { | ||||
$revisions = array(); | $revisions = array(); | ||||
} | } | ||||
$handle_phids = array(); | $handle_phids = array(); | ||||
$any_linked = false; | $any_linked = false; | ||||
$tail = array(); | $idx = 0; | ||||
$objects = array(); | |||||
foreach ($commit_phids as $commit_phid) { | foreach ($commit_phids as $commit_phid) { | ||||
$handle_phids[] = $commit_phid; | $handle_phids[] = $commit_phid; | ||||
$link_phids = $link_query->getDestinationPHIDs(array($commit_phid)); | $link_phids = $link_query->getDestinationPHIDs(array($commit_phid)); | ||||
foreach ($link_phids as $link_phid) { | foreach ($link_phids as $link_phid) { | ||||
$handle_phids[] = $link_phid; | $handle_phids[] = $link_phid; | ||||
unset($revision_phids[$link_phid]); | unset($revision_phids[$link_phid]); | ||||
$any_linked = true; | $any_linked = true; | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | foreach ($commit_phids as $commit_phid) { | ||||
$object_link = array( | $object_link = array( | ||||
$commit_monogram, | $commit_monogram, | ||||
' ', | ' ', | ||||
$commit_link, | $commit_link, | ||||
); | ); | ||||
} | } | ||||
$tail[] = array( | $objects[] = array( | ||||
'objectPHID' => $commit_phid, | 'objectPHID' => $commit_phid, | ||||
'objectLink' => $object_link, | 'objectLink' => $object_link, | ||||
'repositoryPHID' => $repository_phid, | 'repositoryPHID' => $repository_phid, | ||||
'revisionPHIDs' => $link_phids, | 'revisionPHIDs' => $link_phids, | ||||
'status' => $status_view, | 'status' => $status_view, | ||||
'order' => id(new PhutilSortVector()) | |||||
->addInt($repository_phid ? 1 : 0) | |||||
->addString((string)$repository_phid) | |||||
->addInt(1) | |||||
->addInt($idx++), | |||||
); | ); | ||||
} | } | ||||
$head = array(); | |||||
foreach ($revision_phids as $revision_phid) { | foreach ($revision_phids as $revision_phid) { | ||||
$handle_phids[] = $revision_phid; | $handle_phids[] = $revision_phid; | ||||
$revision = idx($revisions, $revision_phid); | $revision = idx($revisions, $revision_phid); | ||||
if ($revision) { | if ($revision) { | ||||
$repository_phid = $revision->getRepositoryPHID(); | $repository_phid = $revision->getRepositoryPHID(); | ||||
$handle_phids[] = $repository_phid; | $handle_phids[] = $repository_phid; | ||||
} else { | } else { | ||||
Show All 37 Lines | foreach ($revision_phids as $revision_phid) { | ||||
$object_link = array( | $object_link = array( | ||||
$revision_monogram, | $revision_monogram, | ||||
' ', | ' ', | ||||
$revision_link, | $revision_link, | ||||
); | ); | ||||
} | } | ||||
$head[] = array( | $objects[] = array( | ||||
'objectPHID' => $revision_phid, | 'objectPHID' => $revision_phid, | ||||
'objectLink' => $object_link, | 'objectLink' => $object_link, | ||||
'repositoryPHID' => $repository_phid, | 'repositoryPHID' => $repository_phid, | ||||
'revisionPHIDs' => array(), | 'revisionPHIDs' => array(), | ||||
'status' => $status_view, | 'status' => $status_view, | ||||
'order' => id(new PhutilSortVector()) | |||||
->addInt($repository_phid ? 1 : 0) | |||||
->addString((string)$repository_phid) | |||||
->addInt(0) | |||||
->addInt($idx++), | |||||
); | ); | ||||
} | } | ||||
$objects = array_merge($head, $tail); | |||||
$handles = $viewer->loadHandles($handle_phids); | $handles = $viewer->loadHandles($handle_phids); | ||||
$order = ipull($objects, 'order'); | |||||
$order = msortv($order, 'getSelf'); | |||||
$objects = array_select_keys($objects, array_keys($order)); | |||||
$last_repository = false; | |||||
$rows = array(); | $rows = array(); | ||||
$rowd = array(); | |||||
foreach ($objects as $object) { | foreach ($objects as $object) { | ||||
$repository_phid = $object['repositoryPHID']; | |||||
if ($repository_phid !== $last_repository) { | |||||
$repository_link = null; | |||||
if ($repository_phid) { | |||||
$repository_link = $handles[$repository_phid]->renderLink(); | |||||
$rows[] = array( | |||||
$repository_link, | |||||
); | |||||
$rowd[] = true; | |||||
} | |||||
$last_repository = $repository_phid; | |||||
} | |||||
$object_phid = $object['objectPHID']; | $object_phid = $object['objectPHID']; | ||||
$handle = $handles[$object_phid]; | $handle = $handles[$object_phid]; | ||||
$object_link = $object['objectLink']; | $object_link = $object['objectLink']; | ||||
if ($object_link === null) { | if ($object_link === null) { | ||||
$object_link = $handle->renderLink(); | $object_link = $handle->renderLink(); | ||||
} | } | ||||
$object_icon = id(new PHUIIconView()) | $object_icon = id(new PHUIIconView()) | ||||
->setIcon($handle->getIcon()); | ->setIcon($handle->getIcon()); | ||||
$repository_link = null; | |||||
$repository_phid = $object['repositoryPHID']; | |||||
if ($repository_phid) { | |||||
$repository_link = $handles[$repository_phid]->renderLink(); | |||||
} | |||||
$status_view = $object['status']; | $status_view = $object['status']; | ||||
$revision_tags = array(); | $revision_tags = array(); | ||||
foreach ($object['revisionPHIDs'] as $link_phid) { | foreach ($object['revisionPHIDs'] as $link_phid) { | ||||
$revision_handle = $handles[$link_phid]; | $revision_handle = $handles[$link_phid]; | ||||
$revision_name = $revision_handle->getName(); | $revision_name = $revision_handle->getName(); | ||||
$revision_tags[] = $revision_handle | $revision_tags[] = $revision_handle | ||||
->renderHovercardLink($revision_name); | ->renderHovercardLink($revision_name); | ||||
} | } | ||||
$revision_tags = phutil_implode_html( | $revision_tags = phutil_implode_html( | ||||
phutil_tag('br'), | phutil_tag('br'), | ||||
$revision_tags); | $revision_tags); | ||||
$rowd[] = false; | |||||
$rows[] = array( | $rows[] = array( | ||||
$object_icon, | $object_icon, | ||||
$status_view, | $status_view, | ||||
$repository_link, | |||||
$revision_tags, | $revision_tags, | ||||
$object_link, | $object_link, | ||||
); | ); | ||||
} | } | ||||
$changes_table = id(new AphrontTableView($rows)) | $changes_table = id(new AphrontTableView($rows)) | ||||
->setNoDataString(pht('This task has no related commits or revisions.')) | ->setNoDataString(pht('This task has no related commits or revisions.')) | ||||
->setRowDividers($rowd) | |||||
->setHeaders( | ->setHeaders( | ||||
array( | array( | ||||
null, | null, | ||||
null, | null, | ||||
pht('Repository'), | |||||
null, | null, | ||||
pht('Revision/Commit'), | pht('Revision/Commit'), | ||||
)) | )) | ||||
->setColumnClasses( | ->setColumnClasses( | ||||
array( | array( | ||||
'center', | 'center', | ||||
null, | null, | ||||
null, | null, | ||||
null, | |||||
'wide pri object-link', | 'wide pri object-link', | ||||
)) | )) | ||||
->setColumnVisibility( | ->setColumnVisibility( | ||||
array( | array( | ||||
true, | true, | ||||
true, | true, | ||||
true, | |||||
$any_linked, | $any_linked, | ||||
true, | true, | ||||
)) | )) | ||||
->setDeviceVisibility( | ->setDeviceVisibility( | ||||
array( | array( | ||||
false, | false, | ||||
true, | true, | ||||
false, | false, | ||||
false, | |||||
true, | true, | ||||
)); | )); | ||||
$changes_header = id(new PHUIHeaderView()) | $changes_header = id(new PHUIHeaderView()) | ||||
->setHeader(pht('Revisions and Commits')); | ->setHeader(pht('Revisions and Commits')); | ||||
$changes_view = id(new PHUIObjectBoxView()) | $changes_view = id(new PHUIObjectBoxView()) | ||||
->setHeader($changes_header) | ->setHeader($changes_header) | ||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||
->setTable($changes_table); | ->setTable($changes_table); | ||||
return $changes_view; | return $changes_view; | ||||
} | } | ||||
} | } |