[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class HeraldRuleSearchEngine extends PhabricatorApplicationSearchEngine { 4 5 public function getResultTypeDescription() { 6 return pht('Herald Rules'); 7 } 8 9 public function getApplicationClassName() { 10 return 'PhabricatorHeraldApplication'; 11 } 12 13 public function buildSavedQueryFromRequest(AphrontRequest $request) { 14 $saved = new PhabricatorSavedQuery(); 15 16 $saved->setParameter( 17 'authorPHIDs', 18 $this->readUsersFromRequest($request, 'authors')); 19 20 $saved->setParameter('contentType', $request->getStr('contentType')); 21 $saved->setParameter('ruleType', $request->getStr('ruleType')); 22 $saved->setParameter( 23 'disabled', 24 $this->readBoolFromRequest($request, 'disabled')); 25 26 return $saved; 27 } 28 29 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 30 $query = id(new HeraldRuleQuery()); 31 32 $author_phids = $saved->getParameter('authorPHIDs'); 33 if ($author_phids) { 34 $query->withAuthorPHIDs($author_phids); 35 } 36 37 $content_type = $saved->getParameter('contentType'); 38 $content_type = idx($this->getContentTypeValues(), $content_type); 39 if ($content_type) { 40 $query->withContentTypes(array($content_type)); 41 } 42 43 $rule_type = $saved->getParameter('ruleType'); 44 $rule_type = idx($this->getRuleTypeValues(), $rule_type); 45 if ($rule_type) { 46 $query->withRuleTypes(array($rule_type)); 47 } 48 49 $disabled = $saved->getParameter('disabled'); 50 if ($disabled !== null) { 51 $query->withDisabled($disabled); 52 } 53 54 return $query; 55 } 56 57 public function buildSearchForm( 58 AphrontFormView $form, 59 PhabricatorSavedQuery $saved_query) { 60 61 $phids = $saved_query->getParameter('authorPHIDs', array()); 62 $author_handles = id(new PhabricatorHandleQuery()) 63 ->setViewer($this->requireViewer()) 64 ->withPHIDs($phids) 65 ->execute(); 66 67 $content_type = $saved_query->getParameter('contentType'); 68 $rule_type = $saved_query->getParameter('ruleType'); 69 70 $form 71 ->appendChild( 72 id(new AphrontFormTokenizerControl()) 73 ->setDatasource(new PhabricatorPeopleDatasource()) 74 ->setName('authors') 75 ->setLabel(pht('Authors')) 76 ->setValue($author_handles)) 77 ->appendChild( 78 id(new AphrontFormSelectControl()) 79 ->setName('contentType') 80 ->setLabel(pht('Content Type')) 81 ->setValue($content_type) 82 ->setOptions($this->getContentTypeOptions())) 83 ->appendChild( 84 id(new AphrontFormSelectControl()) 85 ->setName('ruleType') 86 ->setLabel(pht('Rule Type')) 87 ->setValue($rule_type) 88 ->setOptions($this->getRuleTypeOptions())) 89 ->appendChild( 90 id(new AphrontFormSelectControl()) 91 ->setName('disabled') 92 ->setLabel(pht('Rule Status')) 93 ->setValue($this->getBoolFromQuery($saved_query, 'disabled')) 94 ->setOptions( 95 array( 96 '' => pht('Show Enabled and Disabled Rules'), 97 'false' => pht('Show Only Enabled Rules'), 98 'true' => pht('Show Only Disabled Rules'), 99 ))); 100 } 101 102 protected function getURI($path) { 103 return '/herald/'.$path; 104 } 105 106 public function getBuiltinQueryNames() { 107 $names = array(); 108 109 if ($this->requireViewer()->isLoggedIn()) { 110 $names['authored'] = pht('Authored'); 111 } 112 113 $names['active'] = pht('Active'); 114 $names['all'] = pht('All'); 115 116 return $names; 117 } 118 119 public function buildSavedQueryFromBuiltin($query_key) { 120 $query = $this->newSavedQuery(); 121 $query->setQueryKey($query_key); 122 123 $viewer_phid = $this->requireViewer()->getPHID(); 124 125 switch ($query_key) { 126 case 'all': 127 return $query; 128 case 'active': 129 return $query->setParameter('disabled', false); 130 case 'authored': 131 return $query 132 ->setParameter('authorPHIDs', array($viewer_phid)) 133 ->setParameter('disabled', false); 134 } 135 136 return parent::buildSavedQueryFromBuiltin($query_key); 137 } 138 139 private function getContentTypeOptions() { 140 return array( 141 '' => pht('(All Content Types)'), 142 ) + HeraldAdapter::getEnabledAdapterMap($this->requireViewer()); 143 } 144 145 private function getContentTypeValues() { 146 return array_fuse( 147 array_keys( 148 HeraldAdapter::getEnabledAdapterMap($this->requireViewer()))); 149 } 150 151 private function getRuleTypeOptions() { 152 return array( 153 '' => pht('(All Rule Types)'), 154 ) + HeraldRuleTypeConfig::getRuleTypeMap(); 155 } 156 157 private function getRuleTypeValues() { 158 return array_fuse(array_keys(HeraldRuleTypeConfig::getRuleTypeMap())); 159 } 160 161 protected function getRequiredHandlePHIDsForResultList( 162 array $rules, 163 PhabricatorSavedQuery $query) { 164 165 return mpull($rules, 'getAuthorPHID'); 166 } 167 168 protected function renderResultList( 169 array $rules, 170 PhabricatorSavedQuery $query, 171 array $handles) { 172 assert_instances_of($rules, 'HeraldRule'); 173 174 $viewer = $this->requireViewer(); 175 176 $content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer); 177 178 $list = id(new PHUIObjectItemListView()) 179 ->setUser($viewer); 180 foreach ($rules as $rule) { 181 $id = $rule->getID(); 182 183 $item = id(new PHUIObjectItemView()) 184 ->setObjectName("H{$id}") 185 ->setHeader($rule->getName()) 186 ->setHref($this->getApplicationURI("rule/{$id}/")); 187 188 if ($rule->isPersonalRule()) { 189 $item->addIcon('fa-user', pht('Personal Rule')); 190 $item->addByline( 191 pht( 192 'Authored by %s', 193 $handles[$rule->getAuthorPHID()]->renderLink())); 194 } else { 195 $item->addIcon('fa-globe', pht('Global Rule')); 196 } 197 198 if ($rule->getIsDisabled()) { 199 $item->setDisabled(true); 200 $item->addIcon('fa-lock grey', pht('Disabled')); 201 } 202 203 $item->addAction( 204 id(new PHUIListItemView()) 205 ->setHref($this->getApplicationURI("history/{$id}/")) 206 ->setIcon('fa-file-text-o') 207 ->setName(pht('Edit Log'))); 208 209 $content_type_name = idx($content_type_map, $rule->getContentType()); 210 $item->addAttribute(pht('Affects: %s', $content_type_name)); 211 212 $list->addItem($item); 213 } 214 215 return $list; 216 } 217 218 }
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 |