Path: blob/master/src/applications/flag/query/PhabricatorFlagSearchEngine.php
12256 views
<?php12final class PhabricatorFlagSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Flags');7}89public function getApplicationClassName() {10return 'PhabricatorFlagsApplication';11}1213public function buildSavedQueryFromRequest(AphrontRequest $request) {14$saved = new PhabricatorSavedQuery();15$saved->setParameter('colors', $request->getArr('colors'));16$saved->setParameter('group', $request->getStr('group'));17$saved->setParameter('objectFilter', $request->getStr('objectFilter'));18return $saved;19}2021public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {22$query = id(new PhabricatorFlagQuery())23->needHandles(true)24->withOwnerPHIDs(array($this->requireViewer()->getPHID()));2526$colors = $saved->getParameter('colors');27if ($colors) {28$query->withColors($colors);29}30$group = $saved->getParameter('group');31$options = $this->getGroupOptions();32if ($group && isset($options[$group])) {33$query->setGroupBy($group);34}3536$object_filter = $saved->getParameter('objectFilter');37$objects = $this->getObjectFilterOptions();38if ($object_filter && isset($objects[$object_filter])) {39$query->withTypes(array($object_filter));40}4142return $query;43}4445public function buildSearchForm(46AphrontFormView $form,47PhabricatorSavedQuery $saved_query) {4849$form50->appendChild(51id(new PhabricatorFlagSelectControl())52->setName('colors')53->setLabel(pht('Colors'))54->setValue($saved_query->getParameter('colors', array())))55->appendChild(56id(new AphrontFormSelectControl())57->setName('group')58->setLabel(pht('Group By'))59->setValue($saved_query->getParameter('group'))60->setOptions($this->getGroupOptions()))61->appendChild(62id(new AphrontFormSelectControl())63->setName('objectFilter')64->setLabel(pht('Object Type'))65->setValue($saved_query->getParameter('objectFilter'))66->setOptions($this->getObjectFilterOptions()));67}6869protected function getURI($path) {70return '/flag/'.$path;71}7273protected function getBuiltinQueryNames() {74$names = array(75'all' => pht('Flagged'),76);7778return $names;79}8081public function buildSavedQueryFromBuiltin($query_key) {8283$query = $this->newSavedQuery();84$query->setQueryKey($query_key);8586switch ($query_key) {87case 'all':88return $query;89}9091return parent::buildSavedQueryFromBuiltin($query_key);92}9394private function getGroupOptions() {95return array(96PhabricatorFlagQuery::GROUP_NONE => pht('None'),97PhabricatorFlagQuery::GROUP_COLOR => pht('Color'),98);99}100101private function getObjectFilterOptions() {102$objects = id(new PhutilClassMapQuery())103->setAncestorClass('PhabricatorFlaggableInterface')104->execute();105106$all_types = PhabricatorPHIDType::getAllTypes();107$options = array();108109foreach ($objects as $object) {110$phid = $object->generatePHID();111$phid_type = phid_get_type($phid);112$type_object = idx($all_types, $phid_type);113if ($type_object) {114$options[$phid_type] = $type_object->getTypeName();115}116}117// sort it alphabetically...118asort($options);119$default_option = array(1200 => pht('All Object Types'),121);122// ...and stick the default option on front123$options = array_merge($default_option, $options);124125return $options;126}127128protected function renderResultList(129array $flags,130PhabricatorSavedQuery $query,131array $handles) {132assert_instances_of($flags, 'PhabricatorFlag');133134$viewer = $this->requireViewer();135136$list = id(new PHUIObjectItemListView())137->setUser($viewer);138foreach ($flags as $flag) {139$id = $flag->getID();140$phid = $flag->getObjectPHID();141142$class = PhabricatorFlagColor::getCSSClass($flag->getColor());143144$flag_icon = phutil_tag(145'div',146array(147'class' => 'phabricator-flag-icon '.$class,148),149'');150151$item = id(new PHUIObjectItemView())152->addHeadIcon($flag_icon)153->setHeader($flag->getHandle()->getFullName())154->setHref($flag->getHandle()->getURI());155156$status_open = PhabricatorObjectHandle::STATUS_OPEN;157if ($flag->getHandle()->getStatus() != $status_open) {158$item->setDisabled(true);159}160161$item->addAction(162id(new PHUIListItemView())163->setIcon('fa-pencil')164->setHref($this->getApplicationURI("edit/{$phid}/"))165->setWorkflow(true));166167$item->addAction(168id(new PHUIListItemView())169->setIcon('fa-times')170->setHref($this->getApplicationURI("delete/{$id}/"))171->setWorkflow(true));172173if ($flag->getNote()) {174$item->addAttribute($flag->getNote());175}176177$item->addIcon(178'none',179phabricator_datetime($flag->getDateCreated(), $viewer));180181$list->addItem($item);182}183184$result = new PhabricatorApplicationSearchResultView();185$result->setObjectList($list);186$result->setNoDataString(pht('No flags found.'));187188return $result;189190}191192193}194195196