[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * Render a table of Differential revisions. 5 */ 6 final class DifferentialRevisionListView extends AphrontView { 7 8 private $revisions; 9 private $handles; 10 private $highlightAge; 11 private $header; 12 private $noDataString; 13 14 public function setNoDataString($no_data_string) { 15 $this->noDataString = $no_data_string; 16 return $this; 17 } 18 19 public function setHeader($header) { 20 $this->header = $header; 21 return $this; 22 } 23 24 public function setRevisions(array $revisions) { 25 assert_instances_of($revisions, 'DifferentialRevision'); 26 $this->revisions = $revisions; 27 return $this; 28 } 29 30 public function setHighlightAge($bool) { 31 $this->highlightAge = $bool; 32 return $this; 33 } 34 35 public function getRequiredHandlePHIDs() { 36 $phids = array(); 37 foreach ($this->revisions as $revision) { 38 $phids[] = array($revision->getAuthorPHID()); 39 40 // TODO: Switch to getReviewerStatus(), but not all callers pass us 41 // revisions with this data loaded. 42 $phids[] = $revision->getReviewers(); 43 } 44 return array_mergev($phids); 45 } 46 47 public function setHandles(array $handles) { 48 assert_instances_of($handles, 'PhabricatorObjectHandle'); 49 $this->handles = $handles; 50 return $this; 51 } 52 53 public function render() { 54 55 $user = $this->user; 56 if (!$user) { 57 throw new Exception('Call setUser() before render()!'); 58 } 59 60 $fresh = PhabricatorEnv::getEnvConfig('differential.days-fresh'); 61 if ($fresh) { 62 $fresh = PhabricatorCalendarHoliday::getNthBusinessDay( 63 time(), 64 -$fresh); 65 } 66 67 $stale = PhabricatorEnv::getEnvConfig('differential.days-stale'); 68 if ($stale) { 69 $stale = PhabricatorCalendarHoliday::getNthBusinessDay( 70 time(), 71 -$stale); 72 } 73 74 $this->initBehavior('phabricator-tooltips', array()); 75 $this->requireResource('aphront-tooltip-css'); 76 77 $list = new PHUIObjectItemListView(); 78 79 foreach ($this->revisions as $revision) { 80 $item = id(new PHUIObjectItemView()) 81 ->setUser($user); 82 83 $icons = array(); 84 85 $phid = $revision->getPHID(); 86 $flag = $revision->getFlag($user); 87 if ($flag) { 88 $flag_class = PhabricatorFlagColor::getCSSClass($flag->getColor()); 89 $icons['flag'] = phutil_tag( 90 'div', 91 array( 92 'class' => 'phabricator-flag-icon '.$flag_class, 93 ), 94 ''); 95 } 96 97 if ($revision->getDrafts($user)) { 98 $icons['draft'] = true; 99 } 100 101 $modified = $revision->getDateModified(); 102 103 $status = $revision->getStatus(); 104 $show_age = ($fresh || $stale) && 105 $this->highlightAge && 106 !$revision->isClosed(); 107 108 if ($stale && $modified < $stale) { 109 $object_age = PHUIObjectItemView::AGE_OLD; 110 } else if ($fresh && $modified < $fresh) { 111 $object_age = PHUIObjectItemView::AGE_STALE; 112 } else { 113 $object_age = PHUIObjectItemView::AGE_FRESH; 114 } 115 116 $status_name = 117 ArcanistDifferentialRevisionStatus::getNameForRevisionStatus($status); 118 119 if (isset($icons['flag'])) { 120 $item->addHeadIcon($icons['flag']); 121 } 122 123 $item->setObjectName('D'.$revision->getID()); 124 $item->setHeader(phutil_tag('a', 125 array('href' => '/D'.$revision->getID()), 126 $revision->getTitle())); 127 128 if (isset($icons['draft'])) { 129 $draft = id(new PHUIIconView()) 130 ->setIconFont('fa-comment-o lightgreytext') 131 ->addSigil('has-tooltip') 132 ->setMetadata( 133 array( 134 'tip' => pht('Unsubmitted Comments'), 135 )); 136 $item->addAttribute($draft); 137 } 138 139 /* Most things 'Need Review', so accept it's the default */ 140 if ($status != ArcanistDifferentialRevisionStatus::NEEDS_REVIEW) { 141 $item->addAttribute($status_name); 142 } 143 144 // Author 145 $author_handle = $this->handles[$revision->getAuthorPHID()]; 146 $item->addByline(pht('Author: %s', $author_handle->renderLink())); 147 148 $reviewers = array(); 149 // TODO: As above, this should be based on `getReviewerStatus()`. 150 foreach ($revision->getReviewers() as $reviewer) { 151 $reviewers[] = $this->handles[$reviewer]->renderLink(); 152 } 153 if (!$reviewers) { 154 $reviewers = phutil_tag('em', array(), pht('None')); 155 } else { 156 $reviewers = phutil_implode_html(', ', $reviewers); 157 } 158 159 $item->addAttribute(pht('Reviewers: %s', $reviewers)); 160 $item->setEpoch($revision->getDateModified(), $object_age); 161 162 switch ($status) { 163 case ArcanistDifferentialRevisionStatus::NEEDS_REVIEW: 164 break; 165 case ArcanistDifferentialRevisionStatus::NEEDS_REVISION: 166 case ArcanistDifferentialRevisionStatus::CHANGES_PLANNED: 167 $item->setBarColor('red'); 168 break; 169 case ArcanistDifferentialRevisionStatus::ACCEPTED: 170 $item->setBarColor('green'); 171 break; 172 case ArcanistDifferentialRevisionStatus::CLOSED: 173 $item->setDisabled(true); 174 break; 175 case ArcanistDifferentialRevisionStatus::ABANDONED: 176 $item->setBarColor('black'); 177 break; 178 } 179 180 $list->addItem($item); 181 } 182 183 $list->setHeader($this->header); 184 $list->setNoDataString($this->noDataString); 185 186 return $list; 187 } 188 189 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |