[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/legalpad/query/ -> LegalpadDocumentSearchEngine.php (source)

   1  <?php
   2  
   3  final class LegalpadDocumentSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Legalpad Documents');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorLegalpadApplication';
  12    }
  13  
  14    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  15      $saved = new PhabricatorSavedQuery();
  16      $saved->setParameter(
  17        'creatorPHIDs',
  18        $this->readUsersFromRequest($request, 'creators'));
  19  
  20      $saved->setParameter(
  21        'contributorPHIDs',
  22        $this->readUsersFromRequest($request, 'contributors'));
  23  
  24      $saved->setParameter(
  25        'withViewerSignature',
  26        $request->getBool('withViewerSignature'));
  27  
  28      $saved->setParameter('createdStart', $request->getStr('createdStart'));
  29      $saved->setParameter('createdEnd', $request->getStr('createdEnd'));
  30  
  31      return $saved;
  32    }
  33  
  34    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  35      $query = id(new LegalpadDocumentQuery())
  36        ->needViewerSignatures(true);
  37  
  38      $creator_phids = $saved->getParameter('creatorPHIDs', array());
  39      if ($creator_phids) {
  40        $query->withCreatorPHIDs($creator_phids);
  41      }
  42  
  43      $contributor_phids = $saved->getParameter('contributorPHIDs', array());
  44      if ($contributor_phids) {
  45        $query->withContributorPHIDs($contributor_phids);
  46      }
  47  
  48      if ($saved->getParameter('withViewerSignature')) {
  49        $viewer_phid = $this->requireViewer()->getPHID();
  50        if ($viewer_phid) {
  51          $query->withSignerPHIDs(array($viewer_phid));
  52        }
  53      }
  54  
  55      $start = $this->parseDateTime($saved->getParameter('createdStart'));
  56      $end = $this->parseDateTime($saved->getParameter('createdEnd'));
  57  
  58      if ($start) {
  59        $query->withDateCreatedAfter($start);
  60      }
  61  
  62      if ($end) {
  63        $query->withDateCreatedBefore($end);
  64      }
  65  
  66      return $query;
  67    }
  68  
  69    public function buildSearchForm(
  70      AphrontFormView $form,
  71      PhabricatorSavedQuery $saved_query) {
  72  
  73      $creator_phids = $saved_query->getParameter('creatorPHIDs', array());
  74      $contributor_phids = $saved_query->getParameter(
  75        'contributorPHIDs', array());
  76      $phids = array_merge($creator_phids, $contributor_phids);
  77      $handles = id(new PhabricatorHandleQuery())
  78        ->setViewer($this->requireViewer())
  79        ->withPHIDs($phids)
  80        ->execute();
  81  
  82      $viewer_signature = $saved_query->getParameter('withViewerSignature');
  83      if (!$this->requireViewer()->getPHID()) {
  84        $viewer_signature = false;
  85      }
  86  
  87      $form
  88        ->appendChild(
  89          id(new AphrontFormCheckboxControl())
  90            ->addCheckbox(
  91              'withViewerSignature',
  92              1,
  93              pht('Show only documents I have signed.'),
  94              $viewer_signature)
  95            ->setDisabled(!$this->requireViewer()->getPHID()))
  96        ->appendChild(
  97          id(new AphrontFormTokenizerControl())
  98            ->setDatasource(new PhabricatorPeopleDatasource())
  99            ->setName('creators')
 100            ->setLabel(pht('Creators'))
 101            ->setValue(array_select_keys($handles, $creator_phids)))
 102        ->appendChild(
 103          id(new AphrontFormTokenizerControl())
 104            ->setDatasource(new PhabricatorPeopleDatasource())
 105            ->setName('contributors')
 106            ->setLabel(pht('Contributors'))
 107            ->setValue(array_select_keys($handles, $contributor_phids)));
 108  
 109      $this->buildDateRange(
 110        $form,
 111        $saved_query,
 112        'createdStart',
 113        pht('Created After'),
 114        'createdEnd',
 115        pht('Created Before'));
 116  
 117    }
 118  
 119    protected function getURI($path) {
 120      return '/legalpad/'.$path;
 121    }
 122  
 123    public function getBuiltinQueryNames() {
 124      $names = array();
 125  
 126      if ($this->requireViewer()->isLoggedIn()) {
 127        $names['signed'] = pht('Signed Documents');
 128      }
 129  
 130      $names['all'] = pht('All Documents');
 131  
 132      return $names;
 133    }
 134  
 135    public function buildSavedQueryFromBuiltin($query_key) {
 136      $query = $this->newSavedQuery();
 137      $query->setQueryKey($query_key);
 138  
 139      switch ($query_key) {
 140        case 'signed':
 141          return $query
 142            ->setParameter('withViewerSignature', true);
 143        case 'all':
 144          return $query;
 145      }
 146  
 147      return parent::buildSavedQueryFromBuiltin($query_key);
 148    }
 149  
 150    protected function getRequiredHandlePHIDsForResultList(
 151      array $documents,
 152      PhabricatorSavedQuery $query) {
 153      return array();
 154    }
 155  
 156    protected function renderResultList(
 157      array $documents,
 158      PhabricatorSavedQuery $query,
 159      array $handles) {
 160      assert_instances_of($documents, 'LegalpadDocument');
 161  
 162      $viewer = $this->requireViewer();
 163  
 164      $list = new PHUIObjectItemListView();
 165      $list->setUser($viewer);
 166      foreach ($documents as $document) {
 167        $last_updated = phabricator_date($document->getDateModified(), $viewer);
 168  
 169        $title = $document->getTitle();
 170  
 171        $type_name = $document->getSignatureTypeName();
 172        $type_icon = $document->getSignatureTypeIcon();
 173  
 174        $item = id(new PHUIObjectItemView())
 175          ->setObjectName($document->getMonogram())
 176          ->setHeader($title)
 177          ->setHref('/'.$document->getMonogram())
 178          ->setObject($document)
 179          ->addIcon($type_icon, $type_name)
 180          ->addIcon(
 181            'fa-pencil grey',
 182            pht('Version %d (%s)', $document->getVersions(), $last_updated));
 183  
 184        if ($viewer->getPHID()) {
 185          $signature = $document->getUserSignature($viewer->getPHID());
 186        } else {
 187          $signature = null;
 188        }
 189  
 190        if ($signature) {
 191          $item->addAttribute(
 192            array(
 193              id(new PHUIIconView())->setIconFont('fa-check-square-o', 'green'),
 194              ' ',
 195              pht(
 196                'Signed on %s',
 197                phabricator_date($signature->getDateCreated(), $viewer)),
 198            ));
 199        } else {
 200          $item->addAttribute(
 201            array(
 202              id(new PHUIIconView())->setIconFont('fa-square-o', 'grey'),
 203              ' ',
 204              pht('Not Signed'),
 205            ));
 206        }
 207  
 208        $list->addItem($item);
 209      }
 210  
 211      return $list;
 212    }
 213  
 214  }


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