private function buildRevisionPanel() { $user = $this->getRequest()->getUser(); $user_phid = $user->getPHID(); $revision_query = new DifferentialRevisionQuery(); $revision_query->withStatus(DifferentialRevisionQuery::STATUS_OPEN); $revision_query->withResponsibleUsers(array($user_phid)); $revision_query->needRelationships(true); // NOTE: We need to unlimit this query to hit the responsible user // fast-path. $revision_query->setLimit(null); $revisions = $revision_query->execute(); list($active, $waiting) = DifferentialRevisionQuery::splitResponsible($revisions, $user_phid); if (!$active) { return $this->renderMiniPanel('No Waiting Revisions', 'No revisions are waiting on you.'); } $panel = new AphrontPanelView(); $panel->setHeader('Revisions Waiting on You'); $panel->setCaption('Revisions waiting for you for review or commit.'); $panel->addButton(phutil_render_tag('a', array('href' => '/differential/', 'class' => 'button grey'), "View Active Revisions »")); $revision_view = id(new DifferentialRevisionListView())->setHighlightAge(true)->setRevisions($active)->setFields(DifferentialRevisionListView::getDefaultFields())->setUser($user)->loadAssets(); $phids = array_merge(array($user_phid), $revision_view->getRequiredHandlePHIDs()); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); $revision_view->setHandles($handles); $panel->appendChild($revision_view); return $panel; }
private function renderOtherRevisions(array $revisions) { assert_instances_of($revisions, 'DifferentialRevision'); $view = id(new DifferentialRevisionListView())->setRevisions($revisions)->setFields(DifferentialRevisionListView::getDefaultFields())->setUser($this->getRequest()->getUser())->loadAssets(); $phids = $view->getRequiredHandlePHIDs(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); $view->setHandles($handles); return '<div class="differential-panel">' . '<h1>Open Revisions Affecting These Files</h1>' . $view->render() . '</div>'; }
protected function buildOpenRevisions() { $drequest = $this->getDiffusionRequest(); $repository = $drequest->getRepository(); $path = $drequest->getPath(); $path_map = id(new DiffusionPathIDQuery(array($path)))->loadPathIDs(); $path_id = idx($path_map, $path); if (!$path_id) { return null; } $revisions = id(new DifferentialRevisionQuery())->withPath($repository->getID(), $path_id)->withStatus(DifferentialRevisionQuery::STATUS_OPEN)->setOrder(DifferentialRevisionQuery::ORDER_PATH_MODIFIED)->setLimit(10)->needRelationships(true)->execute(); if (!$revisions) { return null; } $view = id(new DifferentialRevisionListView())->setRevisions($revisions)->setFields(DifferentialRevisionListView::getDefaultFields())->setUser($this->getRequest()->getUser())->loadAssets(); $phids = $view->getRequiredHandlePHIDs(); $handles = $this->loadViewerHandles($phids); $view->setHandles($handles); $panel = new AphrontPanelView(); $panel->setId('pending-differential-revisions'); $panel->setHeader('Pending Differential Revisions'); $panel->appendChild($view); return $panel; }
private function buildViews($filter, $user_phid, array $revisions) { assert_instances_of($revisions, 'DifferentialRevision'); $user = $this->getRequest()->getUser(); $template = id(new DifferentialRevisionListView())->setUser($user)->setFields(DifferentialRevisionListView::getDefaultFields()); $views = array(); switch ($filter) { case 'active': list($active, $waiting) = DifferentialRevisionQuery::splitResponsible($revisions, $user_phid); $view = id(clone $template)->setHighlightAge(true)->setRevisions($active)->loadAssets(); $views[] = array('title' => 'Action Required', 'view' => $view); // Flags are sort of private, so only show the flag panel if you're // looking at your own requests. if ($user_phid == $user->getPHID()) { $flags = id(new PhabricatorFlagQuery())->withOwnerPHIDs(array($user_phid))->withTypes(array(PhabricatorPHIDConstants::PHID_TYPE_DREV))->needHandles(true)->execute(); if ($flags) { $view = id(new PhabricatorFlagListView())->setFlags($flags)->setUser($user); $views[] = array('title' => 'Flagged Revisions', 'view' => $view, 'special' => true); } } $view = id(clone $template)->setRevisions($waiting)->loadAssets(); $views[] = array('title' => 'Waiting On Others', 'view' => $view); break; case 'revisions': case 'reviews': case 'subscribed': case 'drafts': case 'all': $titles = array('revisions' => 'Revisions by Author', 'reviews' => 'Revisions by Reviewer', 'subscribed' => 'Revisions by Subscriber', 'all' => 'Revisions'); $view = id(clone $template)->setRevisions($revisions)->loadAssets(); $views[] = array('title' => idx($titles, $filter), 'view' => $view); break; default: throw new Exception("Unknown filter '{$filter}'!"); } return $views; }