[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorPeopleSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Users'); 8 } 9 10 public function getApplicationClassName() { 11 return 'PhabricatorPeopleApplication'; 12 } 13 14 public function getCustomFieldObject() { 15 return new PhabricatorUser(); 16 } 17 18 public function buildSavedQueryFromRequest(AphrontRequest $request) { 19 $saved = new PhabricatorSavedQuery(); 20 21 $saved->setParameter('usernames', $request->getStrList('usernames')); 22 $saved->setParameter('nameLike', $request->getStr('nameLike')); 23 $saved->setParameter('isAdmin', $request->getStr('isAdmin')); 24 $saved->setParameter('isDisabled', $request->getStr('isDisabled')); 25 $saved->setParameter('isSystemAgent', $request->getStr('isSystemAgent')); 26 $saved->setParameter('needsApproval', $request->getStr('needsApproval')); 27 $saved->setParameter('createdStart', $request->getStr('createdStart')); 28 $saved->setParameter('createdEnd', $request->getStr('createdEnd')); 29 30 $this->readCustomFieldsFromRequest($request, $saved); 31 32 return $saved; 33 } 34 35 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 36 $query = id(new PhabricatorPeopleQuery()) 37 ->needPrimaryEmail(true) 38 ->needProfileImage(true); 39 40 $viewer = $this->requireViewer(); 41 42 // If the viewer can't browse the user directory, restrict the query to 43 // just the user's own profile. This is a little bit silly, but serves to 44 // restrict users from creating a dashboard panel which essentially just 45 // contains a user directory anyway. 46 $can_browse = PhabricatorPolicyFilter::hasCapability( 47 $viewer, 48 $this->getApplication(), 49 PeopleBrowseUserDirectoryCapability::CAPABILITY); 50 if (!$can_browse) { 51 $query->withPHIDs(array($viewer->getPHID())); 52 } 53 54 $usernames = $saved->getParameter('usernames', array()); 55 if ($usernames) { 56 $query->withUsernames($usernames); 57 } 58 59 $like = $saved->getParameter('nameLike'); 60 if ($like) { 61 $query->withNameLike($like); 62 } 63 64 $is_admin = $saved->getParameter('isAdmin'); 65 $is_disabled = $saved->getParameter('isDisabled'); 66 $is_system_agent = $saved->getParameter('isSystemAgent'); 67 $needs_approval = $saved->getParameter('needsApproval'); 68 $no_disabled = $saved->getParameter('noDisabled'); 69 70 if ($is_admin) { 71 $query->withIsAdmin(true); 72 } 73 74 if ($is_disabled) { 75 $query->withIsDisabled(true); 76 } else if ($no_disabled) { 77 $query->withIsDisabled(false); 78 } 79 80 if ($is_system_agent) { 81 $query->withIsSystemAgent(true); 82 } 83 84 if ($needs_approval) { 85 $query->withIsApproved(false); 86 } 87 88 $start = $this->parseDateTime($saved->getParameter('createdStart')); 89 $end = $this->parseDateTime($saved->getParameter('createdEnd')); 90 91 if ($start) { 92 $query->withDateCreatedAfter($start); 93 } 94 95 if ($end) { 96 $query->withDateCreatedBefore($end); 97 } 98 99 $this->applyCustomFieldsToQuery($query, $saved); 100 101 return $query; 102 } 103 104 public function buildSearchForm( 105 AphrontFormView $form, 106 PhabricatorSavedQuery $saved) { 107 108 $usernames = $saved->getParameter('usernames', array()); 109 $like = $saved->getParameter('nameLike'); 110 111 $is_admin = $saved->getParameter('isAdmin'); 112 $is_disabled = $saved->getParameter('isDisabled'); 113 $is_system_agent = $saved->getParameter('isSystemAgent'); 114 $needs_approval = $saved->getParameter('needsApproval'); 115 116 $form 117 ->appendChild( 118 id(new AphrontFormTextControl()) 119 ->setName('usernames') 120 ->setLabel(pht('Usernames')) 121 ->setValue(implode(', ', $usernames))) 122 ->appendChild( 123 id(new AphrontFormTextControl()) 124 ->setName('nameLike') 125 ->setLabel(pht('Name Contains')) 126 ->setValue($like)) 127 ->appendChild( 128 id(new AphrontFormCheckboxControl()) 129 ->setLabel('Role') 130 ->addCheckbox( 131 'isAdmin', 132 1, 133 pht('Show only administrators.'), 134 $is_admin) 135 ->addCheckbox( 136 'isDisabled', 137 1, 138 pht('Show only disabled users.'), 139 $is_disabled) 140 ->addCheckbox( 141 'isSystemAgent', 142 1, 143 pht('Show only bots.'), 144 $is_system_agent) 145 ->addCheckbox( 146 'needsApproval', 147 1, 148 pht('Show only users who need approval.'), 149 $needs_approval)); 150 151 $this->appendCustomFieldsToForm($form, $saved); 152 153 $this->buildDateRange( 154 $form, 155 $saved, 156 'createdStart', 157 pht('Joined After'), 158 'createdEnd', 159 pht('Joined Before')); 160 } 161 162 protected function getURI($path) { 163 return '/people/'.$path; 164 } 165 166 public function getBuiltinQueryNames() { 167 $names = array( 168 'all' => pht('All'), 169 ); 170 171 $viewer = $this->requireViewer(); 172 if ($viewer->getIsAdmin()) { 173 $names['approval'] = pht('Approval Queue'); 174 } 175 176 return $names; 177 } 178 179 public function buildSavedQueryFromBuiltin($query_key) { 180 $query = $this->newSavedQuery(); 181 $query->setQueryKey($query_key); 182 183 switch ($query_key) { 184 case 'all': 185 return $query; 186 case 'approval': 187 return $query 188 ->setParameter('needsApproval', true) 189 ->setParameter('noDisabled', true); 190 } 191 192 return parent::buildSavedQueryFromBuiltin($query_key); 193 } 194 195 protected function renderResultList( 196 array $users, 197 PhabricatorSavedQuery $query, 198 array $handles) { 199 200 assert_instances_of($users, 'PhabricatorUser'); 201 202 $request = $this->getRequest(); 203 $viewer = $this->requireViewer(); 204 205 $list = new PHUIObjectItemListView(); 206 207 $is_approval = ($query->getQueryKey() == 'approval'); 208 209 foreach ($users as $user) { 210 $primary_email = $user->loadPrimaryEmail(); 211 if ($primary_email && $primary_email->getIsVerified()) { 212 $email = pht('Verified'); 213 } else { 214 $email = pht('Unverified'); 215 } 216 217 $item = new PHUIObjectItemView(); 218 $item->setHeader($user->getFullName()) 219 ->setHref('/p/'.$user->getUsername().'/') 220 ->addAttribute(phabricator_datetime($user->getDateCreated(), $viewer)) 221 ->addAttribute($email) 222 ->setImageURI($user->getProfileImageURI()); 223 224 if ($is_approval && $primary_email) { 225 $item->addAttribute($primary_email->getAddress()); 226 } 227 228 if ($user->getIsDisabled()) { 229 $item->addIcon('fa-ban', pht('Disabled')); 230 } 231 232 if (!$is_approval) { 233 if (!$user->getIsApproved()) { 234 $item->addIcon('fa-clock-o', pht('Needs Approval')); 235 } 236 } 237 238 if ($user->getIsAdmin()) { 239 $item->addIcon('fa-star', pht('Admin')); 240 } 241 242 if ($user->getIsSystemAgent()) { 243 $item->addIcon('fa-desktop', pht('Bot/Script')); 244 } 245 246 if ($viewer->getIsAdmin()) { 247 $user_id = $user->getID(); 248 if ($is_approval) { 249 $item->addAction( 250 id(new PHUIListItemView()) 251 ->setIcon('fa-ban') 252 ->setName(pht('Disable')) 253 ->setWorkflow(true) 254 ->setHref($this->getApplicationURI('disapprove/'.$user_id.'/'))); 255 $item->addAction( 256 id(new PHUIListItemView()) 257 ->setIcon('fa-thumbs-o-up') 258 ->setName(pht('Approve')) 259 ->setWorkflow(true) 260 ->setHref($this->getApplicationURI('approve/'.$user_id.'/'))); 261 } 262 } 263 264 $list->addItem($item); 265 } 266 267 return $list; 268 } 269 270 }
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 |