mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-29 12:38:12 +01:00
When a revision has more than 7 reviewers, render only the first 7 in the list view
Summary: See PHI489. Ref T13110. At least for now, this just shows "..." at the end since you can click the revision to see the whole list anyway. Also remove the older-style external Handle passing in favor of lazy construction via HandlePool. Test Plan: Viewed revisions, fiddled with the 7 limit, got sensible-seeming "..." behavior. Maniphest Tasks: T13110 Differential Revision: https://secure.phabricator.com/D19293
This commit is contained in:
parent
592d72e006
commit
e40aec0210
5 changed files with 58 additions and 70 deletions
|
@ -869,17 +869,11 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
||||||
$header = id(new PHUIHeaderView())
|
$header = id(new PHUIHeaderView())
|
||||||
->setHeader(pht('Recent Similar Revisions'));
|
->setHeader(pht('Recent Similar Revisions'));
|
||||||
|
|
||||||
$view = id(new DifferentialRevisionListView())
|
return id(new DifferentialRevisionListView())
|
||||||
|
->setViewer($viewer)
|
||||||
->setRevisions($revisions)
|
->setRevisions($revisions)
|
||||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||||
->setNoBox(true)
|
->setNoBox(true);
|
||||||
->setUser($viewer);
|
|
||||||
|
|
||||||
$phids = $view->getRequiredHandlePHIDs();
|
|
||||||
$handles = $this->loadViewerHandles($phids);
|
|
||||||
$view->setHandles($handles);
|
|
||||||
|
|
||||||
return $view;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,7 @@ final class DifferentialRevisionSearchEngine
|
||||||
|
|
||||||
$viewer = $this->requireViewer();
|
$viewer = $this->requireViewer();
|
||||||
$template = id(new DifferentialRevisionListView())
|
$template = id(new DifferentialRevisionListView())
|
||||||
->setUser($viewer)
|
->setViewer($viewer)
|
||||||
->setNoBox($this->isPanelContext());
|
->setNoBox($this->isPanelContext());
|
||||||
|
|
||||||
$bucket = $this->getResultBucket($query);
|
$bucket = $this->getResultBucket($query);
|
||||||
|
@ -176,28 +176,16 @@ final class DifferentialRevisionSearchEngine
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$views[] = id(clone $template)
|
$views[] = id(clone $template)
|
||||||
->setRevisions($revisions)
|
->setRevisions($revisions);
|
||||||
->setHandles(array());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$views) {
|
if (!$views) {
|
||||||
$views[] = id(new DifferentialRevisionListView())
|
$views[] = id(new DifferentialRevisionListView())
|
||||||
->setUser($viewer)
|
->setViewer($viewer)
|
||||||
->setNoDataString(pht('No revisions found.'));
|
->setNoDataString(pht('No revisions found.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$phids = array_mergev(mpull($views, 'getRequiredHandlePHIDs'));
|
|
||||||
if ($phids) {
|
|
||||||
$handles = id(new PhabricatorHandleQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->withPHIDs($phids)
|
|
||||||
->execute();
|
|
||||||
} else {
|
|
||||||
$handles = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($views as $view) {
|
foreach ($views as $view) {
|
||||||
$view->setHandles($handles);
|
|
||||||
$view->setUnlandedDependencies($unlanded);
|
$view->setUnlandedDependencies($unlanded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
final class DifferentialRevisionListView extends AphrontView {
|
final class DifferentialRevisionListView extends AphrontView {
|
||||||
|
|
||||||
private $revisions = array();
|
private $revisions = array();
|
||||||
private $handles;
|
|
||||||
private $header;
|
private $header;
|
||||||
private $noDataString;
|
private $noDataString;
|
||||||
private $noBox;
|
private $noBox;
|
||||||
|
@ -48,32 +47,43 @@ final class DifferentialRevisionListView extends AphrontView {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRequiredHandlePHIDs() {
|
|
||||||
$phids = array();
|
|
||||||
foreach ($this->revisions as $revision) {
|
|
||||||
$phids[] = array($revision->getAuthorPHID());
|
|
||||||
$phids[] = $revision->getReviewerPHIDs();
|
|
||||||
}
|
|
||||||
return array_mergev($phids);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setHandles(array $handles) {
|
|
||||||
assert_instances_of($handles, 'PhabricatorObjectHandle');
|
|
||||||
$this->handles = $handles;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function render() {
|
public function render() {
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
$this->initBehavior('phabricator-tooltips', array());
|
$this->initBehavior('phabricator-tooltips', array());
|
||||||
$this->requireResource('aphront-tooltip-css');
|
$this->requireResource('aphront-tooltip-css');
|
||||||
|
|
||||||
$list = new PHUIObjectItemListView();
|
$reviewer_limit = 7;
|
||||||
|
|
||||||
foreach ($this->revisions as $revision) {
|
$reviewer_phids = array();
|
||||||
|
$reviewer_more = array();
|
||||||
|
$handle_phids = array();
|
||||||
|
foreach ($this->revisions as $key => $revision) {
|
||||||
|
$reviewers = $revision->getReviewers();
|
||||||
|
if (count($reviewers) > $reviewer_limit) {
|
||||||
|
$reviewers = array_slice($reviewers, 0, $reviewer_limit);
|
||||||
|
$reviewer_more[$key] = true;
|
||||||
|
} else {
|
||||||
|
$reviewer_more[$key] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$phids = mpull($reviewers, 'getReviewerPHID');
|
||||||
|
|
||||||
|
$reviewer_phids[$key] = $phids;
|
||||||
|
foreach ($phids as $phid) {
|
||||||
|
$handle_phids[$phid] = $phid;
|
||||||
|
}
|
||||||
|
|
||||||
|
$author_phid = $revision->getAuthorPHID();
|
||||||
|
$handle_phids[$author_phid] = $author_phid;
|
||||||
|
}
|
||||||
|
|
||||||
|
$handles = $viewer->loadHandles($handle_phids);
|
||||||
|
|
||||||
|
$list = new PHUIObjectItemListView();
|
||||||
|
foreach ($this->revisions as $key => $revision) {
|
||||||
$item = id(new PHUIObjectItemView())
|
$item = id(new PHUIObjectItemView())
|
||||||
->setUser($viewer);
|
->setViewer($viewer);
|
||||||
|
|
||||||
$icons = array();
|
$icons = array();
|
||||||
|
|
||||||
|
@ -89,21 +99,17 @@ final class DifferentialRevisionListView extends AphrontView {
|
||||||
'');
|
'');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($revision->getHasDraft($viewer)) {
|
|
||||||
$icons['draft'] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$modified = $revision->getDateModified();
|
$modified = $revision->getDateModified();
|
||||||
|
|
||||||
if (isset($icons['flag'])) {
|
if (isset($icons['flag'])) {
|
||||||
$item->addHeadIcon($icons['flag']);
|
$item->addHeadIcon($icons['flag']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$item->setObjectName('D'.$revision->getID());
|
$item->setObjectName($revision->getMonogram());
|
||||||
$item->setHeader($revision->getTitle());
|
$item->setHeader($revision->getTitle());
|
||||||
$item->setHref('/D'.$revision->getID());
|
$item->setHref($revision->getURI());
|
||||||
|
|
||||||
if (isset($icons['draft'])) {
|
if ($revision->getHasDraft($viewer)) {
|
||||||
$draft = id(new PHUIIconView())
|
$draft = id(new PHUIIconView())
|
||||||
->setIcon('fa-comment yellow')
|
->setIcon('fa-comment yellow')
|
||||||
->addSigil('has-tooltip')
|
->addSigil('has-tooltip')
|
||||||
|
@ -114,8 +120,7 @@ final class DifferentialRevisionListView extends AphrontView {
|
||||||
$item->addAttribute($draft);
|
$item->addAttribute($draft);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Author
|
$author_handle = $handles[$revision->getAuthorPHID()];
|
||||||
$author_handle = $this->handles[$revision->getAuthorPHID()];
|
|
||||||
$item->addByline(pht('Author: %s', $author_handle->renderLink()));
|
$item->addByline(pht('Author: %s', $author_handle->renderLink()));
|
||||||
|
|
||||||
$unlanded = idx($this->unlandedDependencies, $phid);
|
$unlanded = idx($this->unlandedDependencies, $phid);
|
||||||
|
@ -128,17 +133,26 @@ final class DifferentialRevisionListView extends AphrontView {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
$reviewers = array();
|
$more = null;
|
||||||
foreach ($revision->getReviewerPHIDs() as $reviewer) {
|
if ($reviewer_more[$key]) {
|
||||||
$reviewers[] = $this->handles[$reviewer]->renderLink();
|
$more = pht(', ...');
|
||||||
}
|
|
||||||
if (!$reviewers) {
|
|
||||||
$reviewers = phutil_tag('em', array(), pht('None'));
|
|
||||||
} else {
|
} else {
|
||||||
$reviewers = phutil_implode_html(', ', $reviewers);
|
$more = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($reviewer_phids[$key]) {
|
||||||
|
$item->addAttribute(
|
||||||
|
array(
|
||||||
|
pht('Reviewers:'),
|
||||||
|
' ',
|
||||||
|
$viewer->renderHandleList($reviewer_phids[$key])
|
||||||
|
->setAsInline(true),
|
||||||
|
$more,
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
$item->addAttribute(phutil_tag('em', array(), pht('No Reviewers')));
|
||||||
}
|
}
|
||||||
|
|
||||||
$item->addAttribute(pht('Reviewers: %s', $reviewers));
|
|
||||||
$item->setEpoch($revision->getDateModified());
|
$item->setEpoch($revision->getDateModified());
|
||||||
|
|
||||||
if ($revision->isClosed()) {
|
if ($revision->isClosed()) {
|
||||||
|
|
|
@ -1754,14 +1754,10 @@ final class DiffusionBrowseController extends DiffusionController {
|
||||||
->setHeader(pht('Recently Open Revisions'));
|
->setHeader(pht('Recently Open Revisions'));
|
||||||
|
|
||||||
$list = id(new DifferentialRevisionListView())
|
$list = id(new DifferentialRevisionListView())
|
||||||
|
->setViewer($viewer)
|
||||||
->setRevisions($revisions)
|
->setRevisions($revisions)
|
||||||
->setUser($viewer)
|
|
||||||
->setNoBox(true);
|
->setNoBox(true);
|
||||||
|
|
||||||
$phids = $list->getRequiredHandlePHIDs();
|
|
||||||
$handles = $this->loadViewerHandles($phids);
|
|
||||||
$list->setHandles($handles);
|
|
||||||
|
|
||||||
$view = id(new PHUIObjectBoxView())
|
$view = id(new PHUIObjectBoxView())
|
||||||
->setHeader($header)
|
->setHeader($header)
|
||||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||||
|
|
|
@ -63,15 +63,11 @@ final class PhabricatorPeopleProfileRevisionsController
|
||||||
->execute();
|
->execute();
|
||||||
|
|
||||||
$list = id(new DifferentialRevisionListView())
|
$list = id(new DifferentialRevisionListView())
|
||||||
->setUser($viewer)
|
->setViewer($viewer)
|
||||||
->setNoBox(true)
|
->setNoBox(true)
|
||||||
->setRevisions($revisions)
|
->setRevisions($revisions)
|
||||||
->setNoDataString(pht('No recent revisions.'));
|
->setNoDataString(pht('No recent revisions.'));
|
||||||
|
|
||||||
$object_phids = $list->getRequiredHandlePHIDs();
|
|
||||||
$handles = $this->loadViewerHandles($object_phids);
|
|
||||||
$list->setHandles($handles);
|
|
||||||
|
|
||||||
$view = id(new PHUIObjectBoxView())
|
$view = id(new PHUIObjectBoxView())
|
||||||
->setHeaderText(pht('Recent Revisions'))
|
->setHeaderText(pht('Recent Revisions'))
|
||||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||||
|
|
Loading…
Add table
Reference in a new issue