[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/paste/query/ -> PhabricatorPasteSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorPasteSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Pastes');
   8    }
   9  
  10    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  11      $saved = new PhabricatorSavedQuery();
  12      $saved->setParameter(
  13        'authorPHIDs',
  14        $this->readUsersFromRequest($request, 'authors'));
  15  
  16      $languages = $request->getStrList('languages');
  17      if ($request->getBool('noLanguage')) {
  18        $languages[] = null;
  19      }
  20      $saved->setParameter('languages', $languages);
  21  
  22      $saved->setParameter('createdStart', $request->getStr('createdStart'));
  23      $saved->setParameter('createdEnd', $request->getStr('createdEnd'));
  24  
  25      return $saved;
  26    }
  27  
  28    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  29      $query = id(new PhabricatorPasteQuery())
  30        ->needContent(true)
  31        ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array()))
  32        ->withLanguages($saved->getParameter('languages', array()));
  33  
  34      $start = $this->parseDateTime($saved->getParameter('createdStart'));
  35      $end = $this->parseDateTime($saved->getParameter('createdEnd'));
  36  
  37      if ($start) {
  38        $query->withDateCreatedAfter($start);
  39      }
  40  
  41      if ($end) {
  42        $query->withDateCreatedBefore($end);
  43      }
  44  
  45      return $query;
  46    }
  47  
  48    public function buildSearchForm(
  49      AphrontFormView $form,
  50      PhabricatorSavedQuery $saved_query) {
  51      $phids = $saved_query->getParameter('authorPHIDs', array());
  52      $author_handles = id(new PhabricatorHandleQuery())
  53        ->setViewer($this->requireViewer())
  54        ->withPHIDs($phids)
  55        ->execute();
  56  
  57      $languages = $saved_query->getParameter('languages', array());
  58      $no_language = false;
  59      foreach ($languages as $key => $language) {
  60        if ($language === null) {
  61          $no_language = true;
  62          unset($languages[$key]);
  63          continue;
  64        }
  65      }
  66  
  67      $form
  68        ->appendChild(
  69          id(new AphrontFormTokenizerControl())
  70            ->setDatasource(new PhabricatorPeopleDatasource())
  71            ->setName('authors')
  72            ->setLabel(pht('Authors'))
  73            ->setValue($author_handles))
  74        ->appendChild(
  75          id(new AphrontFormTextControl())
  76            ->setName('languages')
  77            ->setLabel(pht('Languages'))
  78            ->setValue(implode(', ', $languages)))
  79        ->appendChild(
  80          id(new AphrontFormCheckboxControl())
  81            ->addCheckbox(
  82              'noLanguage',
  83              1,
  84              pht('Find Pastes with no specified language.'),
  85              $no_language));
  86  
  87      $this->buildDateRange(
  88        $form,
  89        $saved_query,
  90        'createdStart',
  91        pht('Created After'),
  92        'createdEnd',
  93        pht('Created Before'));
  94  
  95    }
  96  
  97    protected function getURI($path) {
  98      return '/paste/'.$path;
  99    }
 100  
 101    public function getBuiltinQueryNames() {
 102      $names = array(
 103        'all' => pht('All Pastes'),
 104      );
 105  
 106      if ($this->requireViewer()->isLoggedIn()) {
 107        $names['authored'] = pht('Authored');
 108      }
 109  
 110      return $names;
 111    }
 112  
 113    public function buildSavedQueryFromBuiltin($query_key) {
 114  
 115      $query = $this->newSavedQuery();
 116      $query->setQueryKey($query_key);
 117  
 118      switch ($query_key) {
 119        case 'all':
 120          return $query;
 121        case 'authored':
 122          return $query->setParameter(
 123            'authorPHIDs',
 124            array($this->requireViewer()->getPHID()));
 125      }
 126  
 127      return parent::buildSavedQueryFromBuiltin($query_key);
 128    }
 129  
 130    protected function getRequiredHandlePHIDsForResultList(
 131      array $pastes,
 132      PhabricatorSavedQuery $query) {
 133      return mpull($pastes, 'getAuthorPHID');
 134    }
 135  
 136    protected function renderResultList(
 137      array $pastes,
 138      PhabricatorSavedQuery $query,
 139      array $handles) {
 140      assert_instances_of($pastes, 'PhabricatorPaste');
 141  
 142      $viewer = $this->requireViewer();
 143  
 144      $lang_map = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');
 145  
 146      $list = new PHUIObjectItemListView();
 147      $list->setUser($viewer);
 148      foreach ($pastes as $paste) {
 149        $created = phabricator_date($paste->getDateCreated(), $viewer);
 150        $author = $handles[$paste->getAuthorPHID()]->renderLink();
 151  
 152        $lines = phutil_split_lines($paste->getContent());
 153  
 154        $preview = id(new PhabricatorSourceCodeView())
 155          ->setLimit(5)
 156          ->setLines($lines)
 157          ->setURI(new PhutilURI($paste->getURI()));
 158  
 159        $source_code = phutil_tag(
 160          'div',
 161          array(
 162            'class' => 'phabricator-source-code-summary',
 163          ),
 164          $preview);
 165  
 166        $created = phabricator_datetime($paste->getDateCreated(), $viewer);
 167        $line_count = count($lines);
 168        $line_count = pht(
 169          '%s Line(s)',
 170          new PhutilNumber($line_count));
 171  
 172        $title = nonempty($paste->getTitle(), pht('(An Untitled Masterwork)'));
 173  
 174        $item = id(new PHUIObjectItemView())
 175          ->setObjectName('P'.$paste->getID())
 176          ->setHeader($title)
 177          ->setHref('/P'.$paste->getID())
 178          ->setObject($paste)
 179          ->addByline(pht('Author: %s', $author))
 180          ->addIcon('none', $created)
 181          ->addIcon('none', $line_count)
 182          ->appendChild($source_code);
 183  
 184        $lang_name = $paste->getLanguage();
 185        if ($lang_name) {
 186          $lang_name = idx($lang_map, $lang_name, $lang_name);
 187          $item->addIcon('none', $lang_name);
 188        }
 189  
 190        $list->addItem($item);
 191      }
 192  
 193      return $list;
 194    }
 195  }


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