[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorFeedSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Feed Stories'); 8 } 9 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 $saved = new PhabricatorSavedQuery(); 12 13 $saved->setParameter( 14 'userPHIDs', 15 $this->readUsersFromRequest($request, 'users')); 16 17 $saved->setParameter( 18 'projectPHIDs', 19 array_values($request->getArr('projectPHIDs'))); 20 21 $saved->setParameter( 22 'viewerProjects', 23 $request->getBool('viewerProjects')); 24 25 return $saved; 26 } 27 28 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 29 $query = id(new PhabricatorFeedQuery()); 30 31 $phids = array(); 32 33 $user_phids = $saved->getParameter('userPHIDs'); 34 if ($user_phids) { 35 $phids[] = $user_phids; 36 } 37 38 $proj_phids = $saved->getParameter('projectPHIDs'); 39 if ($proj_phids) { 40 $phids[] = $proj_phids; 41 } 42 43 $viewer_projects = $saved->getParameter('viewerProjects'); 44 if ($viewer_projects) { 45 $viewer = $this->requireViewer(); 46 $projects = id(new PhabricatorProjectQuery()) 47 ->setViewer($viewer) 48 ->withMemberPHIDs(array($viewer->getPHID())) 49 ->execute(); 50 $phids[] = mpull($projects, 'getPHID'); 51 } 52 53 $phids = array_mergev($phids); 54 if ($phids) { 55 $query->setFilterPHIDs($phids); 56 } 57 58 return $query; 59 } 60 61 public function buildSearchForm( 62 AphrontFormView $form, 63 PhabricatorSavedQuery $saved_query) { 64 65 $user_phids = $saved_query->getParameter('userPHIDs', array()); 66 $proj_phids = $saved_query->getParameter('projectPHIDs', array()); 67 68 $phids = array_merge($user_phids, $proj_phids); 69 $handles = id(new PhabricatorHandleQuery()) 70 ->setViewer($this->requireViewer()) 71 ->withPHIDs($phids) 72 ->execute(); 73 $user_handles = array_select_keys($handles, $user_phids); 74 $proj_handles = array_select_keys($handles, $proj_phids); 75 76 $viewer_projects = $saved_query->getParameter('viewerProjects'); 77 78 $form 79 ->appendChild( 80 id(new AphrontFormTokenizerControl()) 81 ->setDatasource(new PhabricatorPeopleDatasource()) 82 ->setName('users') 83 ->setLabel(pht('Include Users')) 84 ->setValue($user_handles)) 85 ->appendChild( 86 id(new AphrontFormTokenizerControl()) 87 ->setDatasource(new PhabricatorProjectDatasource()) 88 ->setName('projectPHIDs') 89 ->setLabel(pht('Include Projects')) 90 ->setValue($proj_handles)) 91 ->appendChild( 92 id(new AphrontFormCheckboxControl()) 93 ->addCheckbox( 94 'viewerProjects', 95 1, 96 pht('Include stories about projects I am a member of.'), 97 $viewer_projects)); 98 } 99 100 protected function getURI($path) { 101 return '/feed/'.$path; 102 } 103 104 public function getBuiltinQueryNames() { 105 $names = array( 106 'all' => pht('All Stories'), 107 ); 108 109 if ($this->requireViewer()->isLoggedIn()) { 110 $names['projects'] = pht('Projects'); 111 } 112 113 return $names; 114 } 115 116 public function buildSavedQueryFromBuiltin($query_key) { 117 118 $query = $this->newSavedQuery(); 119 $query->setQueryKey($query_key); 120 121 switch ($query_key) { 122 case 'all': 123 return $query; 124 case 'projects': 125 return $query->setParameter('viewerProjects', true); 126 } 127 128 return parent::buildSavedQueryFromBuiltin($query_key); 129 } 130 131 protected function renderResultList( 132 array $objects, 133 PhabricatorSavedQuery $query, 134 array $handles) { 135 136 $builder = new PhabricatorFeedBuilder($objects); 137 138 if ($this->isPanelContext()) { 139 $builder->setShowHovercards(false); 140 } else { 141 $builder->setShowHovercards(true); 142 } 143 144 $builder->setUser($this->requireViewer()); 145 $view = $builder->buildView(); 146 147 return phutil_tag_div('phabricator-feed-frame', $view); 148 } 149 150 }
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 |