Path: blob/master/src/applications/legalpad/query/LegalpadDocumentSearchEngine.php
13456 views
<?php12final class LegalpadDocumentSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Legalpad Documents');7}89public function getApplicationClassName() {10return 'PhabricatorLegalpadApplication';11}1213public function newQuery() {14return id(new LegalpadDocumentQuery())15->needViewerSignatures(true);16}1718protected function buildCustomSearchFields() {19return array(20id(new PhabricatorUsersSearchField())21->setLabel(pht('Signed By'))22->setKey('signerPHIDs')23->setAliases(array('signer', 'signers', 'signerPHID'))24->setDescription(25pht('Search for documents signed by given users.')),26id(new PhabricatorUsersSearchField())27->setLabel(pht('Creators'))28->setKey('creatorPHIDs')29->setAliases(array('creator', 'creators', 'creatorPHID'))30->setDescription(31pht('Search for documents with given creators.')),32id(new PhabricatorUsersSearchField())33->setLabel(pht('Contributors'))34->setKey('contributorPHIDs')35->setAliases(array('contributor', 'contributors', 'contributorPHID'))36->setDescription(37pht('Search for documents with given contributors.')),38id(new PhabricatorSearchDateField())39->setLabel(pht('Created After'))40->setKey('createdStart'),41id(new PhabricatorSearchDateField())42->setLabel(pht('Created Before'))43->setKey('createdEnd'),44);45}4647protected function buildQueryFromParameters(array $map) {48$query = $this->newQuery();4950if ($map['signerPHIDs']) {51$query->withSignerPHIDs($map['signerPHIDs']);52}5354if ($map['contributorPHIDs']) {55$query->withContributorPHIDs($map['contributorPHIDs']);56}5758if ($map['creatorPHIDs']) {59$query->withCreatorPHIDs($map['creatorPHIDs']);60}6162if ($map['createdStart']) {63$query->withDateCreatedAfter($map['createdStart']);64}6566if ($map['createdEnd']) {67$query->withDateCreatedAfter($map['createdStart']);68}6970return $query;71}7273protected function getURI($path) {74return '/legalpad/'.$path;75}7677protected function getBuiltinQueryNames() {78$names = array();7980if ($this->requireViewer()->isLoggedIn()) {81$names['signed'] = pht('Signed Documents');82}8384$names['all'] = pht('All Documents');8586return $names;87}8889public function buildSavedQueryFromBuiltin($query_key) {90$query = $this->newSavedQuery();91$query->setQueryKey($query_key);9293$viewer = $this->requireViewer();9495switch ($query_key) {96case 'signed':97return $query->setParameter('signerPHIDs', array($viewer->getPHID()));98case 'all':99return $query;100}101102return parent::buildSavedQueryFromBuiltin($query_key);103}104105protected function renderResultList(106array $documents,107PhabricatorSavedQuery $query,108array $handles) {109assert_instances_of($documents, 'LegalpadDocument');110111$viewer = $this->requireViewer();112113$list = new PHUIObjectItemListView();114$list->setUser($viewer);115foreach ($documents as $document) {116$last_updated = phabricator_date($document->getDateModified(), $viewer);117118$title = $document->getTitle();119120$item = id(new PHUIObjectItemView())121->setObjectName($document->getMonogram())122->setHeader($title)123->setHref('/'.$document->getMonogram())124->setObject($document);125126$no_signatures = LegalpadDocument::SIGNATURE_TYPE_NONE;127if ($document->getSignatureType() == $no_signatures) {128$item->addIcon('none', pht('Not Signable'));129} else {130131$type_name = $document->getSignatureTypeName();132$type_icon = $document->getSignatureTypeIcon();133$item->addIcon($type_icon, $type_name);134135if ($viewer->getPHID()) {136$signature = $document->getUserSignature($viewer->getPHID());137} else {138$signature = null;139}140141if ($signature) {142$item->addAttribute(143array(144id(new PHUIIconView())->setIcon('fa-check-square-o', 'green'),145' ',146pht(147'Signed on %s',148phabricator_date($signature->getDateCreated(), $viewer)),149));150} else {151$item->addAttribute(152array(153id(new PHUIIconView())->setIcon('fa-square-o', 'grey'),154' ',155pht('Not Signed'),156));157}158}159160$item->addIcon(161'fa-pencil grey',162pht('Version %d (%s)', $document->getVersions(), $last_updated));163164$list->addItem($item);165}166167$result = new PhabricatorApplicationSearchResultView();168$result->setObjectList($list);169$result->setNoDataString(pht('No documents found.'));170171return $result;172}173174protected function getNewUserBody() {175$create_button = id(new PHUIButtonView())176->setTag('a')177->setText(pht('Create a Document'))178->setHref('/legalpad/edit/')179->setColor(PHUIButtonView::GREEN);180181$icon = $this->getApplication()->getIcon();182$app_name = $this->getApplication()->getName();183$view = id(new PHUIBigInfoView())184->setIcon($icon)185->setTitle(pht('Welcome to %s', $app_name))186->setDescription(187pht('Create documents and track signatures.'))188->addAction($create_button);189190return $view;191}192193}194195196