[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/feed/query/ -> PhabricatorFeedSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorFeedSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Feed Stories');
   8    }
   9  
  10    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  11      $saved = new PhabricatorSavedQuery();
  12  
  13      $saved->setParameter(
  14        'userPHIDs',
  15        $this->readUsersFromRequest($request, 'users'));
  16  
  17      $saved->setParameter(
  18        'projectPHIDs',
  19        array_values($request->getArr('projectPHIDs')));
  20  
  21      $saved->setParameter(
  22        'viewerProjects',
  23        $request->getBool('viewerProjects'));
  24  
  25      return $saved;
  26    }
  27  
  28    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  29      $query = id(new PhabricatorFeedQuery());
  30  
  31      $phids = array();
  32  
  33      $user_phids = $saved->getParameter('userPHIDs');
  34      if ($user_phids) {
  35        $phids[] = $user_phids;
  36      }
  37  
  38      $proj_phids = $saved->getParameter('projectPHIDs');
  39      if ($proj_phids) {
  40        $phids[] = $proj_phids;
  41      }
  42  
  43      $viewer_projects = $saved->getParameter('viewerProjects');
  44      if ($viewer_projects) {
  45        $viewer = $this->requireViewer();
  46        $projects = id(new PhabricatorProjectQuery())
  47          ->setViewer($viewer)
  48          ->withMemberPHIDs(array($viewer->getPHID()))
  49          ->execute();
  50        $phids[] = mpull($projects, 'getPHID');
  51      }
  52  
  53      $phids = array_mergev($phids);
  54      if ($phids) {
  55        $query->setFilterPHIDs($phids);
  56      }
  57  
  58      return $query;
  59    }
  60  
  61    public function buildSearchForm(
  62      AphrontFormView $form,
  63      PhabricatorSavedQuery $saved_query) {
  64  
  65      $user_phids = $saved_query->getParameter('userPHIDs', array());
  66      $proj_phids = $saved_query->getParameter('projectPHIDs', array());
  67  
  68      $phids = array_merge($user_phids, $proj_phids);
  69      $handles = id(new PhabricatorHandleQuery())
  70        ->setViewer($this->requireViewer())
  71        ->withPHIDs($phids)
  72        ->execute();
  73      $user_handles = array_select_keys($handles, $user_phids);
  74      $proj_handles = array_select_keys($handles, $proj_phids);
  75  
  76      $viewer_projects = $saved_query->getParameter('viewerProjects');
  77  
  78      $form
  79        ->appendChild(
  80          id(new AphrontFormTokenizerControl())
  81            ->setDatasource(new PhabricatorPeopleDatasource())
  82            ->setName('users')
  83            ->setLabel(pht('Include Users'))
  84            ->setValue($user_handles))
  85        ->appendChild(
  86          id(new AphrontFormTokenizerControl())
  87            ->setDatasource(new PhabricatorProjectDatasource())
  88            ->setName('projectPHIDs')
  89            ->setLabel(pht('Include Projects'))
  90            ->setValue($proj_handles))
  91        ->appendChild(
  92          id(new AphrontFormCheckboxControl())
  93            ->addCheckbox(
  94              'viewerProjects',
  95              1,
  96              pht('Include stories about projects I am a member of.'),
  97              $viewer_projects));
  98    }
  99  
 100    protected function getURI($path) {
 101      return '/feed/'.$path;
 102    }
 103  
 104    public function getBuiltinQueryNames() {
 105      $names = array(
 106        'all' => pht('All Stories'),
 107      );
 108  
 109      if ($this->requireViewer()->isLoggedIn()) {
 110        $names['projects'] = pht('Projects');
 111      }
 112  
 113      return $names;
 114    }
 115  
 116    public function buildSavedQueryFromBuiltin($query_key) {
 117  
 118      $query = $this->newSavedQuery();
 119      $query->setQueryKey($query_key);
 120  
 121      switch ($query_key) {
 122        case 'all':
 123          return $query;
 124        case 'projects':
 125          return $query->setParameter('viewerProjects', true);
 126      }
 127  
 128      return parent::buildSavedQueryFromBuiltin($query_key);
 129    }
 130  
 131    protected function renderResultList(
 132      array $objects,
 133      PhabricatorSavedQuery $query,
 134      array $handles) {
 135  
 136      $builder = new PhabricatorFeedBuilder($objects);
 137  
 138      if ($this->isPanelContext()) {
 139        $builder->setShowHovercards(false);
 140      } else {
 141        $builder->setShowHovercards(true);
 142      }
 143  
 144      $builder->setUser($this->requireViewer());
 145      $view = $builder->buildView();
 146  
 147      return phutil_tag_div('phabricator-feed-frame', $view);
 148    }
 149  
 150  }


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