[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhrictionSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Wiki Documents'); 8 } 9 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 $saved = new PhabricatorSavedQuery(); 12 13 $saved->setParameter('status', $request->getArr('status')); 14 $saved->setParameter('order', $request->getArr('order')); 15 16 return $saved; 17 } 18 19 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 20 $query = id(new PhrictionDocumentQuery()) 21 ->needContent(true) 22 ->withStatus(PhrictionDocumentQuery::STATUS_NONSTUB); 23 24 $status = $saved->getParameter('status'); 25 $status = idx($this->getStatusValues(), $status); 26 if ($status) { 27 $query->withStatus($status); 28 } 29 30 $order = $saved->getParameter('order'); 31 $order = idx($this->getOrderValues(), $order); 32 if ($order) { 33 $query->setOrder($order); 34 } 35 36 return $query; 37 } 38 39 public function buildSearchForm( 40 AphrontFormView $form, 41 PhabricatorSavedQuery $saved_query) { 42 43 $form 44 ->appendChild( 45 id(new AphrontFormSelectControl()) 46 ->setLabel(pht('Status')) 47 ->setName('status') 48 ->setOptions($this->getStatusOptions()) 49 ->setValue($saved_query->getParameter('status'))) 50 ->appendChild( 51 id(new AphrontFormSelectControl()) 52 ->setLabel(pht('Order')) 53 ->setName('order') 54 ->setOptions($this->getOrderOptions()) 55 ->setValue($saved_query->getParameter('order'))); 56 } 57 58 protected function getURI($path) { 59 return '/phriction/'.$path; 60 } 61 62 public function getBuiltinQueryNames() { 63 $names = array( 64 'active' => pht('Active'), 65 'updated' => pht('Updated'), 66 'all' => pht('All'), 67 ); 68 69 return $names; 70 } 71 72 public function buildSavedQueryFromBuiltin($query_key) { 73 74 $query = $this->newSavedQuery(); 75 $query->setQueryKey($query_key); 76 77 switch ($query_key) { 78 case 'active': 79 return $query->setParameter('status', 'active'); 80 case 'all': 81 return $query; 82 case 'updated': 83 return $query->setParameter('order', 'updated'); 84 } 85 86 return parent::buildSavedQueryFromBuiltin($query_key); 87 } 88 89 private function getStatusOptions() { 90 return array( 91 'active' => pht('Show Active Documents'), 92 'all' => pht('Show All Documents'), 93 ); 94 } 95 96 private function getStatusValues() { 97 return array( 98 'active' => PhrictionDocumentQuery::STATUS_OPEN, 99 'all' => PhrictionDocumentQuery::STATUS_NONSTUB, 100 ); 101 } 102 103 private function getOrderOptions() { 104 return array( 105 'created' => pht('Date Created'), 106 'updated' => pht('Date Updated'), 107 ); 108 } 109 110 private function getOrderValues() { 111 return array( 112 'created' => PhrictionDocumentQuery::ORDER_CREATED, 113 'updated' => PhrictionDocumentQuery::ORDER_UPDATED, 114 ); 115 } 116 117 protected function getRequiredHandlePHIDsForResultList( 118 array $documents, 119 PhabricatorSavedQuery $query) { 120 121 $phids = array(); 122 foreach ($documents as $document) { 123 $content = $document->getContent(); 124 $phids[] = $content->getAuthorPHID(); 125 } 126 127 return $phids; 128 } 129 130 131 protected function renderResultList( 132 array $documents, 133 PhabricatorSavedQuery $query, 134 array $handles) { 135 assert_instances_of($documents, 'PhrictionDocument'); 136 137 $viewer = $this->requireViewer(); 138 139 $list = new PHUIObjectItemListView(); 140 $list->setUser($viewer); 141 foreach ($documents as $document) { 142 $content = $document->getContent(); 143 $slug = $document->getSlug(); 144 $author_phid = $content->getAuthorPHID(); 145 $slug_uri = PhrictionDocument::getSlugURI($slug); 146 147 $byline = pht( 148 'Edited by %s', 149 $handles[$author_phid]->renderLink()); 150 151 $updated = phabricator_datetime( 152 $content->getDateCreated(), 153 $viewer); 154 155 $item = id(new PHUIObjectItemView()) 156 ->setHeader($content->getTitle()) 157 ->setHref($slug_uri) 158 ->addByline($byline) 159 ->addIcon('none', $updated); 160 161 $item->addAttribute($slug_uri); 162 163 switch ($document->getStatus()) { 164 case PhrictionDocumentStatus::STATUS_DELETED: 165 $item->setDisabled(true); 166 $item->addIcon('delete', pht('Deleted')); 167 break; 168 case PhrictionDocumentStatus::STATUS_MOVED: 169 $item->setDisabled(true); 170 $item->addIcon('arrow-right', pht('Moved Away')); 171 break; 172 } 173 174 $list->addItem($item); 175 } 176 177 return $list; 178 } 179 180 }
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 |