@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Move more rendering into SearchEngines for panels

Summary: Ref T4986. Getting closer. Nothing out of the ordinary in this group.

Test Plan:
For each application:

- Viewed the normal search results.
- Created a panel version and viewed it.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T4986

Differential Revision: https://secure.phabricator.com/D9024

+601 -601
+12 -60
src/__phutil_library_map__.php
··· 3507 3507 ), 3508 3508 'HeraldTranscriptController' => 'HeraldController', 3509 3509 'HeraldTranscriptGarbageCollector' => 'PhabricatorGarbageCollector', 3510 - 'HeraldTranscriptListController' => 3511 - array( 3512 - 0 => 'HeraldController', 3513 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3514 - ), 3510 + 'HeraldTranscriptListController' => 'HeraldController', 3515 3511 'HeraldTranscriptQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 3516 3512 'HeraldTranscriptSearchEngine' => 'PhabricatorApplicationSearchEngine', 3517 3513 'HeraldTranscriptTestCase' => 'PhabricatorTestCase', ··· 3538 3534 'LegalpadDocumentCommentController' => 'LegalpadController', 3539 3535 'LegalpadDocumentEditController' => 'LegalpadController', 3540 3536 'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor', 3541 - 'LegalpadDocumentListController' => 3542 - array( 3543 - 0 => 'LegalpadController', 3544 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3545 - ), 3537 + 'LegalpadDocumentListController' => 'LegalpadController', 3546 3538 'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 3547 3539 'LegalpadDocumentRemarkupRule' => 'PhabricatorRemarkupRuleObject', 3548 3540 'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine', ··· 3777 3769 'PassphraseCredentialCreateController' => 'PassphraseController', 3778 3770 'PassphraseCredentialDestroyController' => 'PassphraseController', 3779 3771 'PassphraseCredentialEditController' => 'PassphraseController', 3780 - 'PassphraseCredentialListController' => 3781 - array( 3782 - 0 => 'PassphraseController', 3783 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3784 - ), 3772 + 'PassphraseCredentialListController' => 'PassphraseController', 3785 3773 'PassphraseCredentialLockController' => 'PassphraseController', 3786 3774 'PassphraseCredentialPublicController' => 'PassphraseController', 3787 3775 'PassphraseCredentialQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', ··· 3931 3919 'PhabricatorApplicationUninstallController' => 'PhabricatorApplicationsController', 3932 3920 'PhabricatorApplicationXHProf' => 'PhabricatorApplication', 3933 3921 'PhabricatorApplicationsController' => 'PhabricatorController', 3934 - 'PhabricatorApplicationsListController' => 3935 - array( 3936 - 0 => 'PhabricatorApplicationsController', 3937 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3938 - ), 3922 + 'PhabricatorApplicationsListController' => 'PhabricatorApplicationsController', 3939 3923 'PhabricatorAsanaConfigOptions' => 'PhabricatorApplicationConfigOptions', 3940 3924 'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController', 3941 3925 'PhabricatorAuditComment' => ··· 4456 4440 'PhabricatorMacroDisableController' => 'PhabricatorMacroController', 4457 4441 'PhabricatorMacroEditController' => 'PhabricatorMacroController', 4458 4442 'PhabricatorMacroEditor' => 'PhabricatorApplicationTransactionEditor', 4459 - 'PhabricatorMacroListController' => 4460 - array( 4461 - 0 => 'PhabricatorMacroController', 4462 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4463 - ), 4443 + 'PhabricatorMacroListController' => 'PhabricatorMacroController', 4464 4444 'PhabricatorMacroMailReceiver' => 'PhabricatorObjectMailReceiver', 4465 4445 'PhabricatorMacroMemeController' => 'PhabricatorMacroController', 4466 4446 'PhabricatorMacroMemeDialogController' => 'PhabricatorMacroController', ··· 4493 4473 'PhabricatorMailingListSearchEngine' => 'PhabricatorApplicationSearchEngine', 4494 4474 'PhabricatorMailingListsController' => 'PhabricatorController', 4495 4475 'PhabricatorMailingListsEditController' => 'PhabricatorMailingListsController', 4496 - 'PhabricatorMailingListsListController' => 4497 - array( 4498 - 0 => 'PhabricatorMailingListsController', 4499 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4500 - ), 4476 + 'PhabricatorMailingListsListController' => 'PhabricatorMailingListsController', 4501 4477 'PhabricatorMainMenuGroupView' => 'AphrontView', 4502 4478 'PhabricatorMainMenuIconView' => 'AphrontView', 4503 4479 'PhabricatorMainMenuSearchView' => 'AphrontView', ··· 4560 4536 'PhabricatorOAuthClientBaseController' => 'PhabricatorOAuthServerController', 4561 4537 'PhabricatorOAuthClientDeleteController' => 'PhabricatorOAuthClientBaseController', 4562 4538 'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientBaseController', 4563 - 'PhabricatorOAuthClientListController' => 4564 - array( 4565 - 0 => 'PhabricatorOAuthClientBaseController', 4566 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4567 - ), 4539 + 'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientBaseController', 4568 4540 'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientBaseController', 4569 4541 'PhabricatorOAuthResponse' => 'AphrontResponse', 4570 4542 'PhabricatorOAuthServerAccessToken' => 'PhabricatorOAuthServerDAO', ··· 4758 4730 'PhabricatorProjectEditMainController' => 'PhabricatorProjectController', 4759 4731 'PhabricatorProjectEditPictureController' => 'PhabricatorProjectController', 4760 4732 'PhabricatorProjectEditorTestCase' => 'PhabricatorTestCase', 4761 - 'PhabricatorProjectListController' => 4762 - array( 4763 - 0 => 'PhabricatorProjectController', 4764 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4765 - ), 4733 + 'PhabricatorProjectListController' => 'PhabricatorProjectController', 4766 4734 'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController', 4767 4735 'PhabricatorProjectMembersRemoveController' => 'PhabricatorProjectController', 4768 4736 'PhabricatorProjectMoveController' => 'PhabricatorProjectController', ··· 5278 5246 'PholioMockEditor' => 'PhabricatorApplicationTransactionEditor', 5279 5247 'PholioMockEmbedView' => 'AphrontView', 5280 5248 'PholioMockImagesView' => 'AphrontView', 5281 - 'PholioMockListController' => 5282 - array( 5283 - 0 => 'PholioController', 5284 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 5285 - ), 5249 + 'PholioMockListController' => 'PholioController', 5286 5250 'PholioMockMailReceiver' => 'PhabricatorObjectMailReceiver', 5287 5251 'PholioMockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 5288 5252 'PholioMockSearchEngine' => 'PhabricatorApplicationSearchEngine', ··· 5396 5360 'PhragmentZIPController' => 'PhragmentController', 5397 5361 'PhrequentController' => 'PhabricatorController', 5398 5362 'PhrequentDAO' => 'PhabricatorLiskDAO', 5399 - 'PhrequentListController' => 5400 - array( 5401 - 0 => 'PhrequentController', 5402 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 5403 - ), 5363 + 'PhrequentListController' => 'PhrequentController', 5404 5364 'PhrequentSearchEngine' => 'PhabricatorApplicationSearchEngine', 5405 5365 'PhrequentTimeBlock' => 'Phobject', 5406 5366 'PhrequentTimeBlockTestCase' => 'PhabricatorTestCase', ··· 5440 5400 'PhrictionDocumentTestCase' => 'PhabricatorTestCase', 5441 5401 'PhrictionEditController' => 'PhrictionController', 5442 5402 'PhrictionHistoryController' => 'PhrictionController', 5443 - 'PhrictionListController' => 5444 - array( 5445 - 0 => 'PhrictionController', 5446 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 5447 - ), 5403 + 'PhrictionListController' => 'PhrictionController', 5448 5404 'PhrictionMoveController' => 'PhrictionController', 5449 5405 'PhrictionNewController' => 'PhrictionController', 5450 5406 'PhrictionPHIDTypeDocument' => 'PhabricatorPHIDType', ··· 5496 5452 'PonderQuestionEditController' => 'PonderController', 5497 5453 'PonderQuestionEditor' => 'PonderEditor', 5498 5454 'PonderQuestionHistoryController' => 'PonderController', 5499 - 'PonderQuestionListController' => 5500 - array( 5501 - 0 => 'PonderController', 5502 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 5503 - ), 5455 + 'PonderQuestionListController' => 'PonderController', 5504 5456 'PonderQuestionMailReceiver' => 'PhabricatorObjectMailReceiver', 5505 5457 'PonderQuestionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 5506 5458 'PonderQuestionReplyHandler' => 'PhabricatorMailReplyHandler',
+1 -47
src/applications/herald/controller/HeraldTranscriptListController.php
··· 1 1 <?php 2 2 3 - final class HeraldTranscriptListController extends HeraldController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class HeraldTranscriptListController extends HeraldController { 5 4 6 5 private $queryKey; 7 6 ··· 45 44 ->setNavigation($this->buildSideNavView()); 46 45 47 46 return $this->delegateToController($controller); 48 - } 49 - 50 - 51 - public function renderResultsList( 52 - array $transcripts, 53 - PhabricatorSavedQuery $query) { 54 - assert_instances_of($transcripts, 'HeraldTranscript'); 55 - 56 - $viewer = $this->getRequest()->getUser(); 57 - 58 - // Render the table. 59 - $handles = array(); 60 - if ($transcripts) { 61 - $phids = mpull($transcripts, 'getObjectPHID', 'getObjectPHID'); 62 - $handles = $this->loadViewerHandles($phids); 63 - } 64 - 65 - $list = new PHUIObjectItemListView(); 66 - $list->setCards(true); 67 - foreach ($transcripts as $xscript) { 68 - $view_href = phutil_tag( 69 - 'a', 70 - array( 71 - 'href' => '/herald/transcript/'.$xscript->getID().'/', 72 - ), 73 - pht('View Full Transcript')); 74 - 75 - $item = new PHUIObjectItemView(); 76 - $item->setObjectName($xscript->getID()); 77 - $item->setHeader($view_href); 78 - if ($xscript->getDryRun()) { 79 - $item->addAttribute(pht('Dry Run')); 80 - } 81 - $item->addAttribute($handles[$xscript->getObjectPHID()]->renderLink()); 82 - $item->addAttribute( 83 - number_format((int)(1000 * $xscript->getDuration())).' ms'); 84 - $item->addIcon( 85 - 'none', 86 - phabricator_datetime($xscript->getTime(), $viewer)); 87 - 88 - $list->addItem($item); 89 - } 90 - 91 - return $list; 92 - 93 47 } 94 48 95 49 }
+47
src/applications/herald/query/HeraldTranscriptSearchEngine.php
··· 3 3 final class HeraldTranscriptSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationHerald'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 87 91 } 88 92 89 93 return parent::buildSavedQueryFromBuiltin($query_key); 94 + } 95 + 96 + protected function getRequiredHandlePHIDsForResultList( 97 + array $transcripts, 98 + PhabricatorSavedQuery $query) { 99 + return mpull($transcripts, 'getObjectPHID'); 100 + } 101 + 102 + protected function renderResultList( 103 + array $transcripts, 104 + PhabricatorSavedQuery $query, 105 + array $handles) { 106 + assert_instances_of($transcripts, 'HeraldTranscript'); 107 + 108 + $viewer = $this->requireViewer(); 109 + 110 + $list = new PHUIObjectItemListView(); 111 + $list->setCards(true); 112 + foreach ($transcripts as $xscript) { 113 + $view_href = phutil_tag( 114 + 'a', 115 + array( 116 + 'href' => '/herald/transcript/'.$xscript->getID().'/', 117 + ), 118 + pht('View Full Transcript')); 119 + 120 + $item = new PHUIObjectItemView(); 121 + $item->setObjectName($xscript->getID()); 122 + $item->setHeader($view_href); 123 + if ($xscript->getDryRun()) { 124 + $item->addAttribute(pht('Dry Run')); 125 + } 126 + $item->addAttribute($handles[$xscript->getObjectPHID()]->renderLink()); 127 + $item->addAttribute( 128 + number_format((int)(1000 * $xscript->getDuration())).' ms'); 129 + $item->addIcon( 130 + 'none', 131 + phabricator_datetime($xscript->getTime(), $viewer)); 132 + 133 + $list->addItem($item); 134 + } 135 + 136 + return $list; 90 137 } 91 138 92 139 }
+1 -40
src/applications/legalpad/controller/LegalpadDocumentListController.php
··· 1 1 <?php 2 2 3 - /** 4 - * @group legalpad 5 - */ 6 - final class LegalpadDocumentListController extends LegalpadController 7 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class LegalpadDocumentListController extends LegalpadController { 8 4 9 5 private $queryKey; 10 6 ··· 20 16 ->setNavigation($this->buildSideNav()); 21 17 22 18 return $this->delegateToController($controller); 23 - } 24 - 25 - public function renderResultsList( 26 - array $documents, 27 - PhabricatorSavedQuery $query) { 28 - assert_instances_of($documents, 'LegalpadDocument'); 29 - 30 - $user = $this->getRequest()->getUser(); 31 - 32 - $contributors = array_mergev( 33 - mpull($documents, 'getRecentContributorPHIDs')); 34 - $this->loadHandles($contributors); 35 - 36 - $list = new PHUIObjectItemListView(); 37 - $list->setUser($user); 38 - foreach ($documents as $document) { 39 - $last_updated = phabricator_date($document->getDateModified(), $user); 40 - $recent_contributors = $document->getRecentContributorPHIDs(); 41 - $updater = $this->getHandle(reset($recent_contributors))->renderLink(); 42 - 43 - $title = $document->getTitle(); 44 - 45 - $item = id(new PHUIObjectItemView()) 46 - ->setObjectName('L'.$document->getID()) 47 - ->setHeader($title) 48 - ->setHref($this->getApplicationURI('view/'.$document->getID())) 49 - ->setObject($document) 50 - ->addIcon('none', pht('Last updated: %s', $last_updated)) 51 - ->addByline(pht('Updated by: %s', $updater)) 52 - ->addAttribute(pht('Versions: %d', $document->getVersions())); 53 - 54 - $list->addItem($item); 55 - } 56 - 57 - return $list; 58 19 } 59 20 60 21 }
+42 -3
src/applications/legalpad/query/LegalpadDocumentSearchEngine.php
··· 1 1 <?php 2 2 3 - /** 4 - * @group legalpad 5 - */ 6 3 final class LegalpadDocumentSearchEngine 7 4 extends PhabricatorApplicationSearchEngine { 5 + 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationLegalpad'; 8 + } 8 9 9 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 10 11 $saved = new PhabricatorSavedQuery(); ··· 101 102 } 102 103 103 104 return parent::buildSavedQueryFromBuiltin($query_key); 105 + } 106 + 107 + protected function getRequiredHandlePHIDsForResultList( 108 + array $documents, 109 + PhabricatorSavedQuery $query) { 110 + return array_mergev(mpull($documents, 'getRecentContributorPHIDs')); 111 + } 112 + 113 + protected function renderResultList( 114 + array $documents, 115 + PhabricatorSavedQuery $query, 116 + array $handles) { 117 + assert_instances_of($documents, 'LegalpadDocument'); 118 + 119 + $viewer = $this->requireViewer(); 120 + 121 + $list = new PHUIObjectItemListView(); 122 + $list->setUser($viewer); 123 + foreach ($documents as $document) { 124 + $last_updated = phabricator_date($document->getDateModified(), $viewer); 125 + $recent_contributors = $document->getRecentContributorPHIDs(); 126 + $updater = $handles[reset($recent_contributors)]->renderLink(); 127 + 128 + $title = $document->getTitle(); 129 + 130 + $item = id(new PHUIObjectItemView()) 131 + ->setObjectName('L'.$document->getID()) 132 + ->setHeader($title) 133 + ->setHref($this->getApplicationURI('view/'.$document->getID())) 134 + ->setObject($document) 135 + ->addIcon('none', pht('Last updated: %s', $last_updated)) 136 + ->addByline(pht('Updated by: %s', $updater)) 137 + ->addAttribute(pht('Versions: %d', $document->getVersions())); 138 + 139 + $list->addItem($item); 140 + } 141 + 142 + return $list; 104 143 } 105 144 106 145 }
+1 -62
src/applications/macro/controller/PhabricatorMacroListController.php
··· 1 1 <?php 2 2 3 - final class PhabricatorMacroListController extends PhabricatorMacroController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PhabricatorMacroListController extends PhabricatorMacroController { 5 4 6 5 private $key; 7 6 ··· 23 22 return $this->delegateToController($controller); 24 23 } 25 24 26 - public function renderResultsList( 27 - array $macros, 28 - PhabricatorSavedQuery $query) { 29 - 30 - assert_instances_of($macros, 'PhabricatorFileImageMacro'); 31 - $viewer = $this->getRequest()->getUser(); 32 - 33 - $author_phids = mpull($macros, 'getAuthorPHID', 'getAuthorPHID'); 34 - $this->loadHandles($author_phids); 35 - $author_handles = array_select_keys( 36 - $this->getLoadedHandles(), 37 - $author_phids); 38 - 39 - $pinboard = new PHUIPinboardView(); 40 - foreach ($macros as $macro) { 41 - $file = $macro->getFile(); 42 - 43 - $item = new PHUIPinboardItemView(); 44 - if ($file) { 45 - $item->setImageURI($file->getThumb280x210URI()); 46 - $item->setImageSize(280, 210); 47 - } 48 - 49 - if ($macro->getDateCreated()) { 50 - $datetime = phabricator_date($macro->getDateCreated(), $viewer); 51 - $item->appendChild( 52 - phutil_tag( 53 - 'div', 54 - array(), 55 - pht('Created on %s', $datetime))); 56 - } else { 57 - // Very old macros don't have a creation date. Rendering something 58 - // keeps all the pins at the same height and avoids flow issues. 59 - $item->appendChild( 60 - phutil_tag( 61 - 'div', 62 - array(), 63 - pht('Created in ages long past'))); 64 - } 65 - 66 - if ($macro->getAuthorPHID()) { 67 - $author_handle = $this->getHandle($macro->getAuthorPHID()); 68 - $item->appendChild( 69 - pht('Created by %s', $author_handle->renderLink())); 70 - } 71 - 72 - $item->setURI($this->getApplicationURI('/view/'.$macro->getID().'/')); 73 - 74 - $name = $macro->getName(); 75 - if ($macro->getIsDisabled()) { 76 - $name = pht('%s (Disabled)', $name); 77 - } 78 - $item->setHeader($name); 79 - 80 - $pinboard->addItem($item); 81 - } 82 - 83 - return $pinboard; 84 - 85 - } 86 25 }
+65
src/applications/macro/query/PhabricatorMacroSearchEngine.php
··· 3 3 final class PhabricatorMacroSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationMacro'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 $saved->setParameter( ··· 151 155 } 152 156 153 157 return parent::buildSavedQueryFromBuiltin($query_key); 158 + } 159 + 160 + protected function getRequiredHandlePHIDsForResultList( 161 + array $macros, 162 + PhabricatorSavedQuery $query) { 163 + return mpull($macros, 'getAuthorPHID'); 164 + } 165 + 166 + protected function renderResultList( 167 + array $macros, 168 + PhabricatorSavedQuery $query, 169 + array $handles) { 170 + 171 + assert_instances_of($macros, 'PhabricatorFileImageMacro'); 172 + $viewer = $this->requireViewer(); 173 + 174 + $pinboard = new PHUIPinboardView(); 175 + foreach ($macros as $macro) { 176 + $file = $macro->getFile(); 177 + 178 + $item = new PHUIPinboardItemView(); 179 + if ($file) { 180 + $item->setImageURI($file->getThumb280x210URI()); 181 + $item->setImageSize(280, 210); 182 + } 183 + 184 + if ($macro->getDateCreated()) { 185 + $datetime = phabricator_date($macro->getDateCreated(), $viewer); 186 + $item->appendChild( 187 + phutil_tag( 188 + 'div', 189 + array(), 190 + pht('Created on %s', $datetime))); 191 + } else { 192 + // Very old macros don't have a creation date. Rendering something 193 + // keeps all the pins at the same height and avoids flow issues. 194 + $item->appendChild( 195 + phutil_tag( 196 + 'div', 197 + array(), 198 + pht('Created in ages long past'))); 199 + } 200 + 201 + if ($macro->getAuthorPHID()) { 202 + $author_handle = $handles[$macro->getAuthorPHID()]; 203 + $item->appendChild( 204 + pht('Created by %s', $author_handle->renderLink())); 205 + } 206 + 207 + $item->setURI($this->getApplicationURI('/view/'.$macro->getID().'/')); 208 + 209 + $name = $macro->getName(); 210 + if ($macro->getIsDisabled()) { 211 + $name = pht('%s (Disabled)', $name); 212 + } 213 + $item->setHeader($name); 214 + 215 + $pinboard->addItem($item); 216 + } 217 + 218 + return $pinboard; 154 219 } 155 220 156 221 }
+1 -26
src/applications/mailinglists/controller/PhabricatorMailingListsListController.php
··· 1 1 <?php 2 2 3 3 final class PhabricatorMailingListsListController 4 - extends PhabricatorMailingListsController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 4 + extends PhabricatorMailingListsController { 6 5 7 6 private $queryKey; 8 7 ··· 22 21 ->setNavigation($this->buildSideNavView()); 23 22 24 23 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $lists, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($lists, 'PhabricatorMetaMTAMailingList'); 31 - 32 - $view = id(new PHUIObjectItemListView()); 33 - 34 - foreach ($lists as $list) { 35 - $item = new PHUIObjectItemView(); 36 - 37 - $item->setHeader($list->getName()); 38 - $item->setHref($list->getURI()); 39 - $item->addAttribute($list->getEmail()); 40 - $item->addAction( 41 - id(new PHUIListItemView()) 42 - ->setIcon('edit') 43 - ->setHref($this->getApplicationURI('/edit/'.$list->getID().'/'))); 44 - 45 - $view->addItem($item); 46 - } 47 - 48 - return $view; 49 24 } 50 25 51 26 }
+29
src/applications/mailinglists/query/PhabricatorMailingListSearchEngine.php
··· 3 3 final class PhabricatorMailingListSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationMailingLists'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 49 53 } 50 54 51 55 return parent::buildSavedQueryFromBuiltin($query_key); 56 + } 57 + 58 + protected function renderResultList( 59 + array $lists, 60 + PhabricatorSavedQuery $query, 61 + array $handles) { 62 + assert_instances_of($lists, 'PhabricatorMetaMTAMailingList'); 63 + 64 + $view = id(new PHUIObjectItemListView()); 65 + 66 + foreach ($lists as $list) { 67 + $item = new PHUIObjectItemView(); 68 + 69 + $item->setHeader($list->getName()); 70 + $item->setHref($list->getURI()); 71 + $item->addAttribute($list->getEmail()); 72 + $item->addAction( 73 + id(new PHUIListItemView()) 74 + ->setIcon('edit') 75 + ->setHref($this->getApplicationURI('/edit/'.$list->getID().'/'))); 76 + 77 + $view->addItem($item); 78 + } 79 + 80 + return $view; 52 81 } 53 82 54 83 }
+1 -31
src/applications/meta/controller/PhabricatorApplicationsListController.php
··· 1 1 <?php 2 2 3 3 final class PhabricatorApplicationsListController 4 - extends PhabricatorApplicationsController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 4 + extends PhabricatorApplicationsController { 6 5 7 6 private $queryKey; 8 7 ··· 19 18 20 19 return $this->delegateToController($controller); 21 20 } 22 - 23 - public function renderResultsList( 24 - array $applications, 25 - PhabricatorSavedQuery $query) { 26 - assert_instances_of($applications, 'PhabricatorApplication'); 27 - 28 - $list = new PHUIObjectItemListView(); 29 - 30 - $applications = msort($applications, 'getName'); 31 - 32 - foreach ($applications as $application) { 33 - $item = id(new PHUIObjectItemView()) 34 - ->setHeader($application->getName()) 35 - ->setHref('/applications/view/'.get_class($application).'/') 36 - ->addAttribute($application->getShortDescription()); 37 - 38 - if (!$application->isInstalled()) { 39 - $item->addIcon('delete', pht('Uninstalled')); 40 - } 41 - 42 - if ($application->isBeta()) { 43 - $item->addIcon('lint-warning', pht('Beta')); 44 - } 45 - 46 - $list->addItem($item); 47 - } 48 - 49 - return $list; 50 - } 51 21 52 22 }
+34
src/applications/meta/query/PhabricatorAppSearchEngine.php
··· 3 3 final class PhabricatorAppSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationApplications'; 8 + } 9 + 6 10 public function getPageSize(PhabricatorSavedQuery $saved) { 7 11 return INF; 8 12 } ··· 122 126 } 123 127 124 128 return parent::buildSavedQueryFromBuiltin($query_key); 129 + } 130 + 131 + protected function renderResultList( 132 + array $applications, 133 + PhabricatorSavedQuery $query, 134 + array $handle) { 135 + assert_instances_of($applications, 'PhabricatorApplication'); 136 + 137 + $list = new PHUIObjectItemListView(); 138 + 139 + $applications = msort($applications, 'getName'); 140 + 141 + foreach ($applications as $application) { 142 + $item = id(new PHUIObjectItemView()) 143 + ->setHeader($application->getName()) 144 + ->setHref('/applications/view/'.get_class($application).'/') 145 + ->addAttribute($application->getShortDescription()); 146 + 147 + if (!$application->isInstalled()) { 148 + $item->addIcon('delete', pht('Uninstalled')); 149 + } 150 + 151 + if ($application->isBeta()) { 152 + $item->addIcon('lint-warning', pht('Beta')); 153 + } 154 + 155 + $list->addItem($item); 156 + } 157 + 158 + return $list; 125 159 } 126 160 127 161 }
+1 -28
src/applications/oauthserver/controller/client/PhabricatorOAuthClientListController.php
··· 1 1 <?php 2 2 3 3 final class PhabricatorOAuthClientListController 4 - extends PhabricatorOAuthClientBaseController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 4 + extends PhabricatorOAuthClientBaseController { 6 5 7 6 private $queryKey; 8 7 ··· 22 21 ->setNavigation($this->buildSideNavView()); 23 22 24 23 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $clients, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($clients, 'PhabricatorOauthServerClient'); 31 - 32 - $viewer = $this->getRequest()->getUser(); 33 - $this->loadHandles(mpull($clients, 'getCreatorPHID')); 34 - 35 - $list = id(new PHUIObjectItemListView()) 36 - ->setUser($viewer); 37 - foreach ($clients as $client) { 38 - $creator = $this->getHandle($client->getCreatorPHID()); 39 - 40 - $item = id(new PHUIObjectItemView()) 41 - ->setObjectName(pht('Application %d', $client->getID())) 42 - ->setHeader($client->getName()) 43 - ->setHref($client->getViewURI()) 44 - ->setObject($client) 45 - ->addByline(pht('Creator: %s', $creator->renderLink())); 46 - 47 - $list->addItem($item); 48 - } 49 - 50 - return $list; 51 24 } 52 25 53 26 public function buildApplicationCrumbs() {
+37
src/applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php
··· 3 3 final class PhabricatorOAuthServerClientSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationOAuthServer'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 74 78 } 75 79 76 80 return parent::buildSavedQueryFromBuiltin($query_key); 81 + } 82 + 83 + 84 + protected function getRequiredHandlePHIDsForResultList( 85 + array $clients, 86 + PhabricatorSavedQuery $query) { 87 + return mpull($clients, 'getCreatorPHID'); 88 + } 89 + 90 + protected function renderResultList( 91 + array $clients, 92 + PhabricatorSavedQuery $query, 93 + array $handles) { 94 + assert_instances_of($clients, 'PhabricatorOauthServerClient'); 95 + 96 + $viewer = $this->requireViewer(); 97 + 98 + $list = id(new PHUIObjectItemListView()) 99 + ->setUser($viewer); 100 + foreach ($clients as $client) { 101 + $creator = $handles[$client->getCreatorPHID()]; 102 + 103 + $item = id(new PHUIObjectItemView()) 104 + ->setObjectName(pht('Application %d', $client->getID())) 105 + ->setHeader($client->getName()) 106 + ->setHref($client->getViewURI()) 107 + ->setObject($client) 108 + ->addByline(pht('Creator: %s', $creator->renderLink())); 109 + 110 + $list->addItem($item); 111 + } 112 + 113 + return $list; 77 114 } 78 115 79 116 }
+1 -39
src/applications/passphrase/controller/PassphraseCredentialListController.php
··· 1 1 <?php 2 2 3 - final class PassphraseCredentialListController extends PassphraseController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PassphraseCredentialListController extends PassphraseController { 5 4 6 5 private $queryKey; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $credentials, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($credentials, 'PassphraseCredential'); 30 - 31 - $viewer = $this->getRequest()->getUser(); 32 - 33 - $list = new PHUIObjectItemListView(); 34 - $list->setUser($viewer); 35 - foreach ($credentials as $credential) { 36 - 37 - $item = id(new PHUIObjectItemView()) 38 - ->setObjectName('K'.$credential->getID()) 39 - ->setHeader($credential->getName()) 40 - ->setHref('/K'.$credential->getID()) 41 - ->setObject($credential); 42 - 43 - $item->addAttribute( 44 - pht('Login: %s', $credential->getUsername())); 45 - 46 - if ($credential->getIsDestroyed()) { 47 - $item->addIcon('disable', pht('Destroyed')); 48 - $item->setDisabled(true); 49 - } 50 - 51 - $type = PassphraseCredentialType::getTypeByConstant( 52 - $credential->getCredentialType()); 53 - if ($type) { 54 - $item->addIcon('wrench', $type->getCredentialTypeName()); 55 - } 56 - 57 - $list->addItem($item); 58 - } 59 - 60 - return $list; 61 23 } 62 24 63 25 }
+43
src/applications/passphrase/query/PassphraseCredentialSearchEngine.php
··· 3 3 final class PassphraseCredentialSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationPassphrase'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 69 73 70 74 return parent::buildSavedQueryFromBuiltin($query_key); 71 75 } 76 + 77 + protected function renderResultList( 78 + array $credentials, 79 + PhabricatorSavedQuery $query, 80 + array $handles) { 81 + assert_instances_of($credentials, 'PassphraseCredential'); 82 + 83 + $viewer = $this->requireViewer(); 84 + 85 + $list = new PHUIObjectItemListView(); 86 + $list->setUser($viewer); 87 + foreach ($credentials as $credential) { 88 + 89 + $item = id(new PHUIObjectItemView()) 90 + ->setObjectName('K'.$credential->getID()) 91 + ->setHeader($credential->getName()) 92 + ->setHref('/K'.$credential->getID()) 93 + ->setObject($credential); 94 + 95 + $item->addAttribute( 96 + pht('Login: %s', $credential->getUsername())); 97 + 98 + if ($credential->getIsDestroyed()) { 99 + $item->addIcon('disable', pht('Destroyed')); 100 + $item->setDisabled(true); 101 + } 102 + 103 + $type = PassphraseCredentialType::getTypeByConstant( 104 + $credential->getCredentialType()); 105 + if ($type) { 106 + $item->addIcon('wrench', $type->getCredentialTypeName()); 107 + } 108 + 109 + $list->addItem($item); 110 + } 111 + 112 + return $list; 113 + } 114 + 72 115 73 116 }
-3
src/applications/pholio/application/PhabricatorApplicationPholio.php
··· 1 1 <?php 2 2 3 - /** 4 - * @group pholio 5 - */ 6 3 final class PhabricatorApplicationPholio extends PhabricatorApplication { 7 4 8 5 public function getBaseURI() {
+1 -39
src/applications/pholio/controller/PholioMockListController.php
··· 1 1 <?php 2 2 3 - final class PholioMockListController 4 - extends PholioController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PholioMockListController extends PholioController { 6 4 7 5 private $queryKey; 8 6 ··· 22 20 ->setNavigation($this->buildSideNavView()); 23 21 24 22 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $mocks, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($mocks, 'PholioMock'); 31 - 32 - $viewer = $this->getRequest()->getUser(); 33 - 34 - $author_phids = array(); 35 - foreach ($mocks as $mock) { 36 - $author_phids[] = $mock->getAuthorPHID(); 37 - } 38 - $this->loadHandles($author_phids); 39 - 40 - $board = new PHUIPinboardView(); 41 - foreach ($mocks as $mock) { 42 - $item = id(new PHUIPinboardItemView()) 43 - ->setHeader('M'.$mock->getID().' '.$mock->getName()) 44 - ->setURI('/M'.$mock->getID()) 45 - ->setImageURI($mock->getCoverFile()->getThumb280x210URI()) 46 - ->setImageSize(280, 210) 47 - ->addIconCount('image', count($mock->getImages())) 48 - ->addIconCount('like', $mock->getTokenCount()); 49 - 50 - if ($mock->getAuthorPHID()) { 51 - $author_handle = $this->getHandle($mock->getAuthorPHID()); 52 - $datetime = phabricator_date($mock->getDateCreated(), $viewer); 53 - $item->appendChild( 54 - pht('By %s on %s', $author_handle->renderLink(), $datetime)); 55 - } 56 - 57 - $board->addItem($item); 58 - } 59 - 60 - return $board; 61 23 } 62 24 63 25 }
+41
src/applications/pholio/query/PholioMockSearchEngine.php
··· 3 3 final class PholioMockSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationPholio'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 $saved->setParameter( ··· 72 76 } 73 77 74 78 return parent::buildSavedQueryFromBuiltin($query_key); 79 + } 80 + 81 + protected function getRequiredHandlePHIDsForResultList( 82 + array $mocks, 83 + PhabricatorSavedQuery $query) { 84 + return mpull($mocks, 'getAuthorPHID'); 85 + } 86 + 87 + protected function renderResultList( 88 + array $mocks, 89 + PhabricatorSavedQuery $query, 90 + array $handles) { 91 + assert_instances_of($mocks, 'PholioMock'); 92 + 93 + $viewer = $this->requireViewer(); 94 + 95 + $board = new PHUIPinboardView(); 96 + foreach ($mocks as $mock) { 97 + $item = id(new PHUIPinboardItemView()) 98 + ->setHeader('M'.$mock->getID().' '.$mock->getName()) 99 + ->setURI('/M'.$mock->getID()) 100 + ->setImageURI($mock->getCoverFile()->getThumb280x210URI()) 101 + ->setImageSize(280, 210) 102 + ->addIconCount('image', count($mock->getImages())) 103 + ->addIconCount('like', $mock->getTokenCount()); 104 + 105 + if ($mock->getAuthorPHID()) { 106 + $author_handle = $handles[$mock->getAuthorPHID()]; 107 + $datetime = phabricator_date($mock->getDateCreated(), $viewer); 108 + $item->appendChild( 109 + pht('By %s on %s', $author_handle->renderLink(), $datetime)); 110 + } 111 + 112 + $board->addItem($item); 113 + } 114 + 115 + return $board; 75 116 } 76 117 77 118 }
+1 -84
src/applications/phrequent/controller/PhrequentListController.php
··· 1 1 <?php 2 2 3 - final class PhrequentListController extends PhrequentController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PhrequentListController extends PhrequentController { 5 4 6 5 private $queryKey; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $usertimes, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($usertimes, 'PhrequentUserTime'); 30 - $viewer = $this->getRequest()->getUser(); 31 - 32 - $phids = array(); 33 - $phids[] = mpull($usertimes, 'getUserPHID'); 34 - $phids[] = mpull($usertimes, 'getObjectPHID'); 35 - $phids = array_mergev($phids); 36 - 37 - $handles = $this->loadViewerHandles($phids); 38 - 39 - $view = id(new PHUIObjectItemListView()) 40 - ->setUser($viewer); 41 - 42 - foreach ($usertimes as $usertime) { 43 - $item = new PHUIObjectItemView(); 44 - 45 - if ($usertime->getObjectPHID() === null) { 46 - $item->setHeader($usertime->getNote()); 47 - } else { 48 - $obj = $handles[$usertime->getObjectPHID()]; 49 - $item->setHeader($obj->getLinkName()); 50 - $item->setHref($obj->getURI()); 51 - } 52 - $item->setObject($usertime); 53 - 54 - $item->addByline( 55 - pht( 56 - 'Tracked: %s', 57 - $handles[$usertime->getUserPHID()]->renderLink())); 58 - 59 - $started_date = phabricator_date($usertime->getDateStarted(), $viewer); 60 - $item->addIcon('none', $started_date); 61 - 62 - if ($usertime->getDateEnded() !== null) { 63 - $time_spent = $usertime->getDateEnded() - $usertime->getDateStarted(); 64 - $time_ended = phabricator_datetime($usertime->getDateEnded(), $viewer); 65 - } else { 66 - $time_spent = time() - $usertime->getDateStarted(); 67 - } 68 - 69 - $time_spent = $time_spent == 0 ? 'none' : 70 - phabricator_format_relative_time_detailed($time_spent); 71 - 72 - if ($usertime->getDateEnded() !== null) { 73 - $item->addAttribute( 74 - pht( 75 - 'Tracked %s', 76 - $time_spent)); 77 - $item->addAttribute( 78 - pht( 79 - 'Ended on %s', 80 - $time_ended)); 81 - } else { 82 - $item->addAttribute( 83 - pht( 84 - 'Tracked %s so far', 85 - $time_spent)); 86 - if ($usertime->getObjectPHID() !== null && 87 - $usertime->getUserPHID() === $viewer->getPHID()) { 88 - $item->addAction( 89 - id(new PHUIListItemView()) 90 - ->setIcon('history') 91 - ->addSigil('phrequent-stop-tracking') 92 - ->setWorkflow(true) 93 - ->setRenderNameAsTooltip(true) 94 - ->setName(pht("Stop")) 95 - ->setHref( 96 - '/phrequent/track/stop/'. 97 - $usertime->getObjectPHID().'/')); 98 - } 99 - $item->setBarColor('green'); 100 - } 101 - 102 - $view->addItem($item); 103 - } 104 - 105 - return $view; 106 23 } 107 24 108 25 }
+89
src/applications/phrequent/query/PhrequentSearchEngine.php
··· 3 3 final class PhrequentSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationPhrequent'; 8 + } 9 + 6 10 public function getPageSize(PhabricatorSavedQuery $saved) { 7 11 return $saved->getParameter('limit', 1000); 8 12 } ··· 110 114 return parent::buildSavedQueryFromBuiltin($query_key); 111 115 } 112 116 117 + protected function getRequiredHandlePHIDsForResultList( 118 + array $usertimes, 119 + PhabricatorSavedQuery $query) { 120 + return array_mergev( 121 + array( 122 + mpull($usertimes, 'getUserPHID'), 123 + mpull($usertimes, 'getObjectPHID'), 124 + )); 125 + } 126 + 127 + protected function renderResultList( 128 + array $usertimes, 129 + PhabricatorSavedQuery $query, 130 + array $handles) { 131 + assert_instances_of($usertimes, 'PhrequentUserTime'); 132 + $viewer = $this->requireViewer(); 133 + 134 + $view = id(new PHUIObjectItemListView()) 135 + ->setUser($viewer); 136 + 137 + foreach ($usertimes as $usertime) { 138 + $item = new PHUIObjectItemView(); 139 + 140 + if ($usertime->getObjectPHID() === null) { 141 + $item->setHeader($usertime->getNote()); 142 + } else { 143 + $obj = $handles[$usertime->getObjectPHID()]; 144 + $item->setHeader($obj->getLinkName()); 145 + $item->setHref($obj->getURI()); 146 + } 147 + $item->setObject($usertime); 148 + 149 + $item->addByline( 150 + pht( 151 + 'Tracked: %s', 152 + $handles[$usertime->getUserPHID()]->renderLink())); 153 + 154 + $started_date = phabricator_date($usertime->getDateStarted(), $viewer); 155 + $item->addIcon('none', $started_date); 156 + 157 + if ($usertime->getDateEnded() !== null) { 158 + $time_spent = $usertime->getDateEnded() - $usertime->getDateStarted(); 159 + $time_ended = phabricator_datetime($usertime->getDateEnded(), $viewer); 160 + } else { 161 + $time_spent = time() - $usertime->getDateStarted(); 162 + } 163 + 164 + $time_spent = $time_spent == 0 ? 'none' : 165 + phabricator_format_relative_time_detailed($time_spent); 166 + 167 + if ($usertime->getDateEnded() !== null) { 168 + $item->addAttribute( 169 + pht( 170 + 'Tracked %s', 171 + $time_spent)); 172 + $item->addAttribute( 173 + pht( 174 + 'Ended on %s', 175 + $time_ended)); 176 + } else { 177 + $item->addAttribute( 178 + pht( 179 + 'Tracked %s so far', 180 + $time_spent)); 181 + if ($usertime->getObjectPHID() !== null && 182 + $usertime->getUserPHID() === $viewer->getPHID()) { 183 + $item->addAction( 184 + id(new PHUIListItemView()) 185 + ->setIcon('history') 186 + ->addSigil('phrequent-stop-tracking') 187 + ->setWorkflow(true) 188 + ->setRenderNameAsTooltip(true) 189 + ->setName(pht("Stop")) 190 + ->setHref( 191 + '/phrequent/track/stop/'. 192 + $usertime->getObjectPHID().'/')); 193 + } 194 + $item->setBarColor('green'); 195 + } 196 + 197 + $view->addItem($item); 198 + } 199 + 200 + return $view; 201 + } 113 202 }
+1 -66
src/applications/phriction/controller/PhrictionListController.php
··· 1 1 <?php 2 2 3 3 final class PhrictionListController 4 - extends PhrictionController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 4 + extends PhrictionController { 6 5 7 6 private $queryKey; 8 7 ··· 22 21 ->setNavigation($this->buildSideNavView()); 23 22 24 23 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $documents, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($documents, 'PhrictionDocument'); 31 - 32 - $viewer = $this->getRequest()->getUser(); 33 - 34 - $phids = array(); 35 - foreach ($documents as $document) { 36 - $content = $document->getContent(); 37 - if ($document->hasProject()) { 38 - $phids[] = $document->getProject()->getPHID(); 39 - } 40 - $phids[] = $content->getAuthorPHID(); 41 - } 42 - 43 - $this->loadHandles($phids); 44 - 45 - $list = new PHUIObjectItemListView(); 46 - $list->setUser($viewer); 47 - foreach ($documents as $document) { 48 - $content = $document->getContent(); 49 - $slug = $document->getSlug(); 50 - $author_phid = $content->getAuthorPHID(); 51 - $slug_uri = PhrictionDocument::getSlugURI($slug); 52 - 53 - $byline = pht( 54 - 'Edited by %s', 55 - $this->getHandle($author_phid)->renderLink()); 56 - 57 - $updated = phabricator_datetime( 58 - $content->getDateCreated(), 59 - $viewer); 60 - 61 - $item = id(new PHUIObjectItemView()) 62 - ->setHeader($content->getTitle()) 63 - ->setHref($slug_uri) 64 - ->addByline($byline) 65 - ->addIcon('none', $updated); 66 - 67 - if ($document->hasProject()) { 68 - $item->addAttribute( 69 - $this->getHandle($document->getProject()->getPHID())->renderLink()); 70 - } 71 - 72 - $item->addAttribute($slug_uri); 73 - 74 - switch ($document->getStatus()) { 75 - case PhrictionDocumentStatus::STATUS_DELETED: 76 - $item->setDisabled(true); 77 - $item->addIcon('delete', pht('Deleted')); 78 - break; 79 - case PhrictionDocumentStatus::STATUS_MOVED: 80 - $item->setDisabled(true); 81 - $item->addIcon('arrow-right', pht('Moved Away')); 82 - break; 83 - } 84 - 85 - $list->addItem($item); 86 - } 87 - 88 - return $list; 89 24 } 90 25 91 26 }
+71
src/applications/phriction/query/PhrictionSearchEngine.php
··· 109 109 ); 110 110 } 111 111 112 + protected function getRequiredHandlePHIDsForResultList( 113 + array $documents, 114 + PhabricatorSavedQuery $query) { 115 + 116 + $phids = array(); 117 + foreach ($documents as $document) { 118 + $content = $document->getContent(); 119 + if ($document->hasProject()) { 120 + $phids[] = $document->getProject()->getPHID(); 121 + } 122 + $phids[] = $content->getAuthorPHID(); 123 + } 124 + 125 + return $phids; 126 + } 127 + 128 + 129 + protected function renderResultList( 130 + array $documents, 131 + PhabricatorSavedQuery $query, 132 + array $handles) { 133 + assert_instances_of($documents, 'PhrictionDocument'); 134 + 135 + $viewer = $this->requireViewer(); 136 + 137 + $list = new PHUIObjectItemListView(); 138 + $list->setUser($viewer); 139 + foreach ($documents as $document) { 140 + $content = $document->getContent(); 141 + $slug = $document->getSlug(); 142 + $author_phid = $content->getAuthorPHID(); 143 + $slug_uri = PhrictionDocument::getSlugURI($slug); 144 + 145 + $byline = pht( 146 + 'Edited by %s', 147 + $handles[$author_phid]->renderLink()); 148 + 149 + $updated = phabricator_datetime( 150 + $content->getDateCreated(), 151 + $viewer); 152 + 153 + $item = id(new PHUIObjectItemView()) 154 + ->setHeader($content->getTitle()) 155 + ->setHref($slug_uri) 156 + ->addByline($byline) 157 + ->addIcon('none', $updated); 158 + 159 + if ($document->hasProject()) { 160 + $item->addAttribute( 161 + $handles[$document->getProject()->getPHID()]->renderLink()); 162 + } 163 + 164 + $item->addAttribute($slug_uri); 165 + 166 + switch ($document->getStatus()) { 167 + case PhrictionDocumentStatus::STATUS_DELETED: 168 + $item->setDisabled(true); 169 + $item->addIcon('delete', pht('Deleted')); 170 + break; 171 + case PhrictionDocumentStatus::STATUS_MOVED: 172 + $item->setDisabled(true); 173 + $item->addIcon('arrow-right', pht('Moved Away')); 174 + break; 175 + } 176 + 177 + $list->addItem($item); 178 + } 179 + 180 + return $list; 181 + } 182 + 112 183 }
+1 -44
src/applications/ponder/controller/PonderQuestionListController.php
··· 1 1 <?php 2 2 3 - final class PonderQuestionListController extends PonderController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PonderQuestionListController extends PonderController { 5 4 6 5 private $queryKey; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $questions, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($questions, 'PonderQuestion'); 30 - $viewer = $this->getRequest()->getUser(); 31 - 32 - $phids = array(); 33 - $phids[] = mpull($questions, 'getAuthorPHID'); 34 - $phids = array_mergev($phids); 35 - 36 - $handles = $this->loadViewerHandles($phids); 37 - 38 - 39 - $view = id(new PHUIObjectItemListView()) 40 - ->setUser($viewer); 41 - 42 - foreach ($questions as $question) { 43 - $item = new PHUIObjectItemView(); 44 - $item->setObjectName('Q'.$question->getID()); 45 - $item->setHeader($question->getTitle()); 46 - $item->setHref('/Q'.$question->getID()); 47 - $item->setObject($question); 48 - $item->setBarColor( 49 - PonderQuestionStatus::getQuestionStatusTagColor( 50 - $question->getStatus())); 51 - 52 - $created_date = phabricator_date($question->getDateCreated(), $viewer); 53 - $item->addIcon('none', $created_date); 54 - $item->addByline( 55 - pht( 56 - 'Asked by %s', 57 - $handles[$question->getAuthorPHID()]->renderLink())); 58 - 59 - $item->addAttribute( 60 - pht('%d Answer(s)', $question->getAnswerCount())); 61 - 62 - $view->addItem($item); 63 - } 64 - 65 - return $view; 66 23 } 67 24 68 25 }
+47
src/applications/ponder/query/PonderQuestionSearchEngine.php
··· 3 3 final class PonderQuestionSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationPonder'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 122 126 } 123 127 124 128 return parent::buildSavedQueryFromBuiltin($query_key); 129 + } 130 + 131 + protected function getRequiredHandlePHIDsForResultList( 132 + array $questions, 133 + PhabricatorSavedQuery $query) { 134 + return mpull($questions, 'getAuthorPHID'); 135 + } 136 + 137 + protected function renderResultList( 138 + array $questions, 139 + PhabricatorSavedQuery $query, 140 + array $handles) { 141 + assert_instances_of($questions, 'PonderQuestion'); 142 + 143 + $viewer = $this->requireViewer(); 144 + 145 + $view = id(new PHUIObjectItemListView()) 146 + ->setUser($viewer); 147 + 148 + foreach ($questions as $question) { 149 + $item = new PHUIObjectItemView(); 150 + $item->setObjectName('Q'.$question->getID()); 151 + $item->setHeader($question->getTitle()); 152 + $item->setHref('/Q'.$question->getID()); 153 + $item->setObject($question); 154 + $item->setBarColor( 155 + PonderQuestionStatus::getQuestionStatusTagColor( 156 + $question->getStatus())); 157 + 158 + $created_date = phabricator_date($question->getDateCreated(), $viewer); 159 + $item->addIcon('none', $created_date); 160 + $item->addByline( 161 + pht( 162 + 'Asked by %s', 163 + $handles[$question->getAuthorPHID()]->renderLink())); 164 + 165 + $item->addAttribute( 166 + pht('%d Answer(s)', $question->getAnswerCount())); 167 + 168 + $view->addItem($item); 169 + } 170 + 171 + return $view; 125 172 } 126 173 127 174 }
+1 -29
src/applications/project/controller/PhabricatorProjectListController.php
··· 1 1 <?php 2 2 3 3 final class PhabricatorProjectListController 4 - extends PhabricatorProjectController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 4 + extends PhabricatorProjectController { 6 5 7 6 private $queryKey; 8 7 ··· 22 21 ->setNavigation($this->buildSideNavView()); 23 22 24 23 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $projects, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($projects, 'PhabricatorProject'); 31 - $viewer = $this->getRequest()->getUser(); 32 - 33 - $list = new PHUIObjectItemListView(); 34 - $list->setUser($viewer); 35 - foreach ($projects as $project) { 36 - $id = $project->getID(); 37 - 38 - $item = id(new PHUIObjectItemView()) 39 - ->setHeader($project->getName()) 40 - ->setHref($this->getApplicationURI("view/{$id}/")) 41 - ->setImageURI($project->getProfileImageURI()); 42 - 43 - if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) { 44 - $item->addIcon('delete-grey', pht('Archived')); 45 - $item->setDisabled(true); 46 - } 47 - 48 - $list->addItem($item); 49 - } 50 - 51 - return $list; 52 24 } 53 25 54 26 public function buildApplicationCrumbs() {
+32
src/applications/project/query/PhabricatorProjectSearchEngine.php
··· 3 3 final class PhabricatorProjectSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationProject'; 8 + } 9 + 6 10 public function getCustomFieldObject() { 7 11 return new PhabricatorProject(); 8 12 } ··· 120 124 'active' => PhabricatorProjectQuery::STATUS_ACTIVE, 121 125 'all' => PhabricatorProjectQuery::STATUS_ANY, 122 126 ); 127 + } 128 + 129 + protected function renderResultList( 130 + array $projects, 131 + PhabricatorSavedQuery $query, 132 + array $handles) { 133 + assert_instances_of($projects, 'PhabricatorProject'); 134 + $viewer = $this->requireViewer(); 135 + 136 + $list = new PHUIObjectItemListView(); 137 + $list->setUser($viewer); 138 + foreach ($projects as $project) { 139 + $id = $project->getID(); 140 + 141 + $item = id(new PHUIObjectItemView()) 142 + ->setHeader($project->getName()) 143 + ->setHref($this->getApplicationURI("view/{$id}/")) 144 + ->setImageURI($project->getProfileImageURI()); 145 + 146 + if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) { 147 + $item->addIcon('delete-grey', pht('Archived')); 148 + $item->setDisabled(true); 149 + } 150 + 151 + $list->addItem($item); 152 + } 153 + 154 + return $list; 123 155 } 124 156 125 157 }