Browse Source

EDS Articles block now works and code cleanup

d9
ppound 3 years ago
parent
commit
cc368749d7
  1. 148
      modules/roblib_search_eds/js/eds_results_article.js
  2. 108
      modules/roblib_search_eds/roblib_search_eds.module
  3. 21
      modules/roblib_search_eds/src/Plugin/Block/RoblibSearchEdsArticles.php
  4. 4
      modules/roblib_search_eds/templates/roblib-search-eds-articles.html.twig
  5. 60
      modules/roblib_search_eds/templates/theme.inc

148
modules/roblib_search_eds/js/eds_results_article.js

@ -1,85 +1,89 @@
Drupal.behaviors.roblib_search_eds_articles = { Drupal.behaviors.roblib_search_eds_articles = {
attach: function (context, settings) { attach: function (context, settings) {
$url = settings.roblib_search_eds_articles.search_url; if (context == document) {
articles_profile = settings.roblib_search_eds_articles.eds_profile; $query = $current_path.replace('roblib_search/', '');
proxy_url = "https://proxy.library.upei.ca/login?url="; $url = settings.eds_article_search_url + $query;
jQuery.getJSON($url, function (data) { profile = settings.eds_article_profile;
var items = []; proxy_url = "https://proxy.library.upei.ca/login?url=";
var numberOfDocs = 0; jQuery.getJSON($url, function (data) {
try { var items = [];
numberOfDocs = data.numFound; var numberOfDocs = 0;
} catch (err) { try {
// do nothing leave docLength at 0 numberOfDocs = data.numFound;
} } catch (err) {
if (numberOfDocs < 1) { // do nothing leave docLength at 0
jQuery('#' + 'roblib-search-content-eds').empty().append('No Results'); }
jQuery('.' + 'pane-roblib-search-eds-roblib-search-eds-articles').hide(); if (numberOfDocs < 1) {
} else { jQuery('#' + 'roblib-search-content-eds').empty().append('No Results');
var counter = 0; jQuery('.' + 'pane-roblib-search-eds-roblib-search-eds-articles').hide();
var divs = new Array(); } else {
var content = new Array(); var counter = 0;
var queries = []; var divs = new Array();
jQuery.each(data.queries, function (key7, query) { var content = new Array();
queries.push(query.query); var queries = [];
}) jQuery.each(data.queries, function (key7, query) {
var query_str = encodeURI(data.queries[0].query); queries.push(query.query);
var href_str = 'https://search.ebscohost.com/login.aspx?direct=true&site=eds-live&scope=site&type=1&custid=uprince&groupid=main&profile=eds&mode=bool&lang=en&bquery='; })
jQuery.each(data.documents, function (key, val) { var query_str = encodeURI(data.queries[0].query);
id = 'roblib-search-eds-article-' + counter; var href_str = 'https://search.ebscohost.com/login.aspx?direct=true&site=eds-live&scope=site&type=1&custid=uprince&groupid=main&profile=eds&mode=bool&lang=en&bquery=';
divs[counter++] = id; jQuery.each(data.documents, function (key, val) {
id = 'roblib-search-eds-article-' + counter;
divs[counter++] = id;
if (typeof val.Items !== 'undefined') { if (typeof val.Items !== 'undefined') {
items.push('<div class ="roblib-search-row" id="' + id + '">'); items.push('<div class ="roblib-search-row" id="' + id + '">');
if (typeof val.Items.Title !== 'undefined') { if (typeof val.Items.Title !== 'undefined') {
items.push('<div class="roblib-title eds">'); items.push('<div class="roblib-title eds">');
items.push('<a href="' + proxy_url + val.PLink + '&scope=site">' + val.Items.Title.Data + '</a></div>'); items.push('<a href="' + proxy_url + val.PLink + '&scope=site">' + val.Items.Title.Data + '</a></div>');
} }
pubType = val.PubType; pubType = val.PubType;
pubYear = val.RecordInfo.BibRelationships.IsPartOfRelationships["date"]; pubYear = val.RecordInfo.BibRelationships.IsPartOfRelationships["date"];
!pubYear ? pubYear = " " : pubYear = pubYear[0]["Y"]; !pubYear ? pubYear = " " : pubYear = pubYear[0]["Y"];
items.push('<div class="eds-type"><span class="eds-pubyear">' + pubYear + '</span> - ' + pubType + '</div>'); items.push('<div class="eds-type"><span class="eds-pubyear">' + pubYear + '</span> - ' + pubType + '</div>');
var roblib_authors = []; var roblib_authors = [];
jQuery.each(val.RecordInfo.BibRelationships.HasContributorRelationships, function (key3, author) { jQuery.each(val.RecordInfo.BibRelationships.HasContributorRelationships, function (key3, author) {
roblib_authors.push(author.NameFull); roblib_authors.push(author.NameFull);
}) })
items.push('<div class="eds-sor">'); items.push('<div class="eds-sor">');
roblib_authors = roblib_shorten(roblib_authors.join('; '), 50, " "); roblib_authors = roblib_shorten(roblib_authors.join('; '), 50, " ");
items.push(roblib_authors); items.push(roblib_authors);
items.push('</div>'); items.push('</div>');
if (typeof val.Items.TitleSource !== 'undefined') { if (typeof val.Items.TitleSource !== 'undefined') {
items.push('<div class="eds-src"><span class="eds-label">In:</span> ' + val.Items.TitleSource.Data + '</div>'); items.push('<div class="eds-src"><span class="eds-label">In:</span> ' + val.Items.TitleSource.Data + '</div>');
} }
if (typeof val.PLink !== 'undefined' && typeof val.PDF !== 'undefined' && val.PDF == 'pdflink') { if (typeof val.PLink !== 'undefined' && typeof val.PDF !== 'undefined' && val.PDF == 'pdflink') {
items.push('<div class="eds-db eds-pdf-link"><a href="' + proxy_url + val.PLink + '&scope=site">PDF Full Text</a></div>'); items.push('<div class="eds-db eds-pdf-link"><a href="' + proxy_url + val.PLink + '&scope=site">PDF Full Text</a></div>');
} }
if (typeof val.PLink !== 'undefined' && typeof val.HTML !== 'undefined' && val.HTML == '1') { if (typeof val.PLink !== 'undefined' && typeof val.HTML !== 'undefined' && val.HTML == '1') {
items.push('<div class="eds-db eds-pdf-link"><a href="' + proxy_url + val.PLink + '&scope=site">HTML Full Text</a></div>'); items.push('<div class="eds-db eds-pdf-link"><a href="' + proxy_url + val.PLink + '&scope=site">HTML Full Text</a></div>');
} }
items.push('</div>'); items.push('</div>');
} else { } else {
items.push('<div class ="roblib-search-row roblib-eds-unauthorized" id="\' + id + \'">You must login to view this result, <a href="https://proxy.library.upei.ca/login?url=' + href_str + query_str + '" id="eds-unauthorized-result">click here to login</a></div>' );} items.push('<div class ="roblib-search-row roblib-eds-unauthorized" id="\' + id + \'">You must login to view this result, <a href="https://proxy.library.upei.ca/login?url=' + href_str + query_str + '" id="eds-unauthorized-result">click here to login</a></div>');
}); }
jQuery('#' + 'roblib-search-content-eds-articles').empty().append(items.join('')); });
} jQuery('#' + 'roblib-search-content-eds-articles').empty().append(items.join(''));
var non_upei_link = ''; }
var upei_link = '<a href="' + proxy_url + href_str + query_str + '" id="eds-article-see-all-results">SEE ALL (' + data.recordCount + ')</a> '; var non_upei_link = '';
if(!data.is_local_ip) { var upei_link = '<a href="' + proxy_url + href_str + query_str + '" id="eds-article-see-all-results">SEE ALL (' + data.recordCount + ')</a> ';
non_upei_link = '<a href="' + href_str + query_str + '&authtype=ip,guest" id="eds-article-non-upei-see_all_results">[Non-UPEI]</a>'; if (!data.is_local_ip) {
upei_link = upei_link + non_upei_link; non_upei_link = '<a href="' + href_str + query_str + '&authtype=ip,guest" id="eds-article-non-upei-see_all_results">[Non-UPEI]</a>';
} upei_link = upei_link + non_upei_link;
jQuery('#roblib-search-eds-article-more').empty().append(upei_link); }
jQuery('#roblib-eds-articles-more-results').empty().append(upei_link); jQuery('#roblib-search-eds-article-more').empty().append(upei_link);
jQuery('#roblib-eds-articles-toc').empty().append('<a href="' + proxy_url + href_str + query_str + '" id="eds-article-see-all-results-toc">Articles (' + data.recordCount + ')</a>'); jQuery('#roblib-eds-articles-more-results').empty().append(upei_link);
jQuery('#roblib-eds-articles-toc').empty().append('<a href="' + proxy_url + href_str + query_str + '" id="eds-article-see-all-results-toc">Articles (' + data.recordCount + ')</a>');
}); });
} }
}
} }

108
modules/roblib_search_eds/roblib_search_eds.module

@ -2,78 +2,9 @@
/** /**
* @file * @file
* Implementation of Roblib search for searching several targets. * Implementation of Roblib search for searching EDSAPI (EBSCO) targets.
*/ */
/**
* Implements hook_menu().
*/
function roblib_search_eds_menu() {
$items = array();
$items['admin/roblib_search/eds_search'] = array(
'title' => 'EDS search Target configuration',
'description' => 'Configuration for the Roblib eds search target',
'page callback' => 'drupal_get_form',
'page arguments' => array('roblib_search_eds_config_form'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
$items['roblib_search/eds/ajax/%'] = array(
'title' => 'eds ajax',
'page callback' => 'roblib_search_eds_ajax',
'page arguments' => array(3),
'type' => MENU_CALLBACK,
'access arguments' => array('search roblib eds'),
);
$items['roblib_search/eds/articles/%'] = array(
'title' => 'eds ajax',
'page callback' => 'roblib_search_eds_articles',
'page arguments' => array(3),
'type' => MENU_CALLBACK,
'access arguments' => array('search roblib eds'),
);
$items['roblib_search/eds/info/%'] = array(
'title' => 'eds info',
'page callback' => 'roblib_search_eds_info',
'page arguments' => array(3),
'type' => MENU_CALLBACK,
'access arguments' => array('search roblib eds'),
);
return $items;
}
function roblib_search_eds_info($type = 'Articles') {
$config = roblib_search_eds_build_config_arr($type);
$eds_api = new EBSCOAPI($config);
$output['type'] = $type;
$output['profile'] = $eds_api->getInfo();
print json_encode($output);
exit();
}
/**
* Implements hook_permission().
*/
/*function roblib_search_eds_permission() {
return array(
'search roblib eds' => array(
'title' => t('Search the eds target'),
'description' => t('Search Roblib eds target. This permission exposes the search blocks and allows you to see search results.'),
),
'administer roblib search eds' => array(
'title' => t('Administer Roblib Search EDS'),
'description' => t('Administer settings for the Roblib eds search client.'),
),
);
}*/
/** /**
* Implements hook_theme(). * Implements hook_theme().
*/ */
@ -91,41 +22,6 @@ function roblib_search_eds_theme($existing, $type, $theme, $path) {
]; ];
} }
/*function roblib_search_eds_ajax($query) {
print roblib_search_eds_get_results($query, 'Books');
exit();
}
function roblib_search_eds_articles($query) {
print roblib_search_eds_get_results($query, 'Articles');
exit();
}*/
/**
* For each result query ebsco again to get the detailed record.
*
* and insert a new DetailedRecord element in each record.
*
* @param array $output
* The orginal search results array
* @param string $query
* The orginal query
* @param object $eds_api
* an ebco API PHP object
*/
function roblib_search_eds_get_detailed_result(&$output, $query, &$eds_api) {
foreach ($output['records'] as &$record) {
$db = $record['DbId'];
$an = $record['An'];
$arr = $eds_api->apiRetrieve($an, $db, $query);
$record['DetailedRecord'] = $arr['Items'];
}
}
/** /**
* Implements hook_help(). * Implements hook_help().
* *
@ -138,7 +34,7 @@ function roblib_search_eds_help($path, $arg) {
case 'admin/help#roblib_search_eds': case 'admin/help#roblib_search_eds':
return t( return t(
'<p> '<p>
provides a target for the Roblib search module. This target uses javascript provides a EDSAPI target for the Roblib search module. This target uses javascript
to render the results. to render the results.
</p>' </p>'
); );

21
modules/roblib_search_eds/src/Plugin/Block/RoblibSearchEdsArticles.php

@ -15,13 +15,28 @@ use Drupal\Core\Block\BlockBase;
*/ */
class RoblibSearchEdsArticles extends BlockBase { class RoblibSearchEdsArticles extends BlockBase {
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function build() { public function build() {
return [ $host = \Drupal::request()->getSchemeAndHttpHost();
$search_url = $host . '/roblib_search/eds/articles/';
$eds_profile = \Drupal::config('roblib_search_eds.settings')
->get('eds_article_profile');
$settings = [
'eds_article_search_url' => $search_url,
'eds_article_profile' => $eds_profile,
];
return [
'#theme' => 'roblib_search_eds_articles', '#theme' => 'roblib_search_eds_articles',
'#query' => $query, 'query' => $query,
'spinner_path' => 'test',
'#attached' => [
'library' => [
'roblib_search_eds/eds-article'
],
'drupalSettings' => $settings,
],
]; ];
} }
} }

4
modules/roblib_search_eds/templates/roblib-search-eds-articles.html.twig

@ -1,10 +1,8 @@
<div class ="roblib-search-more" id="roblib-search-eds-article-more"></div> <div class ="roblib-search-more" id="roblib-search-eds-article-more"></div>
<div class ="roblib-search-content eds-article" id="roblib-search-content-eds-articles"> <div class ="roblib-search-content eds-article" id="roblib-search-content-eds-articles">
<img src="{{ spinner_path }}"/>
</div> </div>
<div id="roblib-eds-articles-more-results" class="roblib-eds-more-button button"></div> <div id="roblib-eds-articles-more-results" class="roblib-eds-more-button button"></div>
<div id="roblib-eds-articles-toc" class="roblib-bento-toc moveme-please"></div> <div id="roblib-eds-articles-toc" class="roblib-bento-toc moveme-please"></div>

60
modules/roblib_search_eds/templates/theme.inc

@ -1,60 +0,0 @@
<?php
/*
* all we do here is pass a url to some javascript so the results can be
* loaded async
*/
// TODO: combine these two functions and call this function from the preprocessor
function roblib_search_eds_preprocess_roblib_search_eds(&$variables) {
/*global $base_url;
if (!isset($query)) {
if (isset($_GET['roblib_query'])) {
$query = $_GET['roblib_query'];
}
else {
return '';
}
}
$spinner_path = $base_url . '/' . drupal_get_path('module', 'roblib_search') . '/img/' . 'spinner.gif';
$variables['spinner_path'] = $spinner_path;
$search_url = $base_url . '/roblib_search/eds/ajax/' . urlencode($query);
drupal_add_js(drupal_get_path('module', 'roblib_search_eds') . '/js/eds_results.js');
drupal_add_js(array(
'roblib_search_eds' => array(
'search_url' => $search_url,
'eds_profile' =>
variable_get('roblib_search_eds_book_profile', 'apilite')
)
), array('type' => 'setting'));
* */
}
function roblib_search_eds_preprocess_roblib_search_eds_articles(&$variables) {
global $base_url;
if (!isset($query)) {
if (isset($_GET['roblib_query'])) {
$query = $_GET['roblib_query'];
}
else {
return '';
}
}
$spinner_path = $base_url . '/' . drupal_get_path('module', 'roblib_search') . '/img/' . 'spinner.gif';
$variables['spinner_path'] = $spinner_path;
$search_url = $base_url . '/roblib_search/eds/articles/' . urlencode($query);
drupal_add_js(drupal_get_path('module', 'roblib_search_eds') . '/js/eds_results_article.js');
drupal_add_js(array(
'roblib_search_eds_articles' => array(
'search_url' => $search_url,
'eds_profile' =>
variable_get('roblib_search_eds_profile', 'edsapi')
)
), array('type' => 'setting'));
}
?>
Loading…
Cancel
Save