[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/people/query/ -> PhabricatorPeopleSearchEngine.php (source)

   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  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1