Path: blob/master/src/applications/files/query/PhabricatorFileSearchEngine.php
12242 views
<?php12final class PhabricatorFileSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Files');7}89public function getApplicationClassName() {10return 'PhabricatorFilesApplication';11}1213public function canUseInPanelContext() {14return false;15}1617public function newQuery() {18$query = new PhabricatorFileQuery();19$query->withIsDeleted(false);20return $query;21}2223protected function buildCustomSearchFields() {24return array(25id(new PhabricatorUsersSearchField())26->setKey('authorPHIDs')27->setAliases(array('author', 'authors'))28->setLabel(pht('Authors')),29id(new PhabricatorSearchThreeStateField())30->setKey('explicit')31->setLabel(pht('Upload Source'))32->setOptions(33pht('(Show All)'),34pht('Show Only Manually Uploaded Files'),35pht('Hide Manually Uploaded Files')),36id(new PhabricatorSearchDateField())37->setKey('createdStart')38->setLabel(pht('Created After')),39id(new PhabricatorSearchDateField())40->setKey('createdEnd')41->setLabel(pht('Created Before')),42id(new PhabricatorSearchTextField())43->setLabel(pht('Name Contains'))44->setKey('name')45->setDescription(pht('Search for files by name substring.')),46);47}4849protected function getDefaultFieldOrder() {50return array(51'...',52'createdStart',53'createdEnd',54);55}5657protected function buildQueryFromParameters(array $map) {58$query = $this->newQuery();5960if ($map['authorPHIDs']) {61$query->withAuthorPHIDs($map['authorPHIDs']);62}6364if ($map['explicit'] !== null) {65$query->showOnlyExplicitUploads($map['explicit']);66}6768if ($map['createdStart']) {69$query->withDateCreatedAfter($map['createdStart']);70}7172if ($map['createdEnd']) {73$query->withDateCreatedBefore($map['createdEnd']);74}7576if ($map['name'] !== null) {77$query->withNameNgrams($map['name']);78}7980return $query;81}8283protected function getURI($path) {84return '/file/'.$path;85}8687protected function getBuiltinQueryNames() {88$names = array();8990if ($this->requireViewer()->isLoggedIn()) {91$names['authored'] = pht('Authored');92}9394$names += array(95'all' => pht('All'),96);9798return $names;99}100101public function buildSavedQueryFromBuiltin($query_key) {102$query = $this->newSavedQuery();103$query->setQueryKey($query_key);104105switch ($query_key) {106case 'all':107return $query;108case 'authored':109$author_phid = array($this->requireViewer()->getPHID());110return $query111->setParameter('authorPHIDs', $author_phid)112->setParameter('explicit', true);113}114115return parent::buildSavedQueryFromBuiltin($query_key);116}117118protected function getRequiredHandlePHIDsForResultList(119array $files,120PhabricatorSavedQuery $query) {121return mpull($files, 'getAuthorPHID');122}123124protected function renderResultList(125array $files,126PhabricatorSavedQuery $query,127array $handles) {128129assert_instances_of($files, 'PhabricatorFile');130131$request = $this->getRequest();132if ($request) {133$highlighted_ids = $request->getStrList('h');134} else {135$highlighted_ids = array();136}137138$viewer = $this->requireViewer();139140$highlighted_ids = array_fill_keys($highlighted_ids, true);141142$list_view = id(new PHUIObjectItemListView())143->setUser($viewer);144145foreach ($files as $file) {146$id = $file->getID();147$phid = $file->getPHID();148$name = $file->getName();149$file_uri = $this->getApplicationURI("/info/{$phid}/");150151$date_created = phabricator_date($file->getDateCreated(), $viewer);152$author_phid = $file->getAuthorPHID();153if ($author_phid) {154$author_link = $handles[$author_phid]->renderLink();155$uploaded = pht('Uploaded by %s on %s', $author_link, $date_created);156} else {157$uploaded = pht('Uploaded on %s', $date_created);158}159160$item = id(new PHUIObjectItemView())161->setObject($file)162->setObjectName("F{$id}")163->setHeader($name)164->setHref($file_uri)165->addAttribute($uploaded)166->addIcon('none', phutil_format_bytes($file->getByteSize()));167168$ttl = $file->getTTL();169if ($ttl !== null) {170$item->addIcon('blame', pht('Temporary'));171}172173if ($file->getIsPartial()) {174$item->addIcon('fa-exclamation-triangle orange', pht('Partial'));175}176177if (isset($highlighted_ids[$id])) {178$item->setEffect('highlighted');179}180181$list_view->addItem($item);182}183184$list_view->appendChild(id(new PhabricatorGlobalUploadTargetView())185->setUser($viewer));186187188$result = new PhabricatorApplicationSearchResultView();189$result->setContent($list_view);190191return $result;192}193194protected function getNewUserBody() {195$create_button = id(new PHUIButtonView())196->setTag('a')197->setText(pht('Upload a File'))198->setHref('/file/upload/')199->setColor(PHUIButtonView::GREEN);200201$icon = $this->getApplication()->getIcon();202$app_name = $this->getApplication()->getName();203$view = id(new PHUIBigInfoView())204->setIcon($icon)205->setTitle(pht('Welcome to %s', $app_name))206->setDescription(207pht('Just a place for files.'))208->addAction($create_button);209210return $view;211}212213}214215216