| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-09 15:46:25 -08:00
										 |  |  | final class PhabricatorPeopleProfileController | 
					
						
							|  |  |  |   extends PhabricatorPeopleController { | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   private $username; | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |   private $page; | 
					
						
							| 
									
										
										
										
											2012-08-10 12:11:24 -07:00
										 |  |  |   private $profileUser; | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-19 13:48:50 -07:00
										 |  |  |   public function shouldRequireAdmin() { | 
					
						
							|  |  |  |     // Default for people app is true
 | 
					
						
							|  |  |  |     // We desire public access here
 | 
					
						
							|  |  |  |     return false; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  |   public function willProcessRequest(array $data) { | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |     $this->username = idx($data, 'username'); | 
					
						
							|  |  |  |     $this->page = idx($data, 'page'); | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:11:24 -07:00
										 |  |  |   public function getProfileUser() { | 
					
						
							|  |  |  |     return $this->profileUser; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-05 13:46:02 -08:00
										 |  |  |   private function getMainFilters($username) { | 
					
						
							|  |  |  |     return array( | 
					
						
							|  |  |  |       array( | 
					
						
							|  |  |  |         'key' => 'feed', | 
					
						
							|  |  |  |         'name' => pht('Feed'), | 
					
						
							|  |  |  |         'href' => '/p/'.$username.'/feed/' | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |       array( | 
					
						
							|  |  |  |         'key' => 'about', | 
					
						
							|  |  |  |         'name' => pht('About'), | 
					
						
							|  |  |  |         'href' => '/p/'.$username.'/about/' | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  |   public function processRequest() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |     $viewer = $this->getRequest()->getUser(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  |     $user = id(new PhabricatorUser())->loadOneWhere( | 
					
						
							|  |  |  |       'userName = %s', | 
					
						
							|  |  |  |       $this->username); | 
					
						
							|  |  |  |     if (!$user) { | 
					
						
							|  |  |  |       return new Aphront404Response(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:11:24 -07:00
										 |  |  |     $this->profileUser = $user; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     require_celerity_resource('phabricator-profile-css'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-24 06:42:31 -07:00
										 |  |  |     $profile = $user->loadUserProfile(); | 
					
						
							| 
									
										
										
										
											2012-03-06 13:57:31 -08:00
										 |  |  |     $username = phutil_escape_uri($user->getUserName()); | 
					
						
							| 
									
										
										
										
											2011-02-19 18:28:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 08:41:43 -07:00
										 |  |  |     $menu = new PHUIListView(); | 
					
						
							| 
									
										
										
										
											2013-02-05 13:46:02 -08:00
										 |  |  |     foreach ($this->getMainFilters($username) as $filter) { | 
					
						
							|  |  |  |       $menu->newLink($filter['name'], $filter['href'], $filter['key']); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-05 13:46:02 -08:00
										 |  |  |     $menu->newLabel(pht('Activity'), 'activity'); | 
					
						
							|  |  |  |     // NOTE: applications install the various links through PhabricatorEvent
 | 
					
						
							|  |  |  |     // listeners
 | 
					
						
							| 
									
										
										
										
											2012-12-03 14:13:38 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-05 13:46:02 -08:00
										 |  |  |     $event = new PhabricatorEvent( | 
					
						
							|  |  |  |       PhabricatorEventType::TYPE_PEOPLE_DIDRENDERMENU, | 
					
						
							|  |  |  |       array( | 
					
						
							|  |  |  |         'menu' => $menu, | 
					
						
							|  |  |  |         'person' => $user, | 
					
						
							|  |  |  |       )); | 
					
						
							|  |  |  |     $event->setUser($viewer); | 
					
						
							|  |  |  |     PhutilEventEngine::dispatchEvent($event); | 
					
						
							|  |  |  |     $nav = AphrontSideNavFilterView::newFromMenu($event->getValue('menu')); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $this->page = $nav->selectFilter($this->page, 'feed'); | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |     switch ($this->page) { | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |       case 'feed': | 
					
						
							|  |  |  |         $content = $this->renderUserFeed($user); | 
					
						
							|  |  |  |         break; | 
					
						
							|  |  |  |       case 'about': | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |         $content = $this->renderBasicInformation($user, $profile); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |       default: | 
					
						
							|  |  |  |         throw new Exception("Unknown page '{$this->page}'!"); | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:44:10 -07:00
										 |  |  |     $picture = $user->loadProfileImageURI(); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $header = new PhabricatorProfileHeaderView(); | 
					
						
							|  |  |  |     $header | 
					
						
							|  |  |  |       ->setProfilePicture($picture) | 
					
						
							|  |  |  |       ->setName($user->getUserName().' ('.$user->getRealName().')') | 
					
						
							|  |  |  |       ->setDescription($profile->getTitle()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-17 15:13:33 -07:00
										 |  |  |     if ($user->getIsDisabled()) { | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |       $header->setStatus(pht('Disabled')); | 
					
						
							| 
									
										
										
										
											2012-05-17 15:13:33 -07:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2012-05-16 18:42:06 -07:00
										 |  |  |       $statuses = id(new PhabricatorUserStatus())->loadCurrentStatuses( | 
					
						
							|  |  |  |         array($user->getPHID())); | 
					
						
							|  |  |  |       if ($statuses) { | 
					
						
							| 
									
										
										
										
											2012-10-24 13:22:24 -07:00
										 |  |  |         $header->setStatus(reset($statuses)->getTerseSummary($viewer)); | 
					
						
							| 
									
										
										
										
											2012-05-17 15:13:33 -07:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-09 13:57:31 -08:00
										 |  |  |     $nav->appendChild($header); | 
					
						
							|  |  |  |     $header->appendChild($content); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if ($user->getPHID() == $viewer->getPHID()) { | 
					
						
							| 
									
										
										
										
											2013-02-05 13:46:02 -08:00
										 |  |  |       $nav->addFilter( | 
					
						
							|  |  |  |         null, | 
					
						
							|  |  |  |         pht('Edit Profile...'), | 
					
						
							| 
									
										
										
										
											2013-02-19 13:33:10 -08:00
										 |  |  |         '/settings/panel/profile/'); | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-16 16:54:05 -08:00
										 |  |  |     if ($viewer->getIsAdmin()) { | 
					
						
							|  |  |  |       $nav->addFilter( | 
					
						
							|  |  |  |         null, | 
					
						
							| 
									
										
										
										
											2013-02-05 13:46:02 -08:00
										 |  |  |         pht('Administrate User...'), | 
					
						
							| 
									
										
										
										
											2013-02-19 13:33:10 -08:00
										 |  |  |         '/people/edit/'.$user->getID().'/'); | 
					
						
							| 
									
										
										
										
											2012-01-16 16:54:05 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-13 15:27:21 -07:00
										 |  |  |     return $this->buildApplicationPage( | 
					
						
							| 
									
										
										
										
											2013-01-09 13:57:31 -08:00
										 |  |  |       $nav, | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |       array( | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |         'title' => $user->getUsername(), | 
					
						
							| 
									
										
										
										
											2013-04-14 19:32:26 -07:00
										 |  |  |         'device' => true, | 
					
						
							|  |  |  |         'dust' => true, | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |       )); | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |   private function renderBasicInformation($user, $profile) { | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-19 18:28:41 -08:00
										 |  |  |     $blurb = nonempty( | 
					
						
							|  |  |  |       $profile->getBlurb(), | 
					
						
							| 
									
										
										
										
											2013-02-19 13:33:10 -08:00
										 |  |  |       '//'.pht('Nothing is known about this rare specimen.').'//'); | 
					
						
							| 
									
										
										
										
											2011-02-19 18:28:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-04 12:33:05 -08:00
										 |  |  |     $viewer = $this->getRequest()->getUser(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												Generalize the markup engine factory
Summary:
This thing services every app but it lives inside Differential right now. Pull
it out, and separate the factory interfaces per-application.
This will let us accommodate changes we need to make for Phriction to support
wiki linking.
Test Plan: Tested remarkup in differential, diffusion, maniphest, people,
slowvote.
Reviewed By: hsb
Reviewers: hsb, codeblock, jungejason, tuomaspelkonen, aran
CC: aran, hsb
Differential Revision: 646
											
										 
											2011-07-11 15:58:32 -07:00
										 |  |  |     $engine = PhabricatorMarkupEngine::newProfileMarkupEngine(); | 
					
						
							| 
									
										
										
										
											2013-03-04 12:33:05 -08:00
										 |  |  |     $engine->setConfig('viewer', $viewer); | 
					
						
							| 
									
										
										
										
											2013-02-13 14:50:15 -08:00
										 |  |  |     $blurb = $engine->markupText($blurb); | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |     $content = hsprintf( | 
					
						
							| 
									
										
										
										
											2013-04-15 13:07:54 -07:00
										 |  |  |       '<div class="phabricator-profile-info-group profile-wrap-responsive"> | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |         <h1 class="phabricator-profile-info-header">%s</h1> | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |         <div class="phabricator-profile-info-pane"> | 
					
						
							|  |  |  |           <table class="phabricator-profile-info-table"> | 
					
						
							|  |  |  |             <tr> | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |               <th>%s</th> | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |               <td>%s</td> | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |             </tr> | 
					
						
							|  |  |  |             <tr> | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |               <th>%s</th> | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |               <td>%s</td> | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |             </tr> | 
					
						
							|  |  |  |           </table> | 
					
						
							|  |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |       </div>'. | 
					
						
							| 
									
										
										
										
											2013-04-15 13:07:54 -07:00
										 |  |  |       '<div class="phabricator-profile-info-group profile-wrap-responsive"> | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |         <h1 class="phabricator-profile-info-header">%s</h1> | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |         <div class="phabricator-profile-info-pane"> | 
					
						
							|  |  |  |           <table class="phabricator-profile-info-table"> | 
					
						
							|  |  |  |             <tr> | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |               <th>%s</th> | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |               <td>%s</td> | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |             </tr> | 
					
						
							|  |  |  |           </table> | 
					
						
							|  |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |       </div>', | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |       pht('Basic Information'), | 
					
						
							|  |  |  |       pht('PHID'), | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |       $user->getPHID(), | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |       pht('User Since'), | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |       phabricator_datetime($user->getDateCreated(), $viewer), | 
					
						
							| 
									
										
										
										
											2013-03-26 12:47:25 -07:00
										 |  |  |       pht('Flavor Text'), | 
					
						
							|  |  |  |       pht('Blurb'), | 
					
						
							| 
									
										
										
										
											2013-02-08 12:07:44 -08:00
										 |  |  |       $blurb); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return $content; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private function renderUserFeed(PhabricatorUser $user) { | 
					
						
							| 
									
										
										
										
											2012-07-02 15:41:19 -07:00
										 |  |  |     $viewer = $this->getRequest()->getUser(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $query = new PhabricatorFeedQuery(); | 
					
						
							|  |  |  |     $query->setFilterPHIDs( | 
					
						
							|  |  |  |       array( | 
					
						
							|  |  |  |         $user->getPHID(), | 
					
						
							|  |  |  |       )); | 
					
						
							| 
									
										
										
										
											2012-07-03 06:25:03 -07:00
										 |  |  |     $query->setLimit(100); | 
					
						
							| 
									
										
										
										
											2012-07-02 15:41:19 -07:00
										 |  |  |     $query->setViewer($viewer); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $stories = $query->execute(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $builder = new PhabricatorFeedBuilder($stories); | 
					
						
							| 
									
										
										
										
											2012-07-02 15:41:19 -07:00
										 |  |  |     $builder->setUser($viewer); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $view = $builder->buildView(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-13 14:50:15 -08:00
										 |  |  |     return hsprintf( | 
					
						
							| 
									
										
										
										
											2013-04-15 13:07:54 -07:00
										 |  |  |       '<div class="profile-feed profile-wrap-responsive"> | 
					
						
							| 
									
										
										
										
											2013-04-14 19:32:26 -07:00
										 |  |  |         %s | 
					
						
							| 
									
										
										
										
											2013-02-13 14:50:15 -08:00
										 |  |  |       </div>', | 
					
						
							|  |  |  |       $view->render()); | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | } |