[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/macro/query/ -> PhabricatorMacroSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorMacroSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Macros');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorMacroApplication';
  12    }
  13  
  14    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  15      $saved = new PhabricatorSavedQuery();
  16      $saved->setParameter(
  17        'authorPHIDs',
  18        $this->readUsersFromRequest($request, 'authors'));
  19  
  20      $saved->setParameter('status', $request->getStr('status'));
  21      $saved->setParameter('names', $request->getStrList('names'));
  22      $saved->setParameter('nameLike', $request->getStr('nameLike'));
  23      $saved->setParameter('createdStart', $request->getStr('createdStart'));
  24      $saved->setParameter('createdEnd', $request->getStr('createdEnd'));
  25      $saved->setParameter('flagColor', $request->getStr('flagColor', '-1'));
  26  
  27      return $saved;
  28    }
  29  
  30    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  31      $query = id(new PhabricatorMacroQuery())
  32        ->needFiles(true)
  33        ->withIDs($saved->getParameter('ids', array()))
  34        ->withPHIDs($saved->getParameter('phids', array()))
  35        ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array()));
  36  
  37      $status = $saved->getParameter('status');
  38      $options = PhabricatorMacroQuery::getStatusOptions();
  39      if (empty($options[$status])) {
  40        $status = head_key($options);
  41      }
  42      $query->withStatus($status);
  43  
  44      $names = $saved->getParameter('names', array());
  45      if ($names) {
  46        $query->withNames($names);
  47      }
  48  
  49      $like = $saved->getParameter('nameLike');
  50      if (strlen($like)) {
  51        $query->withNameLike($like);
  52      }
  53  
  54      $start = $this->parseDateTime($saved->getParameter('createdStart'));
  55      $end = $this->parseDateTime($saved->getParameter('createdEnd'));
  56  
  57      if ($start) {
  58        $query->withDateCreatedAfter($start);
  59      }
  60  
  61      if ($end) {
  62        $query->withDateCreatedBefore($end);
  63      }
  64  
  65      $color = $saved->getParameter('flagColor');
  66      if (strlen($color)) {
  67        $query->withFlagColor($color);
  68      }
  69  
  70      return $query;
  71    }
  72  
  73    public function buildSearchForm(
  74      AphrontFormView $form,
  75      PhabricatorSavedQuery $saved_query) {
  76  
  77      $phids = $saved_query->getParameter('authorPHIDs', array());
  78      $author_handles = id(new PhabricatorHandleQuery())
  79        ->setViewer($this->requireViewer())
  80        ->withPHIDs($phids)
  81        ->execute();
  82  
  83      $status = $saved_query->getParameter('status');
  84      $names = implode(', ', $saved_query->getParameter('names', array()));
  85      $like = $saved_query->getParameter('nameLike');
  86      $color = $saved_query->getParameter('flagColor', '-1');
  87  
  88      $form
  89        ->appendChild(
  90          id(new AphrontFormSelectControl())
  91            ->setName('status')
  92            ->setLabel(pht('Status'))
  93            ->setOptions(PhabricatorMacroQuery::getStatusOptions())
  94            ->setValue($status))
  95        ->appendChild(
  96          id(new AphrontFormTokenizerControl())
  97            ->setDatasource(new PhabricatorPeopleDatasource())
  98            ->setName('authors')
  99            ->setLabel(pht('Authors'))
 100            ->setValue($author_handles))
 101        ->appendChild(
 102          id(new AphrontFormTextControl())
 103            ->setName('nameLike')
 104            ->setLabel(pht('Name Contains'))
 105            ->setValue($like))
 106        ->appendChild(
 107          id(new AphrontFormTextControl())
 108            ->setName('names')
 109            ->setLabel(pht('Exact Names'))
 110            ->setValue($names))
 111        ->appendChild(
 112          id(new AphrontFormSelectControl())
 113            ->setName('flagColor')
 114            ->setLabel(pht('Marked with Flag'))
 115            ->setOptions(PhabricatorMacroQuery::getFlagColorsOptions())
 116            ->setValue($color));
 117  
 118      $this->buildDateRange(
 119        $form,
 120        $saved_query,
 121        'createdStart',
 122        pht('Created After'),
 123        'createdEnd',
 124        pht('Created Before'));
 125    }
 126  
 127    protected function getURI($path) {
 128      return '/macro/'.$path;
 129    }
 130  
 131    public function getBuiltinQueryNames() {
 132      $names = array(
 133        'active'  => pht('Active'),
 134        'all'     => pht('All'),
 135      );
 136  
 137      if ($this->requireViewer()->isLoggedIn()) {
 138        $names['authored'] = pht('Authored');
 139      }
 140  
 141      return $names;
 142    }
 143  
 144    public function buildSavedQueryFromBuiltin($query_key) {
 145      $query = $this->newSavedQuery();
 146      $query->setQueryKey($query_key);
 147  
 148      switch ($query_key) {
 149        case 'active':
 150          return $query;
 151        case 'all':
 152          return $query->setParameter(
 153            'status',
 154            PhabricatorMacroQuery::STATUS_ANY);
 155        case 'authored':
 156          return $query->setParameter(
 157            'authorPHIDs',
 158            array($this->requireViewer()->getPHID()));
 159      }
 160  
 161      return parent::buildSavedQueryFromBuiltin($query_key);
 162    }
 163  
 164    protected function getRequiredHandlePHIDsForResultList(
 165      array $macros,
 166      PhabricatorSavedQuery $query) {
 167      return mpull($macros, 'getAuthorPHID');
 168    }
 169  
 170    protected function renderResultList(
 171      array $macros,
 172      PhabricatorSavedQuery $query,
 173      array $handles) {
 174  
 175      assert_instances_of($macros, 'PhabricatorFileImageMacro');
 176      $viewer = $this->requireViewer();
 177  
 178      $pinboard = new PHUIPinboardView();
 179      foreach ($macros as $macro) {
 180        $file = $macro->getFile();
 181  
 182        $item = new PHUIPinboardItemView();
 183        if ($file) {
 184          $item->setImageURI($file->getThumb280x210URI());
 185          $item->setImageSize(280, 210);
 186        }
 187  
 188        if ($macro->getDateCreated()) {
 189          $datetime = phabricator_date($macro->getDateCreated(), $viewer);
 190          $item->appendChild(
 191            phutil_tag(
 192              'div',
 193              array(),
 194              pht('Created on %s', $datetime)));
 195        } else {
 196          // Very old macros don't have a creation date. Rendering something
 197          // keeps all the pins at the same height and avoids flow issues.
 198          $item->appendChild(
 199            phutil_tag(
 200              'div',
 201              array(),
 202              pht('Created in ages long past')));
 203        }
 204  
 205        if ($macro->getAuthorPHID()) {
 206          $author_handle = $handles[$macro->getAuthorPHID()];
 207          $item->appendChild(
 208            pht('Created by %s', $author_handle->renderLink()));
 209        }
 210  
 211        $item->setURI($this->getApplicationURI('/view/'.$macro->getID().'/'));
 212        $item->setDisabled($macro->getisDisabled());
 213        $item->setHeader($macro->getName());
 214  
 215        $pinboard->addItem($item);
 216      }
 217  
 218      return $pinboard;
 219    }
 220  
 221  }


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