[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/project/query/ -> PhabricatorProjectSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorProjectSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Projects');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorProjectApplication';
  12    }
  13  
  14    public function getCustomFieldObject() {
  15      return new PhabricatorProject();
  16    }
  17  
  18    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  19      $saved = new PhabricatorSavedQuery();
  20  
  21      $saved->setParameter(
  22        'memberPHIDs',
  23        $this->readUsersFromRequest($request, 'members'));
  24  
  25      $saved->setParameter('status', $request->getStr('status'));
  26      $saved->setParameter('name', $request->getStr('name'));
  27  
  28      $saved->setParameter(
  29        'icons',
  30        $this->readListFromRequest($request, 'icons'));
  31  
  32      $saved->setParameter(
  33        'colors',
  34        $this->readListFromRequest($request, 'colors'));
  35  
  36      $this->readCustomFieldsFromRequest($request, $saved);
  37  
  38      return $saved;
  39    }
  40  
  41    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  42      $query = id(new PhabricatorProjectQuery())
  43        ->needImages(true);
  44  
  45      $member_phids = $saved->getParameter('memberPHIDs', array());
  46      if ($member_phids && is_array($member_phids)) {
  47        $query->withMemberPHIDs($member_phids);
  48      }
  49  
  50      $status = $saved->getParameter('status');
  51      $status = idx($this->getStatusValues(), $status);
  52      if ($status) {
  53        $query->withStatus($status);
  54      }
  55  
  56      $name = $saved->getParameter('name');
  57      if (strlen($name)) {
  58        $query->withDatasourceQuery($name);
  59      }
  60  
  61      $icons = $saved->getParameter('icons');
  62      if ($icons) {
  63        $query->withIcons($icons);
  64      }
  65  
  66      $colors = $saved->getParameter('colors');
  67      if ($colors) {
  68        $query->withColors($colors);
  69      }
  70  
  71      $this->applyCustomFieldsToQuery($query, $saved);
  72  
  73      return $query;
  74    }
  75  
  76    public function buildSearchForm(
  77      AphrontFormView $form,
  78      PhabricatorSavedQuery $saved) {
  79  
  80      $phids = $saved->getParameter('memberPHIDs', array());
  81      $member_handles = id(new PhabricatorHandleQuery())
  82        ->setViewer($this->requireViewer())
  83        ->withPHIDs($phids)
  84        ->execute();
  85  
  86      $status = $saved->getParameter('status');
  87      $name_match = $saved->getParameter('name');
  88  
  89      $icons = array_fuse($saved->getParameter('icons', array()));
  90      $colors = array_fuse($saved->getParameter('colors', array()));
  91  
  92      $icon_control = id(new AphrontFormCheckboxControl())
  93        ->setLabel(pht('Icons'));
  94      foreach (PhabricatorProjectIcon::getIconMap() as $icon => $name) {
  95        $image = id(new PHUIIconView())
  96          ->setIconFont($icon);
  97  
  98        $icon_control->addCheckbox(
  99          'icons[]',
 100          $icon,
 101          array($image, ' ', $name),
 102          isset($icons[$icon]));
 103      }
 104  
 105      $color_control = id(new AphrontFormCheckboxControl())
 106        ->setLabel(pht('Colors'));
 107      foreach (PhabricatorProjectIcon::getColorMap() as $color => $name) {
 108        $tag = id(new PHUITagView())
 109          ->setType(PHUITagView::TYPE_SHADE)
 110          ->setShade($color)
 111          ->setName($name);
 112  
 113        $color_control->addCheckbox(
 114          'colors[]',
 115          $color,
 116          $tag,
 117          isset($colors[$color]));
 118      }
 119  
 120      $form
 121        ->appendChild(
 122          id(new AphrontFormTextControl())
 123            ->setName('name')
 124            ->setLabel(pht('Name'))
 125            ->setValue($name_match))
 126        ->appendChild(
 127          id(new AphrontFormTokenizerControl())
 128            ->setDatasource(new PhabricatorPeopleDatasource())
 129            ->setName('members')
 130            ->setLabel(pht('Members'))
 131            ->setValue($member_handles))
 132        ->appendChild(
 133          id(new AphrontFormSelectControl())
 134            ->setLabel(pht('Status'))
 135            ->setName('status')
 136            ->setOptions($this->getStatusOptions())
 137            ->setValue($status))
 138        ->appendChild($icon_control)
 139        ->appendChild($color_control);
 140  
 141      $this->appendCustomFieldsToForm($form, $saved);
 142    }
 143  
 144    protected function getURI($path) {
 145      return '/project/'.$path;
 146    }
 147  
 148    public function getBuiltinQueryNames() {
 149      $names = array();
 150  
 151      if ($this->requireViewer()->isLoggedIn()) {
 152        $names['joined'] = pht('Joined');
 153      }
 154  
 155      $names['active'] = pht('Active');
 156      $names['all'] = pht('All');
 157  
 158      return $names;
 159    }
 160  
 161    public function buildSavedQueryFromBuiltin($query_key) {
 162      $query = $this->newSavedQuery();
 163      $query->setQueryKey($query_key);
 164  
 165      $viewer_phid = $this->requireViewer()->getPHID();
 166  
 167      switch ($query_key) {
 168        case 'all':
 169          return $query;
 170        case 'active':
 171          return $query
 172            ->setParameter('status', 'active');
 173        case 'joined':
 174          return $query
 175            ->setParameter('memberPHIDs', array($viewer_phid))
 176            ->setParameter('status', 'active');
 177      }
 178  
 179      return parent::buildSavedQueryFromBuiltin($query_key);
 180    }
 181  
 182    private function getStatusOptions() {
 183      return array(
 184        'active' => pht('Show Only Active Projects'),
 185        'all'    => pht('Show All Projects'),
 186      );
 187    }
 188  
 189    private function getStatusValues() {
 190      return array(
 191        'active' => PhabricatorProjectQuery::STATUS_ACTIVE,
 192        'all' => PhabricatorProjectQuery::STATUS_ANY,
 193      );
 194    }
 195  
 196    private function getColorValues() {}
 197  
 198    private function getIconValues() {}
 199  
 200    protected function getRequiredHandlePHIDsForResultList(
 201      array $projects,
 202      PhabricatorSavedQuery $query) {
 203      return mpull($projects, 'getPHID');
 204    }
 205  
 206    protected function renderResultList(
 207      array $projects,
 208      PhabricatorSavedQuery $query,
 209      array $handles) {
 210      assert_instances_of($projects, 'PhabricatorProject');
 211      $viewer = $this->requireViewer();
 212  
 213      $list = new PHUIObjectItemListView();
 214      $list->setUser($viewer);
 215      foreach ($projects as $project) {
 216        $id = $project->getID();
 217        $workboards_uri = $this->getApplicationURI("board/{$id}/");
 218        $members_uri = $this->getApplicationURI("members/{$id}/");
 219        $workboards_url = phutil_tag(
 220          'a',
 221          array(
 222            'href' => $workboards_uri,
 223          ),
 224          pht('Workboard'));
 225  
 226        $members_url = phutil_tag(
 227          'a',
 228          array(
 229            'href' => $members_uri,
 230          ),
 231          pht('Members'));
 232  
 233        $tag_list = id(new PHUIHandleTagListView())
 234          ->setSlim(true)
 235          ->setHandles(array($handles[$project->getPHID()]));
 236  
 237        $item = id(new PHUIObjectItemView())
 238          ->setHeader($project->getName())
 239          ->setHref($this->getApplicationURI("view/{$id}/"))
 240          ->setImageURI($project->getProfileImageURI())
 241          ->addAttribute($tag_list)
 242          ->addAttribute($workboards_url)
 243          ->addAttribute($members_url);
 244  
 245        if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) {
 246          $item->addIcon('delete-grey', pht('Archived'));
 247          $item->setDisabled(true);
 248        }
 249  
 250        $list->addItem($item);
 251      }
 252  
 253      return $list;
 254    }
 255  
 256  }


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