diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php --- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php @@ -54,23 +54,21 @@ $feed = $this->buildPeopleFeed($user, $viewer); $feed = phutil_tag_div('project-view-feed', $feed); + $projects = $this->buildProjectsView($user); $badges = $this->buildBadgesView($user); - if ($badges) { - $columns = id(new PHUITwoColumnView()) - ->addClass('project-view-badges') - ->setMainColumn( - array( - $properties, - $feed, - )) - ->setSideColumn( - array( - $badges, - )); - } else { - $columns = array($properties, $feed); - } + $columns = id(new PHUITwoColumnView()) + ->addClass('project-view-badges') + ->setMainColumn( + array( + $properties, + $feed, + )) + ->setSideColumn( + array( + $projects, + $badges, + )); $nav = $this->getProfileMenu(); $nav->selectFilter(PhabricatorPeopleProfilePanelEngine::PANEL_PROFILE); @@ -124,12 +122,65 @@ return $view; } + private function buildProjectsView( + PhabricatorUser $user) { + + $viewer = $this->getViewer(); + $projects = id(new PhabricatorProjectQuery()) + ->setViewer($viewer) + ->withMemberPHIDs(array($user->getPHID())) + ->needImages(true) + ->withStatus(PhabricatorProjectQuery::STATUS_OPEN) + ->execute(); + + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Projects')); + + if (!empty($projects)) { + $limit = 5; + $render_phids = array_slice($projects, 0, $limit); + $list = id(new PhabricatorProjectListView()) + ->setUser($viewer) + ->setProjects($render_phids); + + if (count($projects) > $limit) { + $header_text = pht( + 'Projects (%s)', + phutil_count($projects)); + + $header = id(new PHUIHeaderView()) + ->setHeader($header_text) + ->addActionLink( + id(new PHUIButtonView()) + ->setTag('a') + ->setIcon('fa-list-ul') + ->setText(pht('View All')) + ->setHref('/project/?member='.$user->getPHID())); + + } + + } else { + $error = id(new PHUIBoxView()) + ->addClass('mlb') + ->appendChild(pht('User does not belong to any projects.')); + $list = id(new PHUIInfoView()) + ->setSeverity(PHUIInfoView::SEVERITY_NODATA) + ->appendChild($error); + } + + $box = id(new PHUIObjectBoxView()) + ->setHeader($header) + ->appendChild($list) + ->setBackground(PHUIBoxView::GREY); + + return $box; + } + private function buildBadgesView( PhabricatorUser $user) { $viewer = $this->getViewer(); $class = 'PhabricatorBadgesApplication'; - $box = null; if (PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) { $badge_phids = $user->getBadgePHIDs(); @@ -150,13 +201,21 @@ $flex->addItem($item); } - $box = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Badges')) - ->appendChild($flex) - ->setBackground(PHUIBoxView::GREY); + } else { + $error = id(new PHUIBoxView()) + ->addClass('mlb') + ->appendChild(pht('User does not have any badges.')); + $flex = id(new PHUIInfoView()) + ->setSeverity(PHUIInfoView::SEVERITY_NODATA) + ->appendChild($error); } } + $box = id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Badges')) + ->appendChild($flex) + ->setBackground(PHUIBoxView::GREY); + return $box; }