| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  |   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; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-19 18:28:41 -08:00
										 |  |  |     $profile = id(new PhabricatorUserProfile())->loadOneWhere( | 
					
						
							|  |  |  |       'userPHID = %s', | 
					
						
							|  |  |  |       $user->getPHID()); | 
					
						
							|  |  |  |     if (!$profile) { | 
					
						
							|  |  |  |       $profile = new PhabricatorUserProfile(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-03-06 13:57:31 -08:00
										 |  |  |     $username = phutil_escape_uri($user->getUserName()); | 
					
						
							| 
									
										
										
										
											2011-02-19 18:28:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $nav = new AphrontSideNavFilterView(); | 
					
						
							| 
									
										
										
										
											2012-03-06 13:57:31 -08:00
										 |  |  |     $nav->setBaseURI(new PhutilURI('/p/'.$username.'/')); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $nav->addFilter('feed', 'Feed'); | 
					
						
							|  |  |  |     $nav->addFilter('about', 'About'); | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $nav->addSpacer(); | 
					
						
							|  |  |  |     $nav->addLabel('Activity'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $external_arrow = "\xE2\x86\x97"; | 
					
						
							|  |  |  |     $nav->addFilter( | 
					
						
							|  |  |  |       null, | 
					
						
							|  |  |  |       "Revisions {$external_arrow}", | 
					
						
							| 
									
										
										
										
											2012-03-06 13:57:31 -08:00
										 |  |  |       '/differential/filter/revisions/'.$username.'/'); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $nav->addFilter( | 
					
						
							|  |  |  |       null, | 
					
						
							|  |  |  |       "Tasks {$external_arrow}", | 
					
						
							|  |  |  |       '/maniphest/view/action/?users='.$user->getPHID()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $nav->addFilter( | 
					
						
							|  |  |  |       null, | 
					
						
							|  |  |  |       "Commits {$external_arrow}", | 
					
						
							| 
									
										
										
										
											2012-03-06 13:57:31 -08:00
										 |  |  |       '/audit/view/author/'.$username.'/'); | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-03 14:13:38 -08:00
										 |  |  |     $nav->addFilter( | 
					
						
							|  |  |  |       null, | 
					
						
							|  |  |  |       "Lint Messages {$external_arrow}", | 
					
						
							|  |  |  |       '/diffusion/lint/?owner[0]='.$user->getPHID()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-22 11:06:37 -08:00
										 |  |  |     $oauths = id(new PhabricatorUserOAuthInfo())->loadAllWhere( | 
					
						
							|  |  |  |       'userID = %d', | 
					
						
							|  |  |  |       $user->getID()); | 
					
						
							|  |  |  |     $oauths = mpull($oauths, null, 'getOAuthProvider'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $providers = PhabricatorOAuthProvider::getAllProviders(); | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $added_spacer = false; | 
					
						
							| 
									
										
										
										
											2011-02-22 11:06:37 -08:00
										 |  |  |     foreach ($providers as $provider) { | 
					
						
							|  |  |  |       if (!$provider->isProviderEnabled()) { | 
					
						
							|  |  |  |         continue; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       $provider_key = $provider->getProviderKey(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (!isset($oauths[$provider_key])) { | 
					
						
							|  |  |  |         continue; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       $name = $provider->getProviderName().' Profile'; | 
					
						
							|  |  |  |       $href = $oauths[$provider_key]->getAccountURI(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if ($href) { | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |         if (!$added_spacer) { | 
					
						
							|  |  |  |           $nav->addSpacer(); | 
					
						
							|  |  |  |           $nav->addLabel('Linked Accounts'); | 
					
						
							|  |  |  |           $added_spacer = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $nav->addFilter(null, $name.' '.$external_arrow, $href); | 
					
						
							| 
									
										
										
										
											2011-02-22 11:06:37 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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()) { | 
					
						
							|  |  |  |       $header->setStatus('Disabled'); | 
					
						
							|  |  |  |     } 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
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |     $header->appendChild($nav); | 
					
						
							|  |  |  |     $nav->appendChild( | 
					
						
							|  |  |  |       '<div style="padding: 1em;">'.$content.'</div>'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if ($user->getPHID() == $viewer->getPHID()) { | 
					
						
							|  |  |  |       $nav->addSpacer(); | 
					
						
							| 
									
										
										
										
											2012-08-13 12:37:26 -07:00
										 |  |  |       $nav->addFilter(null, 'Edit Profile...', '/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->addSpacer(); | 
					
						
							|  |  |  |       $nav->addFilter( | 
					
						
							|  |  |  |         null, | 
					
						
							|  |  |  |         'Administrate User...', | 
					
						
							|  |  |  |         '/people/edit/'.$user->getID().'/'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-13 15:27:21 -07:00
										 |  |  |     return $this->buildApplicationPage( | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |       $header, | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |       array( | 
					
						
							| 
									
										
										
										
											2011-06-18 05:13:56 -03:00
										 |  |  |         'title' => $user->getUsername(), | 
					
						
							| 
									
										
										
										
											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(), | 
					
						
							|  |  |  |       '//Nothing is known about this rare specimen.//'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												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(); | 
					
						
							| 
									
										
										
										
											2011-02-19 18:28:41 -08:00
										 |  |  |     $blurb = $engine->markupText($blurb); | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-03 16:36:19 -08:00
										 |  |  |     $viewer = $this->getRequest()->getUser(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |     $content = | 
					
						
							|  |  |  |       '<div class="phabricator-profile-info-group"> | 
					
						
							|  |  |  |         <h1 class="phabricator-profile-info-header">Basic Information</h1> | 
					
						
							|  |  |  |         <div class="phabricator-profile-info-pane"> | 
					
						
							|  |  |  |           <table class="phabricator-profile-info-table"> | 
					
						
							|  |  |  |             <tr> | 
					
						
							|  |  |  |               <th>PHID</th> | 
					
						
							|  |  |  |               <td>'.phutil_escape_html($user->getPHID()).'</td> | 
					
						
							|  |  |  |             </tr> | 
					
						
							|  |  |  |             <tr> | 
					
						
							|  |  |  |               <th>User Since</th> | 
					
						
							| 
									
										
										
										
											2011-12-03 16:36:19 -08:00
										 |  |  |               <td>'.phabricator_datetime($user->getDateCreated(), | 
					
						
							|  |  |  |                                          $viewer). | 
					
						
							|  |  |  |              '</td> | 
					
						
							| 
									
										
										
										
											2011-02-19 17:33:53 -08:00
										 |  |  |             </tr> | 
					
						
							|  |  |  |           </table> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div>'; | 
					
						
							|  |  |  |     $content .= | 
					
						
							|  |  |  |       '<div class="phabricator-profile-info-group"> | 
					
						
							|  |  |  |         <h1 class="phabricator-profile-info-header">Flavor Text</h1> | 
					
						
							|  |  |  |         <div class="phabricator-profile-info-pane"> | 
					
						
							|  |  |  |           <table class="phabricator-profile-info-table"> | 
					
						
							|  |  |  |             <tr> | 
					
						
							|  |  |  |               <th>Blurb</th> | 
					
						
							|  |  |  |               <td>'.$blurb.'</td> | 
					
						
							|  |  |  |             </tr> | 
					
						
							|  |  |  |           </table> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div>'; | 
					
						
							| 
									
										
										
										
											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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return | 
					
						
							| 
									
										
										
										
											2011-07-23 17:09:03 -07:00
										 |  |  |       '<div class="phabricator-profile-info-group"> | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |         <h1 class="phabricator-profile-info-header">Activity Feed</h1> | 
					
						
							| 
									
										
										
										
											2011-07-23 17:09:03 -07:00
										 |  |  |         <div class="phabricator-profile-info-pane"> | 
					
						
							| 
									
										
										
										
											2011-12-23 18:17:40 -08:00
										 |  |  |           '.$view->render().' | 
					
						
							| 
									
										
										
										
											2011-07-23 17:09:03 -07:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div>'; | 
					
						
							| 
									
										
										
										
											2011-01-23 18:09:16 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | } |