@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 199 lines 5.4 kB view raw
1<?php 2 3final class PhabricatorFlagSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Flags'); 8 } 9 10 public function getApplicationClassName() { 11 return PhabricatorFlagsApplication::class; 12 } 13 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; 20 } 21 22 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 23 $query = id(new PhabricatorFlagQuery()) 24 ->needHandles(true) 25 ->withOwnerPHIDs(array($this->requireViewer()->getPHID())); 26 27 $colors = $saved->getParameter('colors'); 28 if ($colors) { 29 $query->withColors($colors); 30 } 31 $group = $saved->getParameter('group'); 32 $options = $this->getGroupOptions(); 33 if ($group && isset($options[$group])) { 34 $query->setGroupBy($group); 35 } 36 37 $object_filter = $saved->getParameter('objectFilter'); 38 $objects = $this->getObjectFilterOptions(); 39 if ($object_filter && isset($objects[$object_filter])) { 40 $query->withTypes(array($object_filter)); 41 } 42 43 return $query; 44 } 45 46 public function buildSearchForm( 47 AphrontFormView $form, 48 PhabricatorSavedQuery $saved_query) { 49 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())); 68 } 69 70 protected function getURI($path) { 71 return '/flag/'.$path; 72 } 73 74 protected function getBuiltinQueryNames() { 75 $names = array( 76 'all' => pht('Flagged'), 77 ); 78 79 return $names; 80 } 81 82 public function buildSavedQueryFromBuiltin($query_key) { 83 84 $query = $this->newSavedQuery(); 85 $query->setQueryKey($query_key); 86 87 switch ($query_key) { 88 case 'all': 89 return $query; 90 } 91 92 return parent::buildSavedQueryFromBuiltin($query_key); 93 } 94 95 private function getGroupOptions() { 96 return array( 97 PhabricatorFlagQuery::GROUP_NONE => pht('None'), 98 PhabricatorFlagQuery::GROUP_COLOR => pht('Color'), 99 ); 100 } 101 102 private function getObjectFilterOptions() { 103 $objects = id(new PhutilClassMapQuery()) 104 ->setAncestorClass(PhabricatorFlaggableInterface::class) 105 ->execute(); 106 107 $all_types = PhabricatorPHIDType::getAllTypes(); 108 $options = array(); 109 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(); 116 } 117 } 118 // sort it alphabetically... 119 asort($options); 120 $default_option = array( 121 0 => pht('All Object Types'), 122 ); 123 // ...and stick the default option on front 124 $options = array_merge($default_option, $options); 125 126 return $options; 127 } 128 129 /** 130 * @param array<PhabricatorFlag> $flags 131 * @param PhabricatorSavedQuery $query 132 * @param array<PhabricatorObjectHandle> $handles 133 */ 134 protected function renderResultList( 135 array $flags, 136 PhabricatorSavedQuery $query, 137 array $handles) { 138 assert_instances_of($flags, PhabricatorFlag::class); 139 140 $viewer = $this->requireViewer(); 141 142 $list = id(new PHUIObjectItemListView()) 143 ->setUser($viewer); 144 foreach ($flags as $flag) { 145 $id = $flag->getID(); 146 $phid = $flag->getObjectPHID(); 147 148 $class = PhabricatorFlagColor::getCSSClass($flag->getColor()); 149 150 $flag_icon = phutil_tag( 151 'div', 152 array( 153 'class' => 'phabricator-flag-icon '.$class, 154 ), 155 ''); 156 157 $item = id(new PHUIObjectItemView()) 158 ->addHeadIcon($flag_icon) 159 ->setHeader($flag->getHandle()->getFullName()) 160 ->setHref($flag->getHandle()->getURI()); 161 162 $status_open = PhabricatorObjectHandle::STATUS_OPEN; 163 if ($flag->getHandle()->getStatus() != $status_open) { 164 $item->setDisabled(true); 165 } 166 167 $item->addAction( 168 id(new PHUIListItemView()) 169 ->setIcon('fa-pencil') 170 ->setHref($this->getApplicationURI("edit/{$phid}/")) 171 ->setWorkflow(true)); 172 173 $item->addAction( 174 id(new PHUIListItemView()) 175 ->setIcon('fa-times') 176 ->setHref($this->getApplicationURI("delete/{$id}/")) 177 ->setWorkflow(true)); 178 179 if ($flag->getNote()) { 180 $item->addAttribute($flag->getNote()); 181 } 182 183 $item->addIcon( 184 'none', 185 phabricator_datetime($flag->getDateCreated(), $viewer)); 186 187 $list->addItem($item); 188 } 189 190 $result = new PhabricatorApplicationSearchResultView(); 191 $result->setObjectList($list); 192 $result->setNoDataString(pht('No flags found.')); 193 194 return $result; 195 196 } 197 198 199}