Paul Pound
8 years ago
commit
a72955caa3
9 changed files with 823 additions and 0 deletions
@ -0,0 +1,13 @@ |
|||||||
|
# Robertson Library ILL Forms module |
||||||
|
|
||||||
|
## Introduction |
||||||
|
|
||||||
|
Standalone module to submit ILL requests to Relais. Can read openurl parameters or lookup data based on a DOI |
||||||
|
|
||||||
|
## Requirements |
||||||
|
|
||||||
|
* Drupal 7 |
||||||
|
|
||||||
|
## Maintainers/Sponsors |
||||||
|
|
||||||
|
* UPEI Robertson Library |
@ -0,0 +1,56 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* the administrative form for upei_roblib_ill |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
function upei_roblib_ill_admin_form($form, &$form_state) { |
||||||
|
$form = array(); |
||||||
|
$form['upei_roblib_ill_add_url'] = array( |
||||||
|
'#required' => TRUE, |
||||||
|
'#type' => 'textfield', |
||||||
|
'#size' => 200, |
||||||
|
'#title' => t('The Relais AddRequest URL'), |
||||||
|
'#description' => t('The URL for the Relais ILL server AddRequest service, the default is |
||||||
|
https://caul-cbua.relais-host.com/portal-service/request/add'), |
||||||
|
'#default_value' => variable_get('upei_roblib_ill_add_url', 'https://caul-cbua.relais-host.com/portal-service/request/add'), |
||||||
|
); |
||||||
|
$form['upei_roblib_ill_auth_url'] = array( |
||||||
|
'#required' => TRUE, |
||||||
|
'#type' => 'textfield', |
||||||
|
'#size' => 200, |
||||||
|
'#title' => t('The Relais Auth URL'), |
||||||
|
'#description' => t('The URL for the Relais ILL server Auth service (retrieve the aid), the default is |
||||||
|
https://caul-cbua.relais-host.com/portal-service/user/authentication'), |
||||||
|
'#default_value' => variable_get('upei_roblib_ill_auth_url', 'https://caul-cbua.relais-host.com/portal-service/user/authentication'), |
||||||
|
); |
||||||
|
$form['upei_roblib_ill_library_symbol'] = array( |
||||||
|
'#required' => TRUE, |
||||||
|
'#type' => 'textfield', |
||||||
|
'#size' => 200, |
||||||
|
'#title' => t('Your Relais Library Symbol'), |
||||||
|
'#description' => t('Your Relais Library Symbol'), |
||||||
|
'#default_value' => variable_get('upei_roblib_ill_library_symbol'), |
||||||
|
); |
||||||
|
|
||||||
|
$form['upei_roblib_ill_relais_key'] = array( |
||||||
|
'#required' => TRUE, |
||||||
|
'#type' => 'textfield', |
||||||
|
'#size' => 200, |
||||||
|
'#title' => t('The Relais API key'), |
||||||
|
'#description' => t('The API key used to communicate with the Relais API, Contact Relais International to get your key'), |
||||||
|
'#default_value' => variable_get('upei_roblib_ill_relais_key'), |
||||||
|
); |
||||||
|
$form['upei_roblib_ill_doi_openurl_pid'] = array( |
||||||
|
'#required' => TRUE, |
||||||
|
'#type' => 'textfield', |
||||||
|
'#size' => 200, |
||||||
|
'#title' => t('OpenURL PID'), |
||||||
|
'#description' => t('An identifier to call yourself, for the OpenURL endpoint. To use this service you first need to register for an account here: http://www.crossref.org/requestaccount/'), |
||||||
|
'#default_value' => variable_get('upei_roblib_ill_doi_openurl_pid'), |
||||||
|
); |
||||||
|
|
||||||
|
return system_settings_form($form); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,117 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Contains functions for working with doi requests |
||||||
|
* Borrowed code from the islandora_doi module as we don't want |
||||||
|
* all the dependancies it would require. |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
function upei_roblib_ill_doi_get_data($form, $doi) { |
||||||
|
if (empty($doi)) { |
||||||
|
$doi = 'Empty DOI'; |
||||||
|
} |
||||||
|
$response = upei_roblib_ill_doi_load($doi); |
||||||
|
$headers = array_change_key_case($response->headers); |
||||||
|
if ($response->data && |
||||||
|
strpos($headers['content-type'], 'text/html') === FALSE && |
||||||
|
strpos($response->data, "Malformed DOI") === FALSE |
||||||
|
) { |
||||||
|
$crossref_xml = new DOMDocument('1.0'); |
||||||
|
if (!$crossref_xml->loadXML($response->data)) { |
||||||
|
drupal_set_message(t('Error parseing DOI response, @msg')); |
||||||
|
$form['doi']['#value'] = ''; |
||||||
|
return $form; |
||||||
|
} |
||||||
|
else { |
||||||
|
return upei_roblib_ill_populate_form_doi($crossref_xml, $form); |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
drupal_set_message(t('Error retrieve data using DOI of @doi', array('@doi' => $doi)), 'error'); |
||||||
|
$form['doi']['#value'] = ''; |
||||||
|
return $form; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function upei_roblib_ill_populate_form_doi($crossref_xml, $form) { |
||||||
|
$full_title = $crossref_xml->getElementsbyTagName('full_title') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['Title']['#value'] = $full_title; |
||||||
|
$form['ISSN']['#value'] = $crossref_xml->getElementsbyTagName('issn') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['Date']['#value'] = $crossref_xml->getElementsbyTagName('year') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['ArticleTitle']['#value'] = $crossref_xml->getElementsbyTagName('title') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['ImageOrPageNumber']['#value'] = $crossref_xml->getElementsbyTagName('first_page') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['PagesRequested']['#value'] = $crossref_xml->getElementsbyTagName('last_page') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['Volume']['#value'] = $crossref_xml->getElementsbyTagName('volume') |
||||||
|
->item(0)->nodeValue; |
||||||
|
$form['Issue']['#value'] = $crossref_xml->getElementsbyTagName('issue') |
||||||
|
->item(0)->nodeValue; |
||||||
|
foreach ($crossref_xml->getElementsbyTagName('person_name') as $person) { |
||||||
|
$role = $person->getAttribute('contributor_role'); |
||||||
|
$sequence = $person->getAttribute('sequence'); |
||||||
|
if ($person->getAttribute('contributor_role') == 'author' && |
||||||
|
$person->getAttribute('sequence') == 'first' |
||||||
|
) { |
||||||
|
$author = $person->getElementsbyTagName('surname') |
||||||
|
->item(0)->nodeValue . ',' . $person->getElementsbyTagName('given_name') |
||||||
|
->item(0)->nodeValue; |
||||||
|
} |
||||||
|
} |
||||||
|
$form['ArticleAuthor']['#value'] = $author; |
||||||
|
$form['doi']['#value'] = ''; |
||||||
|
return $form; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get the DOI name for the given url. |
||||||
|
* |
||||||
|
* @param string $doi_url |
||||||
|
* A DOI url, or a DOI name with or without the "doi:" prefix. If the $url |
||||||
|
* is a CrossRef ID passed in as doi:10.1016/j.tiv.2011.10.017 or |
||||||
|
* 10.1111/eve.12339 it will not get changed by running it through parse_url. |
||||||
|
* |
||||||
|
* @return string |
||||||
|
* A string containing the DOI name. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_doi_name_from_url($doi_url) { |
||||||
|
// Allows for DOI to be entered in the following formats: 10.1111/eva.12339, |
||||||
|
// http://dx.doi.org/10.1111/eva.12339, http://doi.org/10.1111/eva.12339, |
||||||
|
// or doi:10.1111/eva.12339. Removing whitespace before parsing the url and |
||||||
|
// then removing any trailing "/" from the returned path. |
||||||
|
$doi_name = trim(parse_url(trim($doi_url), PHP_URL_PATH), '/'); |
||||||
|
return $doi_name; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Perform a request to CrossRef for the given ID. |
||||||
|
* |
||||||
|
* @param string $doi |
||||||
|
* A DOI to lookop. May be provided with or without the "doi:" prefix. Can |
||||||
|
* also pass a full DOI url (i.e, http://doi.org/10.1111/eva.12339 ). |
||||||
|
* |
||||||
|
* @return object |
||||||
|
* An object as provided by drupal_http_request(). |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_doi_load($doi) { |
||||||
|
// Allows for $id to pass a DOI url string or the DOI name. |
||||||
|
$id = upei_roblib_ill_doi_name_from_url($doi); |
||||||
|
$openurl = variable_get('upei_roblib_ill_doi_openurl', 'http://www.crossref.org/openurl'); |
||||||
|
$openurl_pid = variable_get('upei_roblib_ill_doi_openurl_pid', 'user@example.com'); |
||||||
|
$url = url($openurl, array( |
||||||
|
'query' => array( |
||||||
|
'noredirect' => 'true', |
||||||
|
'pid' => $openurl_pid, |
||||||
|
'format' => 'unixref', |
||||||
|
'id' => ((strpos($id, 'doi:') === 0) ? $id : 'doi:' . $id), |
||||||
|
), |
||||||
|
)); |
||||||
|
return drupal_http_request($url); |
||||||
|
} |
||||||
|
|
@ -0,0 +1,421 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Contains the ILL forms. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* A form to wrap the different steps of our multi step form. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* An array representing a Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* An array containing the Drupal form state. |
||||||
|
* |
||||||
|
* @return array |
||||||
|
* An array representing the bibliographic form. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_form($form, &$form_state) { |
||||||
|
if (!isset($form_state['values'])) { |
||||||
|
$form_name = 'upei_roblib_ill_request_form'; |
||||||
|
} |
||||||
|
else { |
||||||
|
$form_name = 'upei_roblib_ill_auth_form'; |
||||||
|
} |
||||||
|
$form_state['step'] = $form_name; |
||||||
|
return $form_name === 'upei_roblib_ill_request_form' ? upei_roblib_ill_request_form($form, $form_state) : |
||||||
|
upei_roblib_ill_auth_form($form, $form_state); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Validation for the upei_roblib_ill_form form. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* An array representing a Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* An array containing the Drupal form state. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_form_validate($form, &$form_state) { |
||||||
|
if ($form_state['step'] == 'upei_roblib_ill_request_form' && empty($form_state['values']['doi']) && empty($form_state['values']['Title']) && |
||||||
|
empty($form_state['values']['ArtcleTitle']) |
||||||
|
) { |
||||||
|
form_set_error('Title', t('One of "DOI", "Title" or "Article Title" values must be provided')); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Submit handler for the upei_roblib_ill_form form. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* An array representing a Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* An array containing the Drupal form state. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_form_submit($form, &$form_state) { |
||||||
|
module_load_include('inc', 'upei_roblib_ill', 'includes/relais'); |
||||||
|
$form_state['storage'][$form_state['step']] = $form_state['values']; |
||||||
|
switch ($form_state['step']) { |
||||||
|
case 'upei_roblib_ill_request_form': |
||||||
|
if ($form_state['clicked_button']['#value'] != 'lookup DOI') { |
||||||
|
$form_state['step'] = 'upei_roblib_ill_auth_form'; |
||||||
|
$form_state['rebuild'] = TRUE; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'upei_roblib_ill_auth_form': |
||||||
|
//process the form |
||||||
|
drupal_set_message('completed form'); |
||||||
|
$aid = upei_roblib_ill_authenticate($form_state['values']['campus_id']); |
||||||
|
if (isset($aid)) { |
||||||
|
upei_roblib_ill_add_request($form_state, $aid); |
||||||
|
} |
||||||
|
else { |
||||||
|
drupal_set_message(t("Error authenticating with Relais"), 'error'); |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* The patron portion of the ILL form. |
||||||
|
* |
||||||
|
* The campus_id and email portion are also used in a request for an Relais aid. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* An array representing a Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* An array containing the Drupal form state. |
||||||
|
* |
||||||
|
* @return array |
||||||
|
* An array representing the bibliographic form. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_auth_form($form, &$form_state) { |
||||||
|
$_REQUEST; |
||||||
|
|
||||||
|
$form['FirstName'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Your First Name'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['Surname'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Your Last Name'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['campus_id'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Your Campus ID'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$patron_types = array( |
||||||
|
'None' => t('None'), |
||||||
|
'UPEI Faculty/Staff' => t('UPEI Faculty/Staff'), |
||||||
|
'UPEI Graduate Student' => t('UPEI Graduate Student'), |
||||||
|
'UPEI Undergraduate Student' => t('UPEI Undergraduate Student'), |
||||||
|
'UPEI Honours Undergraduate Student' => t('UPEI Honours Undergraduate Student'), |
||||||
|
'UPEI Alumni Premiere member' => t('UPEI Alumni Premiere member'), |
||||||
|
'UPEI Alumni member' => t('UPEI Alumni member'), |
||||||
|
'Public Borrower' => t('Public Borrower'), |
||||||
|
); |
||||||
|
$departments = array( |
||||||
|
'Applied Human Sciences' => t('Applied Human Sciences'), |
||||||
|
'AVC - Biomedical Sciences' => t('AVC - Biomedical Sciences'), |
||||||
|
'AVC - Companion Animals' => t('AVC - Companion Animals'), |
||||||
|
'AVC - Health Management' => t('AVC - Health Management'), |
||||||
|
'AVC - Pathology/Microbiology' => t('AVC - Pathology/Microbiology'), |
||||||
|
'AVC - Lobster Science' => t('AVC - Lobster Science'), |
||||||
|
'Biology' => t('Biology'), |
||||||
|
'Business' => t('Business'), |
||||||
|
'Chemistry' => t('Chemistry'), |
||||||
|
'Classics' => t('Classics'), |
||||||
|
'Diversity and Social Justice Studies' => t('Diversity and Social Justice Studies'), |
||||||
|
'Economics' => t('Economics'), |
||||||
|
'Education' => t('Education'), |
||||||
|
'English' => t('English'), |
||||||
|
'Engineering' => t('Engineering'), |
||||||
|
'Environmental Studies' => t('Environmental Studies'), |
||||||
|
'Fine Arts' => t('Fine Arts'), |
||||||
|
'History' => t('History'), |
||||||
|
'Island Studies' => t('Island Studies'), |
||||||
|
'Island Studies (Masters)' => t('Island Studies (Masters)'), |
||||||
|
'Robertson Library' => t('Robertson Library'), |
||||||
|
'Robertson Library' => t('Robertson Library'), |
||||||
|
'Mathematical and Computational Sciences' => t('Mathematical and Computational Sciences'), |
||||||
|
'Modern Languages' => t('Modern Languages'), |
||||||
|
'Music' => t('Music'), |
||||||
|
'Nursing' => t('Nursing'), |
||||||
|
'Philosophy' => t('Philosophy'), |
||||||
|
'Physics' => t('Physics'), |
||||||
|
'Political Science' => t('Political Science'), |
||||||
|
'Psychology' => t('Psychology'), |
||||||
|
'Religious Studies' => t('Religious Studies'), |
||||||
|
'Sociology/Anthropology' => t('Sociology/Anthropology'), |
||||||
|
'Other' => t('Other (Please add to the Notes field)'), |
||||||
|
); |
||||||
|
$form['patron_type'] = array( |
||||||
|
'#type' => 'select', |
||||||
|
'#title' => t('Your Patron Type'), |
||||||
|
'#options' => $patron_types, |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['Department'] = array( |
||||||
|
'#type' => 'select', |
||||||
|
'#title' => t('Your Department'), |
||||||
|
'#options' => $departments, |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['DeliveryAddress'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Your Email'), |
||||||
|
'#size' => 50, |
||||||
|
|
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['InstitutionName'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Name of Institution'), |
||||||
|
'#size' => 50, |
||||||
|
'#default_value' => 'University of Prince Edward Island', |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['LibraryName'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Name of Institution'), |
||||||
|
'#size' => 50, |
||||||
|
'#default_value' => 'Robertson Library', |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['notes'] = array( |
||||||
|
'#type' => 'textarea', |
||||||
|
'#title' => t('Notes'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['certify'] = array( |
||||||
|
'#type' => 'checkbox', |
||||||
|
'#description' => 'I hereby certify that this item is being sought for a fair dealing purpose and any copying will be in accordance with the Copyright Act. ', |
||||||
|
'#size' => 50, |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['submit'] = array( |
||||||
|
'#type' => 'submit', |
||||||
|
'#value' => 'Submit', |
||||||
|
); |
||||||
|
|
||||||
|
return $form; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* The bibliographic portion of the ILL form. |
||||||
|
* |
||||||
|
* @param array $form |
||||||
|
* An array representing a Drupal form. |
||||||
|
* @param array $form_state |
||||||
|
* An array containing the Drupal form state. |
||||||
|
* |
||||||
|
* @return array |
||||||
|
* An array representing the bibliographic form. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_request_form($form, &$form_state) { |
||||||
|
module_load_include('inc', 'upei_roblib_ill', 'includes/utilities'); |
||||||
|
$form['#prefix'] = '<div id="upei-roblib-ill-request-form">'; |
||||||
|
$form['#suffix'] = '</div>'; |
||||||
|
$genre = empty(upei_roblib_ill_get_request_variable('genre')) ? 'article' : upei_roblib_ill_get_request_variable('genre'); |
||||||
|
//$values = isset($form_state['multistep_values']['upei_roblib_ill_request']) ? orm_state['multistep_values']['ra$fte_the_room'] : array(); |
||||||
|
$form['Genre'] = array( |
||||||
|
'#type' => 'select', |
||||||
|
'#title' => t('Genre'), |
||||||
|
'#default_value' => $genre, |
||||||
|
'#options' => array( |
||||||
|
'article' => t('Journal Article'), |
||||||
|
'book' => t('Book'), |
||||||
|
'chapter' => t('Book Chapter'), |
||||||
|
), |
||||||
|
'#required' => TRUE, |
||||||
|
); |
||||||
|
$form['doi'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('DOI'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('doi'), |
||||||
|
'#description' => 'DOI, if you provide a DOI we will attempt to lookup the record for you', |
||||||
|
'#size' => 50, |
||||||
|
'#states' => array( |
||||||
|
'visible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['doi_button'] = array( |
||||||
|
'#type' => 'submit', |
||||||
|
'#value' => 'lookup DOI', |
||||||
|
'#ajax' => array( |
||||||
|
'callback' => 'upei_roblib_ill_doi_callback', |
||||||
|
'method' => 'replace', |
||||||
|
'wrapper' => 'upei-roblib-ill-request-form', |
||||||
|
'effect' => 'fade', |
||||||
|
), |
||||||
|
'#states' => array( |
||||||
|
'visible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['Title'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Source Title'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('title'), |
||||||
|
'#description' => 'Journal or Book Title', |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['ArticleTitle'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Title'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('atitle'), |
||||||
|
'#description' => 'Article or Chapter Title', |
||||||
|
'#size' => 50, |
||||||
|
'#states' => array( |
||||||
|
'visible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
|
||||||
|
$form['ISSN'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('ISSN'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('issn'), |
||||||
|
'#size' => 50, |
||||||
|
'#states' => array( |
||||||
|
'visible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['ArticleAuthor'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Author'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('author'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
'#description' => 'Article or Chapter Author', |
||||||
|
'#states' => array( |
||||||
|
'invisible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'book'), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
$form['Author'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Book Author'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('author'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
'#states' => array( |
||||||
|
'invisible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => t('article')), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
$form['ISBN'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('ISBN'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('isbn'), |
||||||
|
'#size' => 50, |
||||||
|
'#states' => array( |
||||||
|
'invisible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['SubTitle'] = array( |
||||||
|
'#type' => 'hidden', |
||||||
|
'#title' => t('Sub Title'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('ubtitle'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['SeriesTitle'] = array( |
||||||
|
'#type' => 'hidden', |
||||||
|
'#title' => t('Series Title'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('stitle'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
|
||||||
|
$form['Volume'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Volume'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('volume'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
'#states' => array( |
||||||
|
'visible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
$form['Issue'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Issue'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('issue'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
'#states' => array( |
||||||
|
'visible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'article'), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
$form['ImageOrPageNumber'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Start Page'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('spage'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
'#states' => array( |
||||||
|
'invisible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'book'), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
$form['PagesRequested'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('End Page'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('epage'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
'#states' => array( |
||||||
|
'invisible' => array( |
||||||
|
':input[name="Genre"]' => array('value' => 'book'), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
$form['Date'] = array( |
||||||
|
'#type' => 'textfield', |
||||||
|
'#title' => t('Date'), |
||||||
|
'#default_value' => upei_roblib_ill_get_request_variable('date'), |
||||||
|
'#size' => 50, |
||||||
|
'#required' => FALSE, |
||||||
|
); |
||||||
|
$form['next'] = array( |
||||||
|
'#type' => 'submit', |
||||||
|
'#value' => t('Next') |
||||||
|
); |
||||||
|
$form_state['stage'] = 'upei_roblib_ill_auth'; |
||||||
|
return $form; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,80 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Contains the functions to send and receive data to/from Relais. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Submit an ILL AddRequest to relais. |
||||||
|
* @param array $form_state |
||||||
|
* A drupal form_state array |
||||||
|
* @param string $aid |
||||||
|
* A relais authentication id (token) |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_add_request($form_state, $aid) { |
||||||
|
module_load_include('inc', 'upei_roblib_ill', 'includes/utilities'); |
||||||
|
$url = variable_get('upei_roblib_ill_add_url', 'https://caul-cbua.relais-host.com/portal-service/request/add'); |
||||||
|
$relais_arr = array( |
||||||
|
"SupplyingLibrarySymbol" => 'PCU', |
||||||
|
); |
||||||
|
$relais_arr['BibliographicInfo'] = upei_roblib_ill_clean_array($form_state['storage']['upei_roblib_ill_request_form']); |
||||||
|
//$relais_arr['BibliographicInfo'] |
||||||
|
$relais_arr['DeliveryAddress'] = upei_roblib_ill_clean_array($form_state['storage']['upei_roblib_ill_auth_form']); |
||||||
|
$request_info = upei_roblib_ill_request_info_array($relais_arr['BibliographicInfo'], $form_state['values']['notes']); |
||||||
|
$relais_arr['RequestInfo'] = $request_info; |
||||||
|
$relais_json = json_encode($relais_arr); |
||||||
|
$options = array( |
||||||
|
'method' => 'POST', |
||||||
|
'data' => $relais_json, |
||||||
|
'timeout' => 15, |
||||||
|
'headers' => array('Content-Type' => 'application/json'), |
||||||
|
); |
||||||
|
$result = drupal_http_request($url . '?aid=' . $aid, $options); |
||||||
|
if ($result->code == '200') { |
||||||
|
$response_json = $result->data; |
||||||
|
$response_arr = json_decode($response_json); |
||||||
|
//TODO remove or improve the line below after testing |
||||||
|
drupal_set_message('submitted request to relais' . $response_json); |
||||||
|
} |
||||||
|
else { |
||||||
|
drupal_set_message(t('Error submitting request to relais, @code, @message', array( |
||||||
|
'@code' => $result->code, |
||||||
|
'@message' => $result->message |
||||||
|
)), 'error'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Request an aid from Relais. |
||||||
|
* @param string $barcode |
||||||
|
* A patron_id, campus_id or barcode to identify a user |
||||||
|
* @return string/null |
||||||
|
* Returns a Relais authentication id (token) or NULL on if authentication fails |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_authenticate($barcode) { |
||||||
|
$url = variable_get('upei_roblib_ill_auth_url', 'https://caul-cbua.relais-host.com/portal-service/user/authentication'); |
||||||
|
$json_arr = array(); |
||||||
|
$json_arr['ApiKey'] = variable_get('upei_roblib_ill_relais_key'); |
||||||
|
$json_arr['UserGroup'] = 'patron'; |
||||||
|
$json_arr['LibrarySymbol'] = variable_get('upei_roblib_ill_library_symbol'); |
||||||
|
$json_arr['PatronId'] = $barcode; |
||||||
|
$request_json = json_encode($json_arr); |
||||||
|
$options = array( |
||||||
|
'method' => 'POST', |
||||||
|
'data' => $request_json, |
||||||
|
'timeout' => 15, |
||||||
|
'headers' => array('Content-Type' => 'application/json'), |
||||||
|
); |
||||||
|
$result = drupal_http_request($url, $options); |
||||||
|
if ($result->code == '200') { |
||||||
|
$response_data = json_decode($result->data, TRUE); |
||||||
|
if (isset($response_data['Problem'])) { |
||||||
|
drupal_set_message(t('Error retrieving authentication token, @message', array('@message' => $response_data['Problem']['Message'])), 'error'); |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
$aid = $response_data['AuthorizationId']; |
||||||
|
} |
||||||
|
return isset($aid) ? $aid : NULL; |
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,76 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Contains helper functions for working with Relais requests. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Removes empty elements and drupal specific elements from an array |
||||||
|
* |
||||||
|
* @param $values |
||||||
|
* A drupal form_state['values] array |
||||||
|
* @return array |
||||||
|
* An array where the keys in the array that have empty values are removed and |
||||||
|
* drupal specific elements are removed. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_clean_array($values) { |
||||||
|
$arr = array_filter($values); |
||||||
|
if (isset($arr['ISSN'])) { |
||||||
|
$arr['ISSN'] = array($arr['ISSN']); |
||||||
|
} |
||||||
|
if (isset($arr['ISBN'])) { |
||||||
|
$arr['ISBN'] = array($arr['ISBN']); |
||||||
|
} |
||||||
|
unset($arr['form_build_id']); |
||||||
|
unset($arr['form_token']); |
||||||
|
unset($arr['form_id']); |
||||||
|
unset($arr['op']); |
||||||
|
unset($arr['submit']); |
||||||
|
unset($arr['next']); |
||||||
|
unset($arr['certify']); |
||||||
|
unset($arr['doi']); |
||||||
|
return $arr; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Allows us to ask for _REQUEST variables that may or may not exist without generating a php warning. |
||||||
|
* Also does some formating for certain variables. |
||||||
|
* @param string $variable |
||||||
|
* The name of the $_REQUEST variable to check |
||||||
|
* @return string |
||||||
|
* The value of the $_REQUEST variable or an empty string. |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_get_request_variable($variable) { |
||||||
|
if ($variable == 'author' && empty($_REQUEST[$variable])) { |
||||||
|
//google scholar usually sends auinit aulast instead of author |
||||||
|
$initial = isset($_REQUEST['auinit']) ? $_REQUEST['auinit'] : NULL; |
||||||
|
$last_name = isset($_REQUEST['aulast']) ? $_REQUEST['aulast'] : NULL; |
||||||
|
return !empty($last_name) ? $last_name . ',' . $initial : ''; |
||||||
|
} |
||||||
|
return isset($_REQUEST[$variable]) ? $_REQUEST[$variable] : ''; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Populates the requestInfo portion of a Relais request |
||||||
|
* @param array $values |
||||||
|
* an array containing a 'Genre' element. |
||||||
|
* @return array |
||||||
|
* The requestInfo portion of a Relais request |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_request_info_array($values, $notes) { |
||||||
|
$requestInfo = array(); |
||||||
|
$genre = $values['Genre']; |
||||||
|
$requestInfo['DateSubmitted'] = date('Y-m-d'); |
||||||
|
$requestInfo['Notes'] = $notes; |
||||||
|
if ($genre == 'book' || $genre == 'chapter') { |
||||||
|
$requestInfo['ServiceType'] = 'L'; |
||||||
|
$requestInfo['ServiceLabel'] = "R"; |
||||||
|
$requestInfo['RequestSource'] = "C"; |
||||||
|
} |
||||||
|
else { |
||||||
|
$requestInfo['ServiceType'] = 'X'; |
||||||
|
$requestInfo['ServiceLabel'] = "R"; |
||||||
|
$requestInfo['RequestSource'] = "C"; |
||||||
|
} |
||||||
|
return $requestInfo; |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
name = UPEI Robertson Library ILL forms |
||||||
|
description = UPEI Robertson Library ILL forms |
||||||
|
core = 7.x |
@ -0,0 +1,19 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Implementations of installation hooks. |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_uninstall(). |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_uninstall() { |
||||||
|
$variables = array( |
||||||
|
'upei_roblib_ill_add_url', |
||||||
|
'upei_roblib_ill_auth_url', |
||||||
|
'upei_roblib_ill_relais_key', |
||||||
|
'upei_roblib_ill_library_symbol', |
||||||
|
); |
||||||
|
array_walk($variables, 'variable_del'); |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @file |
||||||
|
* The drupal module file for upei_roblib_ill module |
||||||
|
*/ |
||||||
|
function upei_roblib_ill_menu() { |
||||||
|
|
||||||
|
$items = array(); |
||||||
|
|
||||||
|
$items['admin/settings/roblibill'] = array( |
||||||
|
'title' => 'UPEI Roblib ILL settings', |
||||||
|
'description' => 'Conifiguration for the UPEI ILL forms', |
||||||
|
'page callback' => 'drupal_get_form', |
||||||
|
'page arguments' => array('upei_roblib_ill_admin_form'), |
||||||
|
'access arguments' => array('access administration pages'), |
||||||
|
'file' => 'includes/admin.form.inc', |
||||||
|
'type' => MENU_NORMAL_ITEM, |
||||||
|
); |
||||||
|
$items['upei/roblib/ill'] = array( |
||||||
|
'title' => 'UPEI ILL Form', |
||||||
|
'description' => 'The entry point for the UPEI ILL forms', |
||||||
|
'page callback' => 'drupal_get_form', |
||||||
|
'page arguments' => array('upei_roblib_ill_form'), |
||||||
|
'access arguments' => array('access content'), |
||||||
|
'file' => 'includes/form.inc', |
||||||
|
'type' => MENU_NORMAL_ITEM, |
||||||
|
); |
||||||
|
return $items; |
||||||
|
} |
||||||
|
|
||||||
|
function upei_roblib_ill_doi_callback($form, &$form_state) { |
||||||
|
module_load_include('inc', 'upei_roblib_ill', 'includes/doi'); |
||||||
|
$form = upei_roblib_ill_doi_get_data($form, $form_state['values']['doi']); |
||||||
|
return $form; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue