Skip to content

Commit 508a2a1

Browse files
author
Chad Little
committed
Basic Conpherence Search in Thread
Summary: Adds a search bar toggle and results for searching inside a Conpherence Room. The UI of the results itself are not styled yet, and will follow up with another diff. Test Plan: Go to Conpherence, search for "asdf", get lots of results. Search for nothing, get no change, search for something fictitious, get no threads found (will follow up with search result UI). Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D16697
1 parent c2411e3 commit 508a2a1

File tree

16 files changed

+340
-93
lines changed

16 files changed

+340
-93
lines changed

resources/celerity/map.php

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
*/
88
return array(
99
'names' => array(
10-
'conpherence.pkg.css' => '4601645d',
11-
'conpherence.pkg.js' => '44dd69f5',
12-
'core.pkg.css' => '7ca260a3',
10+
'conpherence.pkg.css' => 'c839a862',
11+
'conpherence.pkg.js' => 'b18c9dc5',
12+
'core.pkg.css' => 'b99bbf5e',
1313
'core.pkg.js' => '30185d95',
1414
'darkconsole.pkg.js' => 'e7393ebb',
1515
'differential.pkg.css' => 'e1d704ce',
@@ -47,13 +47,12 @@
4747
'rsrc/css/application/config/setup-issue.css' => 'f794cfc3',
4848
'rsrc/css/application/config/unhandled-exception.css' => '4c96257a',
4949
'rsrc/css/application/conpherence/durable-column.css' => '44bcaa19',
50-
'rsrc/css/application/conpherence/header-pane.css' => '20a7028c',
50+
'rsrc/css/application/conpherence/header-pane.css' => 'e8acbd37',
5151
'rsrc/css/application/conpherence/menu.css' => '4f51db5a',
52-
'rsrc/css/application/conpherence/message-pane.css' => '0d7dff02',
52+
'rsrc/css/application/conpherence/message-pane.css' => 'eff20ae7',
5353
'rsrc/css/application/conpherence/notification.css' => '965db05b',
5454
'rsrc/css/application/conpherence/participant-pane.css' => '7bba0b56',
5555
'rsrc/css/application/conpherence/transaction.css' => '46253e19',
56-
'rsrc/css/application/conpherence/update.css' => '53bc527a',
5756
'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
5857
'rsrc/css/application/countdown/timer.css' => '16c52f5c',
5958
'rsrc/css/application/daemon/bulk-job.css' => 'df9c1d4a',
@@ -110,7 +109,7 @@
110109
'rsrc/css/core/core.css' => 'd0801452',
111110
'rsrc/css/core/remarkup.css' => 'cd912f2c',
112111
'rsrc/css/core/syntax.css' => '769d3498',
113-
'rsrc/css/core/z-index.css' => '0d4e5558',
112+
'rsrc/css/core/z-index.css' => 'd1270942',
114113
'rsrc/css/diviner/diviner-shared.css' => 'aa3656aa',
115114
'rsrc/css/font/font-aleo.css' => '8bdb2835',
116115
'rsrc/css/font/font-awesome.css' => '2b7ebbcc',
@@ -144,7 +143,7 @@
144143
'rsrc/css/phui/phui-header-view.css' => '06385974',
145144
'rsrc/css/phui/phui-hovercard.css' => 'de1a2119',
146145
'rsrc/css/phui/phui-icon-set-selector.css' => '1ab67aad',
147-
'rsrc/css/phui/phui-icon.css' => '9bab6f02',
146+
'rsrc/css/phui/phui-icon.css' => '417f80fb',
148147
'rsrc/css/phui/phui-image-mask.css' => 'a8498f9c',
149148
'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
150149
'rsrc/css/phui/phui-info-view.css' => '28efab79',
@@ -437,8 +436,9 @@
437436
'rsrc/js/application/calendar/behavior-recurring-edit.js' => '5f1c4d5f',
438437
'rsrc/js/application/config/behavior-reorder-fields.js' => 'b6993408',
439438
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '01774ab2',
439+
'rsrc/js/application/conpherence/behavior-conpherence-search.js' => '3bc9d2b1',
440440
'rsrc/js/application/conpherence/behavior-durable-column.js' => 'c5238acb',
441-
'rsrc/js/application/conpherence/behavior-menu.js' => '9eb55204',
441+
'rsrc/js/application/conpherence/behavior-menu.js' => '0f82ba76',
442442
'rsrc/js/application/conpherence/behavior-participant-pane.js' => '8604caa8',
443443
'rsrc/js/application/conpherence/behavior-pontificate.js' => 'f2e58483',
444444
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
@@ -617,14 +617,13 @@
617617
'config-options-css' => '0ede4c9b',
618618
'config-page-css' => '8798e14f',
619619
'conpherence-durable-column-view' => '44bcaa19',
620-
'conpherence-header-pane-css' => '20a7028c',
620+
'conpherence-header-pane-css' => 'e8acbd37',
621621
'conpherence-menu-css' => '4f51db5a',
622-
'conpherence-message-pane-css' => '0d7dff02',
622+
'conpherence-message-pane-css' => 'eff20ae7',
623623
'conpherence-notification-css' => '965db05b',
624624
'conpherence-participant-pane-css' => '7bba0b56',
625625
'conpherence-thread-manager' => '01774ab2',
626626
'conpherence-transaction-css' => '46253e19',
627-
'conpherence-update-css' => '53bc527a',
628627
'd3' => 'a11a5ff2',
629628
'differential-changeset-view-css' => '9ef7d354',
630629
'differential-core-view-css' => '5b7b8ff4',
@@ -664,9 +663,10 @@
664663
'javelin-behavior-choose-control' => '327a00d1',
665664
'javelin-behavior-comment-actions' => '0300eae6',
666665
'javelin-behavior-config-reorder-fields' => 'b6993408',
667-
'javelin-behavior-conpherence-menu' => '9eb55204',
666+
'javelin-behavior-conpherence-menu' => '0f82ba76',
668667
'javelin-behavior-conpherence-participant-pane' => '8604caa8',
669668
'javelin-behavior-conpherence-pontificate' => 'f2e58483',
669+
'javelin-behavior-conpherence-search' => '3bc9d2b1',
670670
'javelin-behavior-countdown-timer' => 'e4cc26b3',
671671
'javelin-behavior-dark-console' => 'f411b6ae',
672672
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
@@ -880,7 +880,7 @@
880880
'phabricator-uiexample-reactor-select' => 'a155550f',
881881
'phabricator-uiexample-reactor-sendclass' => '1def2711',
882882
'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee',
883-
'phabricator-zindex-css' => '0d4e5558',
883+
'phabricator-zindex-css' => 'd1270942',
884884
'phame-css' => '8efb0729',
885885
'pholio-css' => 'ca89d380',
886886
'pholio-edit-css' => '07676f51',
@@ -917,7 +917,7 @@
917917
'phui-hovercard' => '1bd28176',
918918
'phui-hovercard-view-css' => 'de1a2119',
919919
'phui-icon-set-selector-css' => '1ab67aad',
920-
'phui-icon-view-css' => '9bab6f02',
920+
'phui-icon-view-css' => '417f80fb',
921921
'phui-image-mask-css' => 'a8498f9c',
922922
'phui-info-panel-css' => '27ea50a1',
923923
'phui-info-view-css' => '28efab79',
@@ -1072,6 +1072,20 @@
10721072
'javelin-install',
10731073
'javelin-util',
10741074
),
1075+
'0f82ba76' => array(
1076+
'javelin-behavior',
1077+
'javelin-dom',
1078+
'javelin-util',
1079+
'javelin-stratcom',
1080+
'javelin-workflow',
1081+
'javelin-behavior-device',
1082+
'javelin-history',
1083+
'javelin-vector',
1084+
'javelin-scrollbar',
1085+
'phabricator-title',
1086+
'phabricator-shaped-request',
1087+
'conpherence-thread-manager',
1088+
),
10751089
'116cf19b' => array(
10761090
'javelin-behavior',
10771091
'javelin-stratcom',
@@ -1205,6 +1219,13 @@
12051219
'javelin-dom',
12061220
'javelin-magical-init',
12071221
),
1222+
'3bc9d2b1' => array(
1223+
'javelin-behavior',
1224+
'javelin-dom',
1225+
'javelin-util',
1226+
'javelin-workflow',
1227+
'javelin-stratcom',
1228+
),
12081229
'3cb0b2fc' => array(
12091230
'javelin-behavior',
12101231
'javelin-dom',
@@ -1745,20 +1766,6 @@
17451766
'javelin-workflow',
17461767
'javelin-stratcom',
17471768
),
1748-
'9eb55204' => array(
1749-
'javelin-behavior',
1750-
'javelin-dom',
1751-
'javelin-util',
1752-
'javelin-stratcom',
1753-
'javelin-workflow',
1754-
'javelin-behavior-device',
1755-
'javelin-history',
1756-
'javelin-vector',
1757-
'javelin-scrollbar',
1758-
'phabricator-title',
1759-
'phabricator-shaped-request',
1760-
'conpherence-thread-manager',
1761-
),
17621769
'9ef7d354' => array(
17631770
'phui-inline-comment-view-css',
17641771
),
@@ -2292,7 +2299,6 @@
22922299
'conpherence-message-pane-css',
22932300
'conpherence-notification-css',
22942301
'conpherence-transaction-css',
2295-
'conpherence-update-css',
22962302
'conpherence-participant-pane-css',
22972303
'conpherence-header-pane-css',
22982304
),

resources/celerity/packages.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@
157157
'conpherence-message-pane-css',
158158
'conpherence-notification-css',
159159
'conpherence-transaction-css',
160-
'conpherence-update-css',
161160
'conpherence-participant-pane-css',
162161
'conpherence-header-pane-css',
163162
),

src/__phutil_library_map__.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@
320320
'ConpherenceThreadMembersPolicyRule' => 'applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php',
321321
'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php',
322322
'ConpherenceThreadRemarkupRule' => 'applications/conpherence/remarkup/ConpherenceThreadRemarkupRule.php',
323+
'ConpherenceThreadSearchController' => 'applications/conpherence/controller/ConpherenceThreadSearchController.php',
323324
'ConpherenceThreadSearchEngine' => 'applications/conpherence/query/ConpherenceThreadSearchEngine.php',
324325
'ConpherenceThreadTitleNgrams' => 'applications/conpherence/storage/ConpherenceThreadTitleNgrams.php',
325326
'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php',
@@ -4844,6 +4845,7 @@
48444845
'ConpherenceThreadMembersPolicyRule' => 'PhabricatorPolicyRule',
48454846
'ConpherenceThreadQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
48464847
'ConpherenceThreadRemarkupRule' => 'PhabricatorObjectRemarkupRule',
4848+
'ConpherenceThreadSearchController' => 'ConpherenceController',
48474849
'ConpherenceThreadSearchEngine' => 'PhabricatorApplicationSearchEngine',
48484850
'ConpherenceThreadTitleNgrams' => 'PhabricatorSearchNgrams',
48494851
'ConpherenceTransaction' => 'PhabricatorApplicationTransaction',

src/applications/conpherence/application/PhabricatorConpherenceApplication.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public function getRoutes() {
3737
=> 'ConpherenceListController',
3838
'thread/(?P<id>[1-9]\d*)/'
3939
=> 'ConpherenceListController',
40+
'threadsearch/(?P<id>[1-9]\d*)/'
41+
=> 'ConpherenceThreadSearchController',
4042
'(?P<id>[1-9]\d*)/'
4143
=> 'ConpherenceViewController',
4244
'(?P<id>[1-9]\d*)/(?P<messageID>[1-9]\d*)/'

src/applications/conpherence/controller/ConpherenceController.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,20 @@ protected function buildHeaderPaneContent(
113113
->setHref('#')
114114
->addClass('conpherence-participant-toggle'));
115115

116+
Javelin::initBehavior(
117+
'conpherence-search',
118+
array(
119+
'searchURI' => '/conpherence/threadsearch/'.$conpherence->getID().'/',
120+
));
121+
122+
$header->addActionItem(
123+
id(new PHUIIconCircleView())
124+
->addSigil('conpherence-search-toggle')
125+
->setIcon('fa-search')
126+
->setHref('#')
127+
->setColor('green')
128+
->addClass('conpherence-search-toggle'));
129+
116130
if ($can_join && !$participating) {
117131
$action = ConpherenceUpdateActions::JOIN_ROOM;
118132
$uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
@@ -149,4 +163,60 @@ protected function buildHeaderPaneContent(
149163
return $header;
150164
}
151165

166+
public function buildSearchForm() {
167+
$viewer = $this->getViewer();
168+
$conpherence = $this->conpherence;
169+
$name = $conpherence->getTitle();
170+
171+
$bar = javelin_tag(
172+
'input',
173+
array(
174+
'type' => 'text',
175+
'id' => 'conpherence-search-input',
176+
'name' => 'fulltext',
177+
'class' => 'conpherence-search-input',
178+
'sigil' => 'conpherence-search-input',
179+
'placeholder' => pht('Search %s...', $name),
180+
));
181+
182+
$id = $conpherence->getID();
183+
$form = phabricator_form(
184+
$viewer,
185+
array(
186+
'method' => 'POST',
187+
'action' => '/conpherence/threadsearch/'.$id.'/',
188+
'sigil' => 'conpherence-search-form',
189+
'class' => 'conpherence-search-form',
190+
),
191+
array(
192+
$bar,
193+
));
194+
195+
$form_view = phutil_tag(
196+
'div',
197+
array(
198+
'class' => 'conpherence-search-form-view',
199+
),
200+
$form);
201+
202+
$results = phutil_tag(
203+
'div',
204+
array(
205+
'id' => 'conpherence-search-results',
206+
'class' => 'conpherence-search-results',
207+
));
208+
209+
$view = phutil_tag(
210+
'div',
211+
array(
212+
'class' => 'conpherence-search-window',
213+
),
214+
array(
215+
$form_view,
216+
$results,
217+
));
218+
219+
return $view;
220+
}
221+
152222
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
final class ConpherenceThreadSearchController
4+
extends ConpherenceController {
5+
6+
public function shouldAllowPublic() {
7+
return true;
8+
}
9+
10+
public function handleRequest(AphrontRequest $request) {
11+
$viewer = $request->getViewer();
12+
$conpherence_id = $request->getURIData('id');
13+
$fulltext = $request->getStr('fulltext');
14+
15+
$conpherence = id(new ConpherenceThreadQuery())
16+
->setViewer($viewer)
17+
->withIDs(array($conpherence_id))
18+
->executeOne();
19+
20+
if (!$conpherence) {
21+
return new Aphront404Response();
22+
}
23+
24+
$engine = new ConpherenceThreadSearchEngine();
25+
$engine->setViewer($viewer);
26+
$saved = $engine->buildSavedQueryFromBuiltin('all')
27+
->setParameter('phids', array($conpherence->getPHID()))
28+
->setParameter('fulltext', $fulltext);
29+
30+
$pager = $engine->newPagerForSavedQuery($saved);
31+
$pager->setPageSize(15);
32+
33+
$query = $engine->buildQueryFromSavedQuery($saved);
34+
35+
$results = $engine->executeQuery($query, $pager);
36+
$view = $engine->renderResults($results, $saved);
37+
38+
return id(new AphrontAjaxResponse())
39+
->setContent($view->getObjectList());
40+
}
41+
}

src/applications/conpherence/controller/ConpherenceUpdateController.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,6 @@ private function renderAddPersonDialog(
327327
->setUser($user)
328328
->setDatasource(new PhabricatorPeopleDatasource()));
329329

330-
require_celerity_resource('conpherence-update-css');
331330
$view = id(new AphrontDialogView())
332331
->setTitle(pht('Add Participants'))
333332
->addHiddenInput('action', 'add_person')
@@ -407,8 +406,6 @@ private function renderRemovePersonDialog(
407406
}
408407
}
409408

410-
require_celerity_resource('conpherence-update-css');
411-
412409
$dialog = id(new AphrontDialogView())
413410
->setTitle($title)
414411
->addHiddenInput('action', 'remove_person')
@@ -471,7 +468,6 @@ private function renderMetadataDialog(
471468
->setCapability(PhabricatorPolicyCapability::CAN_JOIN)
472469
->setPolicies($policies));
473470

474-
require_celerity_resource('conpherence-update-css');
475471
$view = id(new AphrontDialogView())
476472
->setTitle($title)
477473
->addHiddenInput('action', 'metadata')

src/applications/conpherence/controller/ConpherenceViewController.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,11 @@ public function handleRequest(AphrontRequest $request) {
8989
->setObject($conpherence)
9090
->execute();
9191
$header = $this->buildHeaderPaneContent($conpherence, $policy_objects);
92+
$search = $this->buildSearchForm();
9293
$form = $this->renderFormContent();
9394
$content = array(
9495
'header' => $header,
96+
'search' => $search,
9597
'transactions' => $messages,
9698
'form' => $form,
9799
);
@@ -128,6 +130,7 @@ public function handleRequest(AphrontRequest $request) {
128130
->setBaseURI($this->getApplicationURI())
129131
->setThread($conpherence)
130132
->setHeader($header)
133+
->setSearch($search)
131134
->setMessages($messages)
132135
->setReplyForm($form)
133136
->setLatestTransactionID($data['latest_transaction_id'])

0 commit comments

Comments
 (0)