3 final class PholioMockSearchEngine
extends PhabricatorApplicationSearchEngine
{
5 public function getResultTypeDescription() {
6 return pht('Pholio Mocks');
9 public function getApplicationClassName() {
10 return 'PhabricatorPholioApplication';
13 public function newQuery() {
14 return id(new PholioMockQuery())
15 ->needCoverFiles(true)
17 ->needTokenCounts(true);
20 protected function buildCustomSearchFields() {
22 id(new PhabricatorUsersSearchField())
23 ->setKey('authorPHIDs')
24 ->setAliases(array('authors'))
25 ->setLabel(pht('Authors')),
26 id(new PhabricatorSearchCheckboxesField())
28 ->setLabel(pht('Status'))
35 protected function buildQueryFromParameters(array $map) {
36 $query = $this->newQuery();
38 if ($map['authorPHIDs']) {
39 $query->withAuthorPHIDs($map['authorPHIDs']);
42 if ($map['statuses']) {
43 $query->withStatuses($map['statuses']);
49 protected function getURI($path) {
50 return '/pholio/'.$path;
53 protected function getBuiltinQueryNames() {
55 'open' => pht('Open Mocks'),
56 'all' => pht('All Mocks'),
59 if ($this->requireViewer()->isLoggedIn()) {
60 $names['authored'] = pht('Authored');
66 public function buildSavedQueryFromBuiltin($query_key) {
67 $query = $this->newSavedQuery();
68 $query->setQueryKey($query_key);
72 return $query->setParameter(
78 return $query->setParameter(
80 array($this->requireViewer()->getPHID()));
83 return parent
::buildSavedQueryFromBuiltin($query_key);
86 protected function renderResultList(
88 PhabricatorSavedQuery
$query,
90 assert_instances_of($mocks, 'PholioMock');
92 $viewer = $this->requireViewer();
93 $handles = $viewer->loadHandles(mpull($mocks, 'getAuthorPHID'));
95 $xform = PhabricatorFileTransform
::getTransformByKey(
96 PhabricatorFileThumbnailTransform
::TRANSFORM_PINBOARD
);
98 $board = new PHUIPinboardView();
99 foreach ($mocks as $mock) {
101 $image = $mock->getCoverFile();
102 $image_uri = $image->getURIForTransform($xform);
103 list($x, $y) = $xform->getTransformedDimensions($image);
105 $header = 'M'.$mock->getID().' '.$mock->getName();
106 $item = id(new PHUIPinboardItemView())
110 ->setURI('/M'.$mock->getID())
111 ->setImageURI($image_uri)
112 ->setImageSize($x, $y)
113 ->setDisabled($mock->isClosed())
114 ->addIconCount('fa-picture-o', count($mock->getActiveImages()))
115 ->addIconCount('fa-trophy', $mock->getTokenCount());
117 if ($mock->getAuthorPHID()) {
118 $author_handle = $handles[$mock->getAuthorPHID()];
119 $datetime = phabricator_date($mock->getDateCreated(), $viewer);
121 pht('By %s on %s', $author_handle->renderLink(), $datetime));
124 $board->addItem($item);
127 $result = new PhabricatorApplicationSearchResultView();
128 $result->setContent($board);
133 protected function getNewUserBody() {
134 $create_button = id(new PHUIButtonView())
136 ->setText(pht('Create a Mock'))
137 ->setHref('/pholio/create/')
138 ->setColor(PHUIButtonView
::GREEN
);
140 $icon = $this->getApplication()->getIcon();
141 $app_name = $this->getApplication()->getName();
142 $view = id(new PHUIBigInfoView())
144 ->setTitle(pht('Welcome to %s', $app_name))
146 pht('Upload sets of images for review with revision history and '.
148 ->addAction($create_button);