[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorPasteSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Pastes'); 8 } 9 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 $saved = new PhabricatorSavedQuery(); 12 $saved->setParameter( 13 'authorPHIDs', 14 $this->readUsersFromRequest($request, 'authors')); 15 16 $languages = $request->getStrList('languages'); 17 if ($request->getBool('noLanguage')) { 18 $languages[] = null; 19 } 20 $saved->setParameter('languages', $languages); 21 22 $saved->setParameter('createdStart', $request->getStr('createdStart')); 23 $saved->setParameter('createdEnd', $request->getStr('createdEnd')); 24 25 return $saved; 26 } 27 28 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 29 $query = id(new PhabricatorPasteQuery()) 30 ->needContent(true) 31 ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())) 32 ->withLanguages($saved->getParameter('languages', array())); 33 34 $start = $this->parseDateTime($saved->getParameter('createdStart')); 35 $end = $this->parseDateTime($saved->getParameter('createdEnd')); 36 37 if ($start) { 38 $query->withDateCreatedAfter($start); 39 } 40 41 if ($end) { 42 $query->withDateCreatedBefore($end); 43 } 44 45 return $query; 46 } 47 48 public function buildSearchForm( 49 AphrontFormView $form, 50 PhabricatorSavedQuery $saved_query) { 51 $phids = $saved_query->getParameter('authorPHIDs', array()); 52 $author_handles = id(new PhabricatorHandleQuery()) 53 ->setViewer($this->requireViewer()) 54 ->withPHIDs($phids) 55 ->execute(); 56 57 $languages = $saved_query->getParameter('languages', array()); 58 $no_language = false; 59 foreach ($languages as $key => $language) { 60 if ($language === null) { 61 $no_language = true; 62 unset($languages[$key]); 63 continue; 64 } 65 } 66 67 $form 68 ->appendChild( 69 id(new AphrontFormTokenizerControl()) 70 ->setDatasource(new PhabricatorPeopleDatasource()) 71 ->setName('authors') 72 ->setLabel(pht('Authors')) 73 ->setValue($author_handles)) 74 ->appendChild( 75 id(new AphrontFormTextControl()) 76 ->setName('languages') 77 ->setLabel(pht('Languages')) 78 ->setValue(implode(', ', $languages))) 79 ->appendChild( 80 id(new AphrontFormCheckboxControl()) 81 ->addCheckbox( 82 'noLanguage', 83 1, 84 pht('Find Pastes with no specified language.'), 85 $no_language)); 86 87 $this->buildDateRange( 88 $form, 89 $saved_query, 90 'createdStart', 91 pht('Created After'), 92 'createdEnd', 93 pht('Created Before')); 94 95 } 96 97 protected function getURI($path) { 98 return '/paste/'.$path; 99 } 100 101 public function getBuiltinQueryNames() { 102 $names = array( 103 'all' => pht('All Pastes'), 104 ); 105 106 if ($this->requireViewer()->isLoggedIn()) { 107 $names['authored'] = pht('Authored'); 108 } 109 110 return $names; 111 } 112 113 public function buildSavedQueryFromBuiltin($query_key) { 114 115 $query = $this->newSavedQuery(); 116 $query->setQueryKey($query_key); 117 118 switch ($query_key) { 119 case 'all': 120 return $query; 121 case 'authored': 122 return $query->setParameter( 123 'authorPHIDs', 124 array($this->requireViewer()->getPHID())); 125 } 126 127 return parent::buildSavedQueryFromBuiltin($query_key); 128 } 129 130 protected function getRequiredHandlePHIDsForResultList( 131 array $pastes, 132 PhabricatorSavedQuery $query) { 133 return mpull($pastes, 'getAuthorPHID'); 134 } 135 136 protected function renderResultList( 137 array $pastes, 138 PhabricatorSavedQuery $query, 139 array $handles) { 140 assert_instances_of($pastes, 'PhabricatorPaste'); 141 142 $viewer = $this->requireViewer(); 143 144 $lang_map = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices'); 145 146 $list = new PHUIObjectItemListView(); 147 $list->setUser($viewer); 148 foreach ($pastes as $paste) { 149 $created = phabricator_date($paste->getDateCreated(), $viewer); 150 $author = $handles[$paste->getAuthorPHID()]->renderLink(); 151 152 $lines = phutil_split_lines($paste->getContent()); 153 154 $preview = id(new PhabricatorSourceCodeView()) 155 ->setLimit(5) 156 ->setLines($lines) 157 ->setURI(new PhutilURI($paste->getURI())); 158 159 $source_code = phutil_tag( 160 'div', 161 array( 162 'class' => 'phabricator-source-code-summary', 163 ), 164 $preview); 165 166 $created = phabricator_datetime($paste->getDateCreated(), $viewer); 167 $line_count = count($lines); 168 $line_count = pht( 169 '%s Line(s)', 170 new PhutilNumber($line_count)); 171 172 $title = nonempty($paste->getTitle(), pht('(An Untitled Masterwork)')); 173 174 $item = id(new PHUIObjectItemView()) 175 ->setObjectName('P'.$paste->getID()) 176 ->setHeader($title) 177 ->setHref('/P'.$paste->getID()) 178 ->setObject($paste) 179 ->addByline(pht('Author: %s', $author)) 180 ->addIcon('none', $created) 181 ->addIcon('none', $line_count) 182 ->appendChild($source_code); 183 184 $lang_name = $paste->getLanguage(); 185 if ($lang_name) { 186 $lang_name = idx($lang_map, $lang_name, $lang_name); 187 $item->addIcon('none', $lang_name); 188 } 189 190 $list->addItem($item); 191 } 192 193 return $list; 194 } 195 }
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 |