Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / flag / query / PhabricatorFlagSearchEngine.php
bloba433e4241c00f88cc1cff3153ae52d8c591dd5ea
1 <?php
3 final class PhabricatorFlagSearchEngine
4 extends PhabricatorApplicationSearchEngine {
6 public function getResultTypeDescription() {
7 return pht('Flags');
10 public function getApplicationClassName() {
11 return 'PhabricatorFlagsApplication';
14 public function buildSavedQueryFromRequest(AphrontRequest $request) {
15 $saved = new PhabricatorSavedQuery();
16 $saved->setParameter('colors', $request->getArr('colors'));
17 $saved->setParameter('group', $request->getStr('group'));
18 $saved->setParameter('objectFilter', $request->getStr('objectFilter'));
19 return $saved;
22 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
23 $query = id(new PhabricatorFlagQuery())
24 ->needHandles(true)
25 ->withOwnerPHIDs(array($this->requireViewer()->getPHID()));
27 $colors = $saved->getParameter('colors');
28 if ($colors) {
29 $query->withColors($colors);
31 $group = $saved->getParameter('group');
32 $options = $this->getGroupOptions();
33 if ($group && isset($options[$group])) {
34 $query->setGroupBy($group);
37 $object_filter = $saved->getParameter('objectFilter');
38 $objects = $this->getObjectFilterOptions();
39 if ($object_filter && isset($objects[$object_filter])) {
40 $query->withTypes(array($object_filter));
43 return $query;
46 public function buildSearchForm(
47 AphrontFormView $form,
48 PhabricatorSavedQuery $saved_query) {
50 $form
51 ->appendChild(
52 id(new PhabricatorFlagSelectControl())
53 ->setName('colors')
54 ->setLabel(pht('Colors'))
55 ->setValue($saved_query->getParameter('colors', array())))
56 ->appendChild(
57 id(new AphrontFormSelectControl())
58 ->setName('group')
59 ->setLabel(pht('Group By'))
60 ->setValue($saved_query->getParameter('group'))
61 ->setOptions($this->getGroupOptions()))
62 ->appendChild(
63 id(new AphrontFormSelectControl())
64 ->setName('objectFilter')
65 ->setLabel(pht('Object Type'))
66 ->setValue($saved_query->getParameter('objectFilter'))
67 ->setOptions($this->getObjectFilterOptions()));
70 protected function getURI($path) {
71 return '/flag/'.$path;
74 protected function getBuiltinQueryNames() {
75 $names = array(
76 'all' => pht('Flagged'),
79 return $names;
82 public function buildSavedQueryFromBuiltin($query_key) {
84 $query = $this->newSavedQuery();
85 $query->setQueryKey($query_key);
87 switch ($query_key) {
88 case 'all':
89 return $query;
92 return parent::buildSavedQueryFromBuiltin($query_key);
95 private function getGroupOptions() {
96 return array(
97 PhabricatorFlagQuery::GROUP_NONE => pht('None'),
98 PhabricatorFlagQuery::GROUP_COLOR => pht('Color'),
102 private function getObjectFilterOptions() {
103 $objects = id(new PhutilClassMapQuery())
104 ->setAncestorClass('PhabricatorFlaggableInterface')
105 ->execute();
107 $all_types = PhabricatorPHIDType::getAllTypes();
108 $options = array();
110 foreach ($objects as $object) {
111 $phid = $object->generatePHID();
112 $phid_type = phid_get_type($phid);
113 $type_object = idx($all_types, $phid_type);
114 if ($type_object) {
115 $options[$phid_type] = $type_object->getTypeName();
118 // sort it alphabetically...
119 asort($options);
120 $default_option = array(
121 0 => pht('All Object Types'),
123 // ...and stick the default option on front
124 $options = array_merge($default_option, $options);
126 return $options;
129 protected function renderResultList(
130 array $flags,
131 PhabricatorSavedQuery $query,
132 array $handles) {
133 assert_instances_of($flags, 'PhabricatorFlag');
135 $viewer = $this->requireViewer();
137 $list = id(new PHUIObjectItemListView())
138 ->setUser($viewer);
139 foreach ($flags as $flag) {
140 $id = $flag->getID();
141 $phid = $flag->getObjectPHID();
143 $class = PhabricatorFlagColor::getCSSClass($flag->getColor());
145 $flag_icon = phutil_tag(
146 'div',
147 array(
148 'class' => 'phabricator-flag-icon '.$class,
150 '');
152 $item = id(new PHUIObjectItemView())
153 ->addHeadIcon($flag_icon)
154 ->setHeader($flag->getHandle()->getFullName())
155 ->setHref($flag->getHandle()->getURI());
157 $status_open = PhabricatorObjectHandle::STATUS_OPEN;
158 if ($flag->getHandle()->getStatus() != $status_open) {
159 $item->setDisabled(true);
162 $item->addAction(
163 id(new PHUIListItemView())
164 ->setIcon('fa-pencil')
165 ->setHref($this->getApplicationURI("edit/{$phid}/"))
166 ->setWorkflow(true));
168 $item->addAction(
169 id(new PHUIListItemView())
170 ->setIcon('fa-times')
171 ->setHref($this->getApplicationURI("delete/{$id}/"))
172 ->setWorkflow(true));
174 if ($flag->getNote()) {
175 $item->addAttribute($flag->getNote());
178 $item->addIcon(
179 'none',
180 phabricator_datetime($flag->getDateCreated(), $viewer));
182 $list->addItem($item);
185 $result = new PhabricatorApplicationSearchResultView();
186 $result->setObjectList($list);
187 $result->setNoDataString(pht('No flags found.'));
189 return $result;