[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phriction/query/ -> PhrictionSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhrictionSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Wiki Documents');
   8    }
   9  
  10    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  11      $saved = new PhabricatorSavedQuery();
  12  
  13      $saved->setParameter('status', $request->getArr('status'));
  14      $saved->setParameter('order', $request->getArr('order'));
  15  
  16      return $saved;
  17    }
  18  
  19    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  20      $query = id(new PhrictionDocumentQuery())
  21        ->needContent(true)
  22        ->withStatus(PhrictionDocumentQuery::STATUS_NONSTUB);
  23  
  24      $status = $saved->getParameter('status');
  25      $status = idx($this->getStatusValues(), $status);
  26      if ($status) {
  27        $query->withStatus($status);
  28      }
  29  
  30      $order = $saved->getParameter('order');
  31      $order = idx($this->getOrderValues(), $order);
  32      if ($order) {
  33        $query->setOrder($order);
  34      }
  35  
  36      return $query;
  37    }
  38  
  39    public function buildSearchForm(
  40      AphrontFormView $form,
  41      PhabricatorSavedQuery $saved_query) {
  42  
  43      $form
  44        ->appendChild(
  45          id(new AphrontFormSelectControl())
  46            ->setLabel(pht('Status'))
  47            ->setName('status')
  48            ->setOptions($this->getStatusOptions())
  49            ->setValue($saved_query->getParameter('status')))
  50        ->appendChild(
  51          id(new AphrontFormSelectControl())
  52            ->setLabel(pht('Order'))
  53            ->setName('order')
  54            ->setOptions($this->getOrderOptions())
  55            ->setValue($saved_query->getParameter('order')));
  56    }
  57  
  58    protected function getURI($path) {
  59      return '/phriction/'.$path;
  60    }
  61  
  62    public function getBuiltinQueryNames() {
  63      $names = array(
  64        'active' => pht('Active'),
  65        'updated' => pht('Updated'),
  66        'all' => pht('All'),
  67      );
  68  
  69      return $names;
  70    }
  71  
  72    public function buildSavedQueryFromBuiltin($query_key) {
  73  
  74      $query = $this->newSavedQuery();
  75      $query->setQueryKey($query_key);
  76  
  77      switch ($query_key) {
  78        case 'active':
  79          return $query->setParameter('status', 'active');
  80        case 'all':
  81          return $query;
  82        case 'updated':
  83          return $query->setParameter('order', 'updated');
  84      }
  85  
  86      return parent::buildSavedQueryFromBuiltin($query_key);
  87    }
  88  
  89    private function getStatusOptions() {
  90      return array(
  91        'active' => pht('Show Active Documents'),
  92        'all' => pht('Show All Documents'),
  93      );
  94    }
  95  
  96    private function getStatusValues() {
  97      return array(
  98        'active' => PhrictionDocumentQuery::STATUS_OPEN,
  99        'all' => PhrictionDocumentQuery::STATUS_NONSTUB,
 100      );
 101    }
 102  
 103    private function getOrderOptions() {
 104      return array(
 105        'created' => pht('Date Created'),
 106        'updated' => pht('Date Updated'),
 107      );
 108    }
 109  
 110    private function getOrderValues() {
 111      return array(
 112        'created' => PhrictionDocumentQuery::ORDER_CREATED,
 113        'updated' => PhrictionDocumentQuery::ORDER_UPDATED,
 114      );
 115    }
 116  
 117    protected function getRequiredHandlePHIDsForResultList(
 118      array $documents,
 119      PhabricatorSavedQuery $query) {
 120  
 121      $phids = array();
 122      foreach ($documents as $document) {
 123        $content = $document->getContent();
 124        $phids[] = $content->getAuthorPHID();
 125      }
 126  
 127      return $phids;
 128    }
 129  
 130  
 131    protected function renderResultList(
 132      array $documents,
 133      PhabricatorSavedQuery $query,
 134      array $handles) {
 135      assert_instances_of($documents, 'PhrictionDocument');
 136  
 137      $viewer = $this->requireViewer();
 138  
 139      $list = new PHUIObjectItemListView();
 140      $list->setUser($viewer);
 141      foreach ($documents as $document) {
 142        $content = $document->getContent();
 143        $slug = $document->getSlug();
 144        $author_phid = $content->getAuthorPHID();
 145        $slug_uri = PhrictionDocument::getSlugURI($slug);
 146  
 147        $byline = pht(
 148          'Edited by %s',
 149          $handles[$author_phid]->renderLink());
 150  
 151        $updated = phabricator_datetime(
 152          $content->getDateCreated(),
 153          $viewer);
 154  
 155        $item = id(new PHUIObjectItemView())
 156          ->setHeader($content->getTitle())
 157          ->setHref($slug_uri)
 158          ->addByline($byline)
 159          ->addIcon('none', $updated);
 160  
 161        $item->addAttribute($slug_uri);
 162  
 163        switch ($document->getStatus()) {
 164          case PhrictionDocumentStatus::STATUS_DELETED:
 165            $item->setDisabled(true);
 166            $item->addIcon('delete', pht('Deleted'));
 167            break;
 168          case PhrictionDocumentStatus::STATUS_MOVED:
 169            $item->setDisabled(true);
 170            $item->addIcon('arrow-right', pht('Moved Away'));
 171            break;
 172        }
 173  
 174        $list->addItem($item);
 175      }
 176  
 177      return $list;
 178    }
 179  
 180  }


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