3 final class PhabricatorBadgesSearchEngine
4 extends PhabricatorApplicationSearchEngine
{
6 public function getResultTypeDescription() {
10 public function getApplicationClassName() {
11 return 'PhabricatorBadgesApplication';
14 public function newQuery() {
15 return new PhabricatorBadgesQuery();
18 protected function buildCustomSearchFields() {
20 id(new PhabricatorSearchTextField())
21 ->setLabel(pht('Name Contains'))
23 ->setDescription(pht('Search for badges by name substring.')),
24 id(new PhabricatorSearchCheckboxesField())
26 ->setLabel(pht('Quality'))
27 ->setEnableForConduit(false)
28 ->setOptions(PhabricatorBadgesQuality
::getDropdownQualityMap()),
29 id(new PhabricatorSearchCheckboxesField())
31 ->setLabel(pht('Status'))
33 id(new PhabricatorBadgesBadge())
34 ->getStatusNameMap()),
38 protected function buildQueryFromParameters(array $map) {
39 $query = $this->newQuery();
41 if ($map['statuses']) {
42 $query->withStatuses($map['statuses']);
45 if ($map['qualities']) {
46 $query->withQualities($map['qualities']);
49 if ($map['name'] !== null) {
50 $query->withNameNgrams($map['name']);
56 protected function getURI($path) {
57 return '/badges/'.$path;
60 protected function getBuiltinQueryNames() {
63 $names['open'] = pht('Active Badges');
64 $names['all'] = pht('All Badges');
69 public function buildSavedQueryFromBuiltin($query_key) {
70 $query = $this->newSavedQuery();
71 $query->setQueryKey($query_key);
77 return $query->setParameter(
80 PhabricatorBadgesBadge
::STATUS_ACTIVE
,
84 return parent
::buildSavedQueryFromBuiltin($query_key);
87 protected function getRequiredHandlePHIDsForResultList(
89 PhabricatorSavedQuery
$query) {
96 protected function renderResultList(
98 PhabricatorSavedQuery
$query,
100 assert_instances_of($badges, 'PhabricatorBadgesBadge');
102 $viewer = $this->requireViewer();
104 $list = id(new PHUIObjectItemListView());
105 foreach ($badges as $badge) {
106 $quality_name = PhabricatorBadgesQuality
::getQualityName(
107 $badge->getQuality());
109 $mini_badge = id(new PHUIBadgeMiniView())
110 ->setHeader($badge->getName())
111 ->setIcon($badge->getIcon())
112 ->setQuality($badge->getQuality());
114 $item = id(new PHUIObjectItemView())
115 ->setHeader($badge->getName())
116 ->setBadge($mini_badge)
117 ->setHref('/badges/view/'.$badge->getID().'/')
118 ->addAttribute($quality_name)
119 ->addAttribute($badge->getFlavor());
121 if ($badge->isArchived()) {
122 $item->setDisabled(true);
123 $item->addIcon('fa-ban', pht('Archived'));
126 $list->addItem($item);
129 $result = new PhabricatorApplicationSearchResultView();
130 $result->setObjectList($list);
131 $result->setNoDataString(pht('No badges found.'));
137 protected function getNewUserBody() {
138 $create_button = id(new PHUIButtonView())
140 ->setText(pht('Create a Badge'))
141 ->setHref('/badges/create/')
142 ->setColor(PHUIButtonView
::GREEN
);
144 $icon = $this->getApplication()->getIcon();
145 $app_name = $this->getApplication()->getName();
146 $view = id(new PHUIBigInfoView())
148 ->setTitle(pht('Welcome to %s', $app_name))
150 pht('Badges let you award and distinguish special users '.
151 'throughout your install.'))
152 ->addAction($create_button);