3 final class PhabricatorFlagSearchEngine
4 extends PhabricatorApplicationSearchEngine
{
6 public function getResultTypeDescription() {
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'));
22 public function buildQueryFromSavedQuery(PhabricatorSavedQuery
$saved) {
23 $query = id(new PhabricatorFlagQuery())
25 ->withOwnerPHIDs(array($this->requireViewer()->getPHID()));
27 $colors = $saved->getParameter('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));
46 public function buildSearchForm(
47 AphrontFormView
$form,
48 PhabricatorSavedQuery
$saved_query) {
52 id(new PhabricatorFlagSelectControl())
54 ->setLabel(pht('Colors'))
55 ->setValue($saved_query->getParameter('colors', array())))
57 id(new AphrontFormSelectControl())
59 ->setLabel(pht('Group By'))
60 ->setValue($saved_query->getParameter('group'))
61 ->setOptions($this->getGroupOptions()))
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() {
76 'all' => pht('Flagged'),
82 public function buildSavedQueryFromBuiltin($query_key) {
84 $query = $this->newSavedQuery();
85 $query->setQueryKey($query_key);
92 return parent
::buildSavedQueryFromBuiltin($query_key);
95 private function getGroupOptions() {
97 PhabricatorFlagQuery
::GROUP_NONE
=> pht('None'),
98 PhabricatorFlagQuery
::GROUP_COLOR
=> pht('Color'),
102 private function getObjectFilterOptions() {
103 $objects = id(new PhutilClassMapQuery())
104 ->setAncestorClass('PhabricatorFlaggableInterface')
107 $all_types = PhabricatorPHIDType
::getAllTypes();
110 foreach ($objects as $object) {
111 $phid = $object->generatePHID();
112 $phid_type = phid_get_type($phid);
113 $type_object = idx($all_types, $phid_type);
115 $options[$phid_type] = $type_object->getTypeName();
118 // sort it alphabetically...
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);
129 protected function renderResultList(
131 PhabricatorSavedQuery
$query,
133 assert_instances_of($flags, 'PhabricatorFlag');
135 $viewer = $this->requireViewer();
137 $list = id(new PHUIObjectItemListView())
139 foreach ($flags as $flag) {
140 $id = $flag->getID();
141 $phid = $flag->getObjectPHID();
143 $class = PhabricatorFlagColor
::getCSSClass($flag->getColor());
145 $flag_icon = phutil_tag(
148 'class' => 'phabricator-flag-icon '.$class,
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);
163 id(new PHUIListItemView())
164 ->setIcon('fa-pencil')
165 ->setHref($this->getApplicationURI("edit/{$phid}/"))
166 ->setWorkflow(true));
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());
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.'));