[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorProjectSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Projects'); 8 } 9 10 public function getApplicationClassName() { 11 return 'PhabricatorProjectApplication'; 12 } 13 14 public function getCustomFieldObject() { 15 return new PhabricatorProject(); 16 } 17 18 public function buildSavedQueryFromRequest(AphrontRequest $request) { 19 $saved = new PhabricatorSavedQuery(); 20 21 $saved->setParameter( 22 'memberPHIDs', 23 $this->readUsersFromRequest($request, 'members')); 24 25 $saved->setParameter('status', $request->getStr('status')); 26 $saved->setParameter('name', $request->getStr('name')); 27 28 $saved->setParameter( 29 'icons', 30 $this->readListFromRequest($request, 'icons')); 31 32 $saved->setParameter( 33 'colors', 34 $this->readListFromRequest($request, 'colors')); 35 36 $this->readCustomFieldsFromRequest($request, $saved); 37 38 return $saved; 39 } 40 41 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 42 $query = id(new PhabricatorProjectQuery()) 43 ->needImages(true); 44 45 $member_phids = $saved->getParameter('memberPHIDs', array()); 46 if ($member_phids && is_array($member_phids)) { 47 $query->withMemberPHIDs($member_phids); 48 } 49 50 $status = $saved->getParameter('status'); 51 $status = idx($this->getStatusValues(), $status); 52 if ($status) { 53 $query->withStatus($status); 54 } 55 56 $name = $saved->getParameter('name'); 57 if (strlen($name)) { 58 $query->withDatasourceQuery($name); 59 } 60 61 $icons = $saved->getParameter('icons'); 62 if ($icons) { 63 $query->withIcons($icons); 64 } 65 66 $colors = $saved->getParameter('colors'); 67 if ($colors) { 68 $query->withColors($colors); 69 } 70 71 $this->applyCustomFieldsToQuery($query, $saved); 72 73 return $query; 74 } 75 76 public function buildSearchForm( 77 AphrontFormView $form, 78 PhabricatorSavedQuery $saved) { 79 80 $phids = $saved->getParameter('memberPHIDs', array()); 81 $member_handles = id(new PhabricatorHandleQuery()) 82 ->setViewer($this->requireViewer()) 83 ->withPHIDs($phids) 84 ->execute(); 85 86 $status = $saved->getParameter('status'); 87 $name_match = $saved->getParameter('name'); 88 89 $icons = array_fuse($saved->getParameter('icons', array())); 90 $colors = array_fuse($saved->getParameter('colors', array())); 91 92 $icon_control = id(new AphrontFormCheckboxControl()) 93 ->setLabel(pht('Icons')); 94 foreach (PhabricatorProjectIcon::getIconMap() as $icon => $name) { 95 $image = id(new PHUIIconView()) 96 ->setIconFont($icon); 97 98 $icon_control->addCheckbox( 99 'icons[]', 100 $icon, 101 array($image, ' ', $name), 102 isset($icons[$icon])); 103 } 104 105 $color_control = id(new AphrontFormCheckboxControl()) 106 ->setLabel(pht('Colors')); 107 foreach (PhabricatorProjectIcon::getColorMap() as $color => $name) { 108 $tag = id(new PHUITagView()) 109 ->setType(PHUITagView::TYPE_SHADE) 110 ->setShade($color) 111 ->setName($name); 112 113 $color_control->addCheckbox( 114 'colors[]', 115 $color, 116 $tag, 117 isset($colors[$color])); 118 } 119 120 $form 121 ->appendChild( 122 id(new AphrontFormTextControl()) 123 ->setName('name') 124 ->setLabel(pht('Name')) 125 ->setValue($name_match)) 126 ->appendChild( 127 id(new AphrontFormTokenizerControl()) 128 ->setDatasource(new PhabricatorPeopleDatasource()) 129 ->setName('members') 130 ->setLabel(pht('Members')) 131 ->setValue($member_handles)) 132 ->appendChild( 133 id(new AphrontFormSelectControl()) 134 ->setLabel(pht('Status')) 135 ->setName('status') 136 ->setOptions($this->getStatusOptions()) 137 ->setValue($status)) 138 ->appendChild($icon_control) 139 ->appendChild($color_control); 140 141 $this->appendCustomFieldsToForm($form, $saved); 142 } 143 144 protected function getURI($path) { 145 return '/project/'.$path; 146 } 147 148 public function getBuiltinQueryNames() { 149 $names = array(); 150 151 if ($this->requireViewer()->isLoggedIn()) { 152 $names['joined'] = pht('Joined'); 153 } 154 155 $names['active'] = pht('Active'); 156 $names['all'] = pht('All'); 157 158 return $names; 159 } 160 161 public function buildSavedQueryFromBuiltin($query_key) { 162 $query = $this->newSavedQuery(); 163 $query->setQueryKey($query_key); 164 165 $viewer_phid = $this->requireViewer()->getPHID(); 166 167 switch ($query_key) { 168 case 'all': 169 return $query; 170 case 'active': 171 return $query 172 ->setParameter('status', 'active'); 173 case 'joined': 174 return $query 175 ->setParameter('memberPHIDs', array($viewer_phid)) 176 ->setParameter('status', 'active'); 177 } 178 179 return parent::buildSavedQueryFromBuiltin($query_key); 180 } 181 182 private function getStatusOptions() { 183 return array( 184 'active' => pht('Show Only Active Projects'), 185 'all' => pht('Show All Projects'), 186 ); 187 } 188 189 private function getStatusValues() { 190 return array( 191 'active' => PhabricatorProjectQuery::STATUS_ACTIVE, 192 'all' => PhabricatorProjectQuery::STATUS_ANY, 193 ); 194 } 195 196 private function getColorValues() {} 197 198 private function getIconValues() {} 199 200 protected function getRequiredHandlePHIDsForResultList( 201 array $projects, 202 PhabricatorSavedQuery $query) { 203 return mpull($projects, 'getPHID'); 204 } 205 206 protected function renderResultList( 207 array $projects, 208 PhabricatorSavedQuery $query, 209 array $handles) { 210 assert_instances_of($projects, 'PhabricatorProject'); 211 $viewer = $this->requireViewer(); 212 213 $list = new PHUIObjectItemListView(); 214 $list->setUser($viewer); 215 foreach ($projects as $project) { 216 $id = $project->getID(); 217 $workboards_uri = $this->getApplicationURI("board/{$id}/"); 218 $members_uri = $this->getApplicationURI("members/{$id}/"); 219 $workboards_url = phutil_tag( 220 'a', 221 array( 222 'href' => $workboards_uri, 223 ), 224 pht('Workboard')); 225 226 $members_url = phutil_tag( 227 'a', 228 array( 229 'href' => $members_uri, 230 ), 231 pht('Members')); 232 233 $tag_list = id(new PHUIHandleTagListView()) 234 ->setSlim(true) 235 ->setHandles(array($handles[$project->getPHID()])); 236 237 $item = id(new PHUIObjectItemView()) 238 ->setHeader($project->getName()) 239 ->setHref($this->getApplicationURI("view/{$id}/")) 240 ->setImageURI($project->getProfileImageURI()) 241 ->addAttribute($tag_list) 242 ->addAttribute($workboards_url) 243 ->addAttribute($members_url); 244 245 if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) { 246 $item->addIcon('delete-grey', pht('Archived')); 247 $item->setDisabled(true); 248 } 249 250 $list->addItem($item); 251 } 252 253 return $list; 254 } 255 256 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |