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>';
 }
Пример #3
0
 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;
 }