[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/ponder/query/ -> PonderQuestionSearchEngine.php (source)

   1  <?php
   2  
   3  final class PonderQuestionSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Ponder Questions');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorPonderApplication';
  12    }
  13  
  14    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  15      $saved = new PhabricatorSavedQuery();
  16  
  17      $saved->setParameter(
  18        'authorPHIDs',
  19        $this->readUsersFromRequest($request, 'authors'));
  20  
  21      $saved->setParameter(
  22        'answererPHIDs',
  23        $this->readUsersFromRequest($request, 'answerers'));
  24  
  25      $saved->setParameter('status', $request->getStr('status'));
  26  
  27      return $saved;
  28    }
  29  
  30    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  31      $query = id(new PonderQuestionQuery());
  32  
  33      $author_phids = $saved->getParameter('authorPHIDs');
  34      if ($author_phids) {
  35        $query->withAuthorPHIDs($author_phids);
  36      }
  37  
  38      $answerer_phids = $saved->getParameter('answererPHIDs');
  39      if ($answerer_phids) {
  40        $query->withAnswererPHIDs($answerer_phids);
  41      }
  42  
  43      $status = $saved->getParameter('status');
  44      if ($status != null) {
  45        switch ($status) {
  46          case 0:
  47            $query->withStatus(PonderQuestionQuery::STATUS_OPEN);
  48            break;
  49          case 1:
  50            $query->withStatus(PonderQuestionQuery::STATUS_CLOSED);
  51            break;
  52        }
  53      }
  54  
  55      return $query;
  56    }
  57  
  58    public function buildSearchForm(
  59      AphrontFormView $form,
  60      PhabricatorSavedQuery $saved_query) {
  61  
  62      $author_phids = $saved_query->getParameter('authorPHIDs', array());
  63      $answerer_phids = $saved_query->getParameter('answererPHIDs', array());
  64      $status = $saved_query->getParameter(
  65        'status', PonderQuestionStatus::STATUS_OPEN);
  66  
  67      $phids = array_merge($author_phids, $answerer_phids);
  68      $handles = id(new PhabricatorHandleQuery())
  69        ->setViewer($this->requireViewer())
  70        ->withPHIDs($phids)
  71        ->execute();
  72  
  73      $form
  74        ->appendChild(
  75          id(new AphrontFormTokenizerControl())
  76            ->setDatasource(new PhabricatorPeopleDatasource())
  77            ->setName('authors')
  78            ->setLabel(pht('Authors'))
  79            ->setValue(array_select_keys($handles, $author_phids)))
  80        ->appendChild(
  81          id(new AphrontFormTokenizerControl())
  82            ->setDatasource(new PhabricatorPeopleDatasource())
  83            ->setName('answerers')
  84            ->setLabel(pht('Answered By'))
  85            ->setValue(array_select_keys($handles, $answerer_phids)))
  86        ->appendChild(
  87          id(new AphrontFormSelectControl())
  88            ->setLabel(pht('Status'))
  89            ->setName('status')
  90            ->setValue($status)
  91            ->setOptions(PonderQuestionStatus::getQuestionStatusMap()));
  92    }
  93  
  94    protected function getURI($path) {
  95      return '/ponder/'.$path;
  96    }
  97  
  98    public function getBuiltinQueryNames() {
  99      $names = array(
 100        'open' => pht('Open Questions'),
 101        'all' => pht('All Questions'),
 102      );
 103  
 104      if ($this->requireViewer()->isLoggedIn()) {
 105        $names['authored'] = pht('Authored');
 106        $names['answered'] = pht('Answered');
 107      }
 108  
 109      return $names;
 110    }
 111  
 112    public function buildSavedQueryFromBuiltin($query_key) {
 113  
 114      $query = $this->newSavedQuery();
 115      $query->setQueryKey($query_key);
 116  
 117      switch ($query_key) {
 118        case 'all':
 119          return $query;
 120        case 'open':
 121          return $query->setParameter('status', PonderQuestionQuery::STATUS_OPEN);
 122        case 'authored':
 123          return $query->setParameter(
 124            'authorPHIDs',
 125            array($this->requireViewer()->getPHID()));
 126        case 'answered':
 127          return $query->setParameter(
 128            'answererPHIDs',
 129            array($this->requireViewer()->getPHID()));
 130      }
 131  
 132      return parent::buildSavedQueryFromBuiltin($query_key);
 133    }
 134  
 135    protected function getRequiredHandlePHIDsForResultList(
 136      array $questions,
 137      PhabricatorSavedQuery $query) {
 138      return mpull($questions, 'getAuthorPHID');
 139    }
 140  
 141    protected function renderResultList(
 142      array $questions,
 143      PhabricatorSavedQuery $query,
 144      array $handles) {
 145      assert_instances_of($questions, 'PonderQuestion');
 146  
 147      $viewer = $this->requireViewer();
 148  
 149      $view = id(new PHUIObjectItemListView())
 150        ->setUser($viewer);
 151  
 152      foreach ($questions as $question) {
 153        $item = new PHUIObjectItemView();
 154        $item->setObjectName('Q'.$question->getID());
 155        $item->setHeader($question->getTitle());
 156        $item->setHref('/Q'.$question->getID());
 157        $item->setObject($question);
 158        $item->setBarColor(
 159          PonderQuestionStatus::getQuestionStatusTagColor(
 160            $question->getStatus()));
 161  
 162        $created_date = phabricator_date($question->getDateCreated(), $viewer);
 163        $item->addIcon('none', $created_date);
 164        $item->addByline(
 165          pht(
 166            'Asked by %s',
 167            $handles[$question->getAuthorPHID()]->renderLink()));
 168  
 169        $item->addAttribute(
 170          pht('%d Answer(s)', $question->getAnswerCount()));
 171  
 172        $view->addItem($item);
 173      }
 174  
 175      return $view;
 176    }
 177  
 178  }


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