Skip to content

Commit 1142529

Browse files
committed
DIS-286 feat: BMJ BP combined search
1 parent dd251a5 commit 1142529

File tree

5 files changed

+127
-0
lines changed

5 files changed

+127
-0
lines changed

code/web/RecordDrivers/BmjBpRecordDriver.php

+25
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,38 @@ public function getBmjBpRecordUrl(): string {
2525
return "https://bestpractice.bmj.com/topics/en-gb/" . $this->record['id'];
2626
}
2727

28+
public function getCombinedResult(): string {
29+
global $interface;
30+
31+
$interface->assign('summId', $this->getBmjBpRecordId());
32+
$interface->assign('module', $this->getModule());
33+
$interface->assign('summFormats', $this->getFormats());
34+
$interface->assign('summUrl', $this->getBmjBpRecordUrl());
35+
$interface->assign('summTitle', $this->getTitle());
36+
$interface->assign('summDescription', $this->getDescription());
37+
38+
return 'RecordDrivers/BmjBp/combinedResult.tpl';
39+
}
40+
2841
public function getDescription(): string {
2942
if(!isset($this->record['highlight'])) {
3043
return '';
3144
}
3245
return $this->record['highlight'];
3346
}
47+
48+
public function getFormats(): string {
49+
if(isset($this->record['ContentType'][0])){
50+
return (string)$this->record['ContentType'][0];
3451
}
52+
$sourceType = 'Unknown Source';
53+
return $sourceType;
54+
}
55+
56+
public function getModule(): string {
57+
return 'BmjBp';
58+
}
59+
3560
public function getSearchResult($view = 'list', $showListsAppearingOn = true) {
3661
global $interface;
3762
$interface->assign('summId', $this->getBmjBpRecordId());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{strip}
2+
<div id="record{if !empty($summShortId)}{$summShortId}{else}{$summId|escape}{/if}" class="resultsList row">
3+
<div class="col-xs-12">
4+
<div class="row">
5+
<div class="col-xs-12">
6+
<span class="result-index">{$resultIndex})</span>&nbsp;
7+
<a href="{$summUrl}" class="result-title notranslate" target="_blank">
8+
{if !$summTitle|removeTrailingPunctuation} {translate text='Title not available' isPublicFacing=true}{else}{$summTitle|removeTrailingPunctuation|truncate:180:"..."|highlight}{/if}
9+
</a>
10+
</div>
11+
</div>
12+
{if !empty($summDescription)}
13+
{* Standard Description *}
14+
<div class="row visible-xs">
15+
<div class="result-label col-tn-3">{translate text='Description' isPublicFacing=true}</div>
16+
<div class="result-value col-tn-8"><a id="descriptionLink{$summId|escape}" href="#" onclick="$('#descriptionValue{$summId|escape},#descriptionLink{$summId|escape}').toggleClass('hidden-xs');return false;">{translate text="Click to view" isPublicFacing=true}</a></div>
17+
</div>
18+
19+
{* Mobile Description *}
20+
<div class="row">
21+
{* Hide in mobile view *}
22+
<div class="hidden-xs result-value col-sm-12" id="descriptionValue{$summId|escape}">
23+
{$summDescription|highlight|truncate_html:450:"..."}
24+
</div>
25+
</div>
26+
{/if}
27+
</div>
28+
</div>
29+
{/strip}

code/web/services/Union/AJAX.php

+45
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ function getCombinedResults() {
4242
$results = $this->getResultsFromEDS($searchTerm, $numberOfResults, $fullResultsLink);
4343
} elseif ($source == 'summon') {
4444
$results = $this->getResultsFromSummon($searchTerm, $numberOfResults, $fullResultsLink);
45+
} elseif ($source == 'bmjBp') {
46+
$results = $this->getResultsFromBmjBp($searchTerm, $numberOfResults, $fullResultsLink);
4547
} elseif ($source == 'ebscohost') {
4648
$results = $this->getResultsFromEbscohost($searchTerm, $numberOfResults, $fullResultsLink);
4749
} elseif ($source == 'events') {
@@ -265,6 +267,49 @@ private function getResultsFromSummon($searchTerm, $numberOfResults, $fullResult
265267
return $results;
266268
}
267269

270+
/**
271+
* @param $searchTerm
272+
* @param $numberOfResults
273+
* @param $fullResultsLink
274+
* @return string a string of HTML to be used to display results from a BMJ Best Practice search in combined results
275+
*/
276+
private function getResultsFromBmjBp($searchTerm, $numberOfResults, $fullResultsLink): string {
277+
global $interface;
278+
$interface->assign('viewingCombinedResults', true);
279+
280+
if ($searchTerm == '') {
281+
$results = '<div class="clearfix"></div><div>' . translate(['text'=>'Enter search terms to see results.', 'isPublicFacing'=>true]) . '</div>';
282+
return $results;
283+
}
284+
285+
/** @var SearchObject_BmjBpSearcher $bmjBpSearcher */
286+
$bmjBpSearcher = SearchObjectFactory::initSearchObject("BmjBp");
287+
$bmjBpSearcher->init();
288+
$bmjBpSearcher->setSearchTerms([
289+
'index' =>$bmjBpSearcher->getDefaultIndex(),
290+
'lookfor' => $searchTerm,
291+
]);
292+
$bmjBpSearcher->processSearch(true, false);
293+
294+
$summary = $bmjBpSearcher->getResultSummary();
295+
if ($summary['resultTotal' == 0]) {
296+
$results = '<div class="clearfix"></div><div>' . translate(['text'=>'No results match your search.', 'isPublicFacing'=>true]) . '</div>';
297+
return $results;
298+
}
299+
300+
$records = array_slice($bmjBpSearcher->getCombinedResultHTML(), 0, $numberOfResults);
301+
302+
$interface->assign('recordSet', $records);
303+
$interface->assign('showExploreMoreBar', false);
304+
305+
$formattedNumResults = number_format($summary['resultTotal']);
306+
$results = "<a href='{$fullResultsLink}' class='btn btn-default combined-results-button'>See all {$formattedNumResults} results <i class='fas fa-chevron-right fa-lg' role='presentation'></i></a><div class='clearfix'></div>";
307+
$results .= $interface->fetch('Search/list-list.tpl');
308+
return $results;
309+
}
310+
311+
312+
268313
/**
269314
* @param $searchType
270315
* @param $searchTerm

code/web/sys/LibraryLocation/CombinedResultSection.php

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ static function getObjectStructure($context = ''): array {
2626
if (array_key_exists('Summon', $enabledModules) && $library->summonSettingsId != -1) {
2727
$validResultSources['summon'] = 'Summon';
2828
}
29+
if (array_key_exists('BMJ Best Practice', $enabledModules) && $library->bmjBpSettingsId != -1) {
30+
$validResultSources['bmjBp'] = 'BmjBp';
31+
}
2932
if (array_key_exists('Events', $enabledModules)) {
3033
$validResultSources['events'] = 'Events';
3134
}
@@ -95,6 +98,8 @@ function getResultsLink($searchTerm, $searchType) {
9598
return "https://dp.la/search?q=$searchTerm";
9699
} elseif ($this->source == 'summon') {
97100
return "Search/Results?lookfor=$searchTerm&searchSource=summon";
101+
} elseif ($this->source == 'bmjBp') {
102+
return "/Union/Search?view=list&lookfor=$searchTerm&searchIndex=Keyword&searchSource=bmjBp";
98103
} elseif ($this->source == 'ebsco_eds') {
99104
return "/EBSCO/Results?lookfor=$searchTerm&searchSource=ebsco_eds";
100105
} elseif ($this->source == 'ebscohost') {

code/web/sys/SearchObject/BmjBpSearcher.php

+23
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,25 @@ public function getResultRecordHTML(): array {
165165
return $html;
166166
}
167167

168+
public function getCombinedResultHTML(): array {
169+
global $interface;
170+
$html = [];
171+
if (isset($this->lastSearchResults)) {
172+
foreach($this->lastSearchResults as $key=>$value){
173+
$interface->assign('recordIndex', $key + 1);
174+
$interface->assign('resultIndex', $key + 1 + (($this->page - 1) * $this->limit));
175+
176+
require_once ROOT_DIR . '/RecordDrivers/BmjBpRecordDriver.php';
177+
$record = new BmjBpRecordDriver($value);
178+
$interface->assign('recordDriver', $record);
179+
$html[] = $interface->fetch($record->getCombinedResult());
180+
}
181+
} else {
182+
$html[] = "Unable to find record";
183+
}
184+
return $html;
185+
}
186+
168187
function buildQueryString(): string {
169188
$query = "";
170189
$index = 0;
@@ -218,6 +237,10 @@ public function getEngineName(): string {
218237
return 'bmjBp';
219238
}
220239

240+
public function getDefaultIndex(): string {
241+
return $this->searchIndex;
242+
}
243+
221244
public function processSearch($returnIndexErrors = false, $recommendations = false, $preventQueryModification = false) : AspenError|array|null {
222245
// TODO: determine which guard clauses are needed here
223246
$baseApiUrl = $this->getSettings()->bmjBpBaseApiUrl;

0 commit comments

Comments
 (0)