[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorMacroSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Macros'); 8 } 9 10 public function getApplicationClassName() { 11 return 'PhabricatorMacroApplication'; 12 } 13 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 15 $saved = new PhabricatorSavedQuery(); 16 $saved->setParameter( 17 'authorPHIDs', 18 $this->readUsersFromRequest($request, 'authors')); 19 20 $saved->setParameter('status', $request->getStr('status')); 21 $saved->setParameter('names', $request->getStrList('names')); 22 $saved->setParameter('nameLike', $request->getStr('nameLike')); 23 $saved->setParameter('createdStart', $request->getStr('createdStart')); 24 $saved->setParameter('createdEnd', $request->getStr('createdEnd')); 25 $saved->setParameter('flagColor', $request->getStr('flagColor', '-1')); 26 27 return $saved; 28 } 29 30 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 31 $query = id(new PhabricatorMacroQuery()) 32 ->needFiles(true) 33 ->withIDs($saved->getParameter('ids', array())) 34 ->withPHIDs($saved->getParameter('phids', array())) 35 ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())); 36 37 $status = $saved->getParameter('status'); 38 $options = PhabricatorMacroQuery::getStatusOptions(); 39 if (empty($options[$status])) { 40 $status = head_key($options); 41 } 42 $query->withStatus($status); 43 44 $names = $saved->getParameter('names', array()); 45 if ($names) { 46 $query->withNames($names); 47 } 48 49 $like = $saved->getParameter('nameLike'); 50 if (strlen($like)) { 51 $query->withNameLike($like); 52 } 53 54 $start = $this->parseDateTime($saved->getParameter('createdStart')); 55 $end = $this->parseDateTime($saved->getParameter('createdEnd')); 56 57 if ($start) { 58 $query->withDateCreatedAfter($start); 59 } 60 61 if ($end) { 62 $query->withDateCreatedBefore($end); 63 } 64 65 $color = $saved->getParameter('flagColor'); 66 if (strlen($color)) { 67 $query->withFlagColor($color); 68 } 69 70 return $query; 71 } 72 73 public function buildSearchForm( 74 AphrontFormView $form, 75 PhabricatorSavedQuery $saved_query) { 76 77 $phids = $saved_query->getParameter('authorPHIDs', array()); 78 $author_handles = id(new PhabricatorHandleQuery()) 79 ->setViewer($this->requireViewer()) 80 ->withPHIDs($phids) 81 ->execute(); 82 83 $status = $saved_query->getParameter('status'); 84 $names = implode(', ', $saved_query->getParameter('names', array())); 85 $like = $saved_query->getParameter('nameLike'); 86 $color = $saved_query->getParameter('flagColor', '-1'); 87 88 $form 89 ->appendChild( 90 id(new AphrontFormSelectControl()) 91 ->setName('status') 92 ->setLabel(pht('Status')) 93 ->setOptions(PhabricatorMacroQuery::getStatusOptions()) 94 ->setValue($status)) 95 ->appendChild( 96 id(new AphrontFormTokenizerControl()) 97 ->setDatasource(new PhabricatorPeopleDatasource()) 98 ->setName('authors') 99 ->setLabel(pht('Authors')) 100 ->setValue($author_handles)) 101 ->appendChild( 102 id(new AphrontFormTextControl()) 103 ->setName('nameLike') 104 ->setLabel(pht('Name Contains')) 105 ->setValue($like)) 106 ->appendChild( 107 id(new AphrontFormTextControl()) 108 ->setName('names') 109 ->setLabel(pht('Exact Names')) 110 ->setValue($names)) 111 ->appendChild( 112 id(new AphrontFormSelectControl()) 113 ->setName('flagColor') 114 ->setLabel(pht('Marked with Flag')) 115 ->setOptions(PhabricatorMacroQuery::getFlagColorsOptions()) 116 ->setValue($color)); 117 118 $this->buildDateRange( 119 $form, 120 $saved_query, 121 'createdStart', 122 pht('Created After'), 123 'createdEnd', 124 pht('Created Before')); 125 } 126 127 protected function getURI($path) { 128 return '/macro/'.$path; 129 } 130 131 public function getBuiltinQueryNames() { 132 $names = array( 133 'active' => pht('Active'), 134 'all' => pht('All'), 135 ); 136 137 if ($this->requireViewer()->isLoggedIn()) { 138 $names['authored'] = pht('Authored'); 139 } 140 141 return $names; 142 } 143 144 public function buildSavedQueryFromBuiltin($query_key) { 145 $query = $this->newSavedQuery(); 146 $query->setQueryKey($query_key); 147 148 switch ($query_key) { 149 case 'active': 150 return $query; 151 case 'all': 152 return $query->setParameter( 153 'status', 154 PhabricatorMacroQuery::STATUS_ANY); 155 case 'authored': 156 return $query->setParameter( 157 'authorPHIDs', 158 array($this->requireViewer()->getPHID())); 159 } 160 161 return parent::buildSavedQueryFromBuiltin($query_key); 162 } 163 164 protected function getRequiredHandlePHIDsForResultList( 165 array $macros, 166 PhabricatorSavedQuery $query) { 167 return mpull($macros, 'getAuthorPHID'); 168 } 169 170 protected function renderResultList( 171 array $macros, 172 PhabricatorSavedQuery $query, 173 array $handles) { 174 175 assert_instances_of($macros, 'PhabricatorFileImageMacro'); 176 $viewer = $this->requireViewer(); 177 178 $pinboard = new PHUIPinboardView(); 179 foreach ($macros as $macro) { 180 $file = $macro->getFile(); 181 182 $item = new PHUIPinboardItemView(); 183 if ($file) { 184 $item->setImageURI($file->getThumb280x210URI()); 185 $item->setImageSize(280, 210); 186 } 187 188 if ($macro->getDateCreated()) { 189 $datetime = phabricator_date($macro->getDateCreated(), $viewer); 190 $item->appendChild( 191 phutil_tag( 192 'div', 193 array(), 194 pht('Created on %s', $datetime))); 195 } else { 196 // Very old macros don't have a creation date. Rendering something 197 // keeps all the pins at the same height and avoids flow issues. 198 $item->appendChild( 199 phutil_tag( 200 'div', 201 array(), 202 pht('Created in ages long past'))); 203 } 204 205 if ($macro->getAuthorPHID()) { 206 $author_handle = $handles[$macro->getAuthorPHID()]; 207 $item->appendChild( 208 pht('Created by %s', $author_handle->renderLink())); 209 } 210 211 $item->setURI($this->getApplicationURI('/view/'.$macro->getID().'/')); 212 $item->setDisabled($macro->getisDisabled()); 213 $item->setHeader($macro->getName()); 214 215 $pinboard->addItem($item); 216 } 217 218 return $pinboard; 219 } 220 221 }
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 |