[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorPeopleProfileController 4 extends PhabricatorPeopleController { 5 6 private $username; 7 8 public function shouldRequireAdmin() { 9 return false; 10 } 11 12 public function willProcessRequest(array $data) { 13 $this->username = idx($data, 'username'); 14 } 15 16 public function processRequest() { 17 $viewer = $this->getRequest()->getUser(); 18 19 $user = id(new PhabricatorPeopleQuery()) 20 ->setViewer($viewer) 21 ->withUsernames(array($this->username)) 22 ->needProfileImage(true) 23 ->executeOne(); 24 if (!$user) { 25 return new Aphront404Response(); 26 } 27 28 require_celerity_resource('phabricator-profile-css'); 29 30 $profile = $user->loadUserProfile(); 31 $username = phutil_escape_uri($user->getUserName()); 32 33 $picture = $user->loadProfileImageURI(); 34 35 $header = id(new PHUIHeaderView()) 36 ->setHeader($user->getFullName()) 37 ->setSubheader($profile->getTitle()) 38 ->setImage($picture); 39 40 $actions = id(new PhabricatorActionListView()) 41 ->setObject($user) 42 ->setObjectURI($this->getRequest()->getRequestURI()) 43 ->setUser($viewer); 44 45 $can_edit = PhabricatorPolicyFilter::hasCapability( 46 $viewer, 47 $user, 48 PhabricatorPolicyCapability::CAN_EDIT); 49 50 $actions->addAction( 51 id(new PhabricatorActionView()) 52 ->setIcon('fa-pencil') 53 ->setName(pht('Edit Profile')) 54 ->setHref($this->getApplicationURI('editprofile/'.$user->getID().'/')) 55 ->setDisabled(!$can_edit) 56 ->setWorkflow(!$can_edit)); 57 58 $actions->addAction( 59 id(new PhabricatorActionView()) 60 ->setIcon('fa-picture-o') 61 ->setName(pht('Edit Profile Picture')) 62 ->setHref($this->getApplicationURI('picture/'.$user->getID().'/')) 63 ->setDisabled(!$can_edit) 64 ->setWorkflow(!$can_edit)); 65 66 if ($viewer->getIsAdmin()) { 67 $actions->addAction( 68 id(new PhabricatorActionView()) 69 ->setIcon('fa-wrench') 70 ->setName(pht('Edit Settings')) 71 ->setDisabled(!$can_edit) 72 ->setWorkflow(!$can_edit) 73 ->setHref('/settings/'.$user->getID().'/')); 74 75 if ($user->getIsAdmin()) { 76 $empower_icon = 'fa-arrow-circle-o-down'; 77 $empower_name = pht('Remove Administrator'); 78 } else { 79 $empower_icon = 'fa-arrow-circle-o-up'; 80 $empower_name = pht('Make Administrator'); 81 } 82 83 $actions->addAction( 84 id(new PhabricatorActionView()) 85 ->setIcon($empower_icon) 86 ->setName($empower_name) 87 ->setDisabled(($user->getPHID() == $viewer->getPHID())) 88 ->setWorkflow(true) 89 ->setHref($this->getApplicationURI('empower/'.$user->getID().'/'))); 90 91 $actions->addAction( 92 id(new PhabricatorActionView()) 93 ->setIcon('fa-tag') 94 ->setName(pht('Change Username')) 95 ->setWorkflow(true) 96 ->setHref($this->getApplicationURI('rename/'.$user->getID().'/'))); 97 98 if ($user->getIsDisabled()) { 99 $disable_icon = 'fa-check-circle-o'; 100 $disable_name = pht('Enable User'); 101 } else { 102 $disable_icon = 'fa-ban'; 103 $disable_name = pht('Disable User'); 104 } 105 106 $actions->addAction( 107 id(new PhabricatorActionView()) 108 ->setIcon($disable_icon) 109 ->setName($disable_name) 110 ->setDisabled(($user->getPHID() == $viewer->getPHID())) 111 ->setWorkflow(true) 112 ->setHref($this->getApplicationURI('disable/'.$user->getID().'/'))); 113 114 $actions->addAction( 115 id(new PhabricatorActionView()) 116 ->setIcon('fa-times') 117 ->setName(pht('Delete User')) 118 ->setDisabled(($user->getPHID() == $viewer->getPHID())) 119 ->setWorkflow(true) 120 ->setHref($this->getApplicationURI('delete/'.$user->getID().'/'))); 121 122 $actions->addAction( 123 id(new PhabricatorActionView()) 124 ->setIcon('fa-envelope') 125 ->setName(pht('Send Welcome Email')) 126 ->setWorkflow(true) 127 ->setHref($this->getApplicationURI('welcome/'.$user->getID().'/'))); 128 } 129 130 $properties = $this->buildPropertyView($user, $actions); 131 132 $crumbs = $this->buildApplicationCrumbs(); 133 $crumbs->addTextCrumb($user->getUsername()); 134 $crumbs->setActionList($actions); 135 $feed = $this->renderUserFeed($user); 136 $cal_class = 'PhabricatorCalendarApplication'; 137 $classes = array(); 138 $classes[] = 'profile-activity-view'; 139 if (PhabricatorApplication::isClassInstalledForViewer($cal_class, $user)) { 140 $calendar = $this->renderUserCalendar($user); 141 $classes[] = 'profile-has-calendar'; 142 $classes[] = 'grouped'; 143 } else { 144 $calendar = null; 145 } 146 $activity = phutil_tag( 147 'div', 148 array( 149 'class' => implode($classes, ' '), 150 ), 151 array( 152 $calendar, 153 $feed, 154 )); 155 156 $object_box = id(new PHUIObjectBoxView()) 157 ->setHeader($header) 158 ->addPropertyList($properties); 159 160 return $this->buildApplicationPage( 161 array( 162 $crumbs, 163 $object_box, 164 $activity, 165 ), 166 array( 167 'title' => $user->getUsername(), 168 )); 169 } 170 171 private function buildPropertyView( 172 PhabricatorUser $user, 173 PhabricatorActionListView $actions) { 174 175 $viewer = $this->getRequest()->getUser(); 176 $view = id(new PHUIPropertyListView()) 177 ->setUser($viewer) 178 ->setObject($user) 179 ->setActionList($actions); 180 181 $field_list = PhabricatorCustomField::getObjectFields( 182 $user, 183 PhabricatorCustomField::ROLE_VIEW); 184 $field_list->appendFieldsToPropertyList($user, $viewer, $view); 185 186 return $view; 187 } 188 189 private function renderUserFeed(PhabricatorUser $user) { 190 $viewer = $this->getRequest()->getUser(); 191 192 $query = new PhabricatorFeedQuery(); 193 $query->setFilterPHIDs( 194 array( 195 $user->getPHID(), 196 )); 197 $query->setLimit(100); 198 $query->setViewer($viewer); 199 $stories = $query->execute(); 200 201 $builder = new PhabricatorFeedBuilder($stories); 202 $builder->setUser($viewer); 203 $builder->setShowHovercards(true); 204 $view = $builder->buildView(); 205 206 return phutil_tag_div( 207 'profile-feed', 208 $view->render()); 209 } 210 211 private function renderUserCalendar(PhabricatorUser $user) { 212 $viewer = $this->getRequest()->getUser(); 213 $epochs = CalendarTimeUtil::getCalendarEventEpochs( 214 $viewer, 215 'today', 216 7); 217 $start_epoch = $epochs['start_epoch']; 218 $end_epoch = $epochs['end_epoch']; 219 $statuses = id(new PhabricatorCalendarEventQuery()) 220 ->setViewer($viewer) 221 ->withInvitedPHIDs(array($user->getPHID())) 222 ->withDateRange($start_epoch, $end_epoch) 223 ->execute(); 224 225 $timestamps = CalendarTimeUtil::getCalendarWeekTimestamps( 226 $viewer); 227 $today = $timestamps['today']; 228 $epoch_stamps = $timestamps['epoch_stamps']; 229 $events = array(); 230 231 foreach ($epoch_stamps as $day) { 232 $epoch_start = $day->format('U'); 233 $next_day = clone $day; 234 $next_day->modify('+1 day'); 235 $epoch_end = $next_day->format('U'); 236 237 foreach ($statuses as $status) { 238 if ($status->getDateTo() < $epoch_start) { 239 continue; 240 } 241 if ($status->getDateFrom() >= $epoch_end) { 242 continue; 243 } 244 245 $event = new AphrontCalendarEventView(); 246 $event->setEpochRange($status->getDateFrom(), $status->getDateTo()); 247 248 $status_text = $status->getHumanStatus(); 249 $event->setUserPHID($status->getUserPHID()); 250 $event->setName($status_text); 251 $event->setDescription($status->getDescription()); 252 $event->setEventID($status->getID()); 253 $events[$epoch_start][] = $event; 254 } 255 } 256 257 $week = array(); 258 foreach ($epoch_stamps as $day) { 259 $epoch = $day->format('U'); 260 $headertext = phabricator_format_local_time($epoch, $user, 'l, M d'); 261 262 $list = new PHUICalendarListView(); 263 $list->setUser($viewer); 264 $list->showBlankState(true); 265 if (isset($events[$epoch])) { 266 foreach ($events[$epoch] as $event) { 267 $list->addEvent($event); 268 } 269 } 270 271 $header = phutil_tag( 272 'a', 273 array( 274 'href' => $this->getRequest()->getRequestURI().'calendar/', 275 ), 276 $headertext); 277 278 $calendar = new PHUICalendarWidgetView(); 279 $calendar->setHeader($header); 280 $calendar->setCalendarList($list); 281 $week[] = $calendar; 282 } 283 284 return phutil_tag_div( 285 'profile-calendar', 286 $week); 287 } 288 }
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 |