You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
495 lines
16 KiB
495 lines
16 KiB
<?php |
|
|
|
namespace Drupal\upei_roblib_ill\Form; |
|
|
|
use Drupal\Core\Form\FormBase; |
|
use Drupal\Core\Form\FormStateInterface; |
|
|
|
/** |
|
* Settings form for module |
|
* |
|
* @author ppound |
|
*/ |
|
class RoblibIllLoanForm extends FormBase { |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public function getFormId() { |
|
return 'roblib_ill_loan_form'; |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public function buildForm(array $form, FormStateInterface $form_state) { |
|
if ($form_state->has('step') && $form_state->get('step') == 2) { |
|
return $this->ill_auth_form($form, $form_state); |
|
} |
|
return $this->ill_request_form($form, $form_state); |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public function validateForm(array &$form, FormStateInterface $form_state) { |
|
module_load_include('inc', 'upei_roblib_ill', 'includes/relais'); |
|
$values = $form_state->getValues(); |
|
if ($form_state->get('step') == 2) { |
|
$is_valid_email = \Drupal::service('email.validator')->isValid($values['DeliveryAddress']); |
|
if (!$is_valid_email) { |
|
$form_state->setErrorByName('DeliveryAddress', t('Your email address appears to be invalid.')); |
|
} |
|
if (!$values['certify']) { |
|
$form_state->setErrorByName('certify', t('Please certify that this is item is being sought for a fair dealing purpose')); |
|
} |
|
|
|
$campus_id = $this->ill_form_message_id($values['campus_id']); |
|
|
|
$aid = upei_roblib_ill_authenticate($campus_id, $values['Surname']); |
|
if (is_array($aid) && isset($aid['Problem']['Message'])) { |
|
if (!empty($aid['Problem']['HR_Message'])) { |
|
$form_state->setErrorByName('campus_id', $aid['Problem']['HR_Message']); |
|
} |
|
$form_state->setErrorByName('Surname', $aid['Problem']['Message']); |
|
// Log invalid requests, we need to build the full array here to log it, even though we won't send it yet as auth has failed. |
|
//$form_state->set('upei_roblib_ill_auth_form_storage') = $form_state->getValues(); |
|
module_load_include('inc', 'upei_roblib_ill', 'includes/db'); |
|
$arr = upei_roblib_ill_build_relais_arr($form_state); |
|
upei_roblib_ill_log_request($arr, $aid); |
|
} |
|
else { |
|
$form_state->set('aid', $aid); |
|
} |
|
} |
|
$trigger = $form_state->getTriggeringElement(); |
|
if($trigger['#value'] != 'Lookup DOI' && empty($form_state->get('step'))) { |
|
if(empty($form_state->getValue('Title'))){ |
|
$form_state->setErrorByName('Title', t('Journal/Book Title is required.')); |
|
} |
|
if(empty($form_state->getValue('Genre'))) { |
|
$form_state->setErrorByName('Title', t('Item Type is required.')); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* @param string $id |
|
* The users campus id |
|
* |
|
* @return mixed |
|
* the campus id with leading zeros and leading/trailing whitespace removed. |
|
*/ |
|
function ill_form_message_id($id) { |
|
$id = ltrim($id, '0'); |
|
return trim($id); |
|
} |
|
|
|
/** |
|
* @param array $form |
|
* An associative array containing the structure of the form. |
|
* @param \Drupal\Core\Form\FormStateInterface $form_state |
|
* The current state of the form. |
|
*/ |
|
public function submitStepOne(array &$form, FormStateInterface $form_state) { |
|
$trigger = $form_state->getTriggeringElement(); |
|
if ($trigger['#value'] != 'Lookup DOI') { |
|
$form_state |
|
->set('step', 2) |
|
->set('request', $form_state->getValues()) |
|
->setRebuild(TRUE); |
|
} |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public function submitForm(array &$form, FormStateInterface $form_state) { |
|
$trigger = $form_state->getTriggeringElement(); |
|
if ($trigger['#value'] == 'Lookup DOI') { |
|
//Do nothing as this was just a DOI Lookup |
|
$form_state->setRebuild(TRUE); |
|
return; |
|
} |
|
//process the form |
|
$response = upei_roblib_ill_add_request($form_state, $form_state->get('aid')); |
|
$error = isset($response['RequestNumber']) ? 'FALSE' : 'TRUE'; |
|
$parameters = [ |
|
'message' => $response['ConfirmMessage'], |
|
'email' => $form_state->getValue('DeliveryAddress'), |
|
'error' => $error, |
|
]; |
|
$form_state->setRedirect('roblib_ill.loan_form_finished', $parameters); |
|
} |
|
|
|
public function doiCallback(array &$form, FormStateInterface $form_state) { |
|
module_load_include('inc', 'upei_roblib_ill', 'includes/doi'); |
|
$doi = $form_state->getValue('doi'); |
|
$form = upei_roblib_ill_doi_get_data($form, $doi); |
|
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 ill_request_form($form, &$form_state) { |
|
module_load_include('inc', 'upei_roblib_ill', 'includes/utilities'); |
|
$config = \Drupal::config('upei_roblib_ill.settings'); |
|
$form['#prefix'] = '<div id="upei-roblib-ill-request-form">'; |
|
$form['#suffix'] = '<div class="roblib-required">* = Required Field</div></div>'; |
|
$type = upei_roblib_ill_get_request_variable('genre'); |
|
$genre = empty($type) ? 'article' : $type; |
|
$form['Genre'] = [ |
|
'#type' => 'select', |
|
'#title' => t('Item Type'), |
|
'#options' => [ |
|
'book' => t('Book'), |
|
'chapter' => t('Book Chapter'), |
|
'article' => t('Journal Article'), |
|
], |
|
'#default_value' => 'article', |
|
'#required' => FALSE, |
|
]; |
|
if (!empty($type)) { |
|
$form['Genre']['#default_value'] = $type; |
|
} |
|
$form['doi'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t("DOI (ex: 10.1016/j.ypmed.2019.01.018) <a href='https://library.upei.ca/doi'>more info</a>"), |
|
'#default_value' => upei_roblib_ill_get_doi_from_request(), |
|
//'#description' => 'DOI, if you provide a DOI we will attempt to lookup the record for you', |
|
'#size' => 50, |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => 'book'], |
|
], |
|
], |
|
'#required' => FALSE, |
|
]; |
|
$form['doi_button'] = [ |
|
'#type' => 'submit', |
|
'#value' => 'Lookup DOI', |
|
'#ajax' => [ |
|
'callback' => '::doiCallback', |
|
'method' => 'replace', |
|
'wrapper' => 'upei-roblib-ill-request-form', |
|
'effect' => 'fade', |
|
], |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => 'book'], |
|
], |
|
], |
|
'#required' => FALSE, |
|
]; |
|
$form['Title'] = [ |
|
'#type' => 'textarea', |
|
'#rows' => 2, |
|
'#title' => t('Journal/Book Title *'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('title'), |
|
//'#description' => 'Journal or Book Title (Required)', |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
]; |
|
$form['ArticleTitle'] = [ |
|
'#type' => 'textarea', |
|
'#rows' => 2, |
|
'#title' => t('Article/Chapter Title'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('atitle'), |
|
//'#description' => 'Article or Chapter Title', |
|
'#size' => 50, |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => 'book'], |
|
], |
|
], |
|
'#required' => FALSE, |
|
]; |
|
|
|
$form['ISSN'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('ISSN (ex: 1234-567X)'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('issn'), |
|
'#size' => 50, |
|
'#states' => [ |
|
'visible' => [ |
|
':input[name="Genre"]' => ['value' => 'article'], |
|
], |
|
], |
|
'#required' => FALSE, |
|
]; |
|
$article_author = ($genre == 'book') ? '' : upei_roblib_ill_get_request_variable('author'); |
|
$form['ArticleAuthor'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Article/Chapter Author'), |
|
'#default_value' => $article_author, |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
//'#description' => 'Article or Chapter Author', |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => 'book'], |
|
], |
|
], |
|
]; |
|
$author = ($genre == 'book') ? upei_roblib_ill_get_request_variable('author') : ''; |
|
$form['Author'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Book Author'), |
|
'#default_value' => $author, |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => t('article')], |
|
], |
|
], |
|
]; |
|
$form['ISBN'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('ISBN (ex: 9780323554459)'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('isbn'), |
|
'#size' => 50, |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => 'article'], |
|
], |
|
], |
|
'#required' => FALSE, |
|
]; |
|
$form['SubTitle'] = [ |
|
'#type' => 'hidden', |
|
'#title' => t('Sub Title'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('ubtitle'), |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
]; |
|
$form['SeriesTitle'] = [ |
|
'#type' => 'hidden', |
|
'#title' => t('Series Title'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('stitle'), |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
]; |
|
|
|
$form['Volume'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Volume'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('volume'), |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
'#states' => [ |
|
'visible' => [ |
|
':input[name="Genre"]' => ['value' => 'article'], |
|
], |
|
], |
|
]; |
|
$form['Issue'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Issue'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('issue'), |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
'#states' => [ |
|
'visible' => [ |
|
':input[name="Genre"]' => ['value' => 'article'], |
|
], |
|
], |
|
]; |
|
$form['PagesRequested'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Pages (startpage-endpage)'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('pages'), |
|
//'#description' => 'Pages requested (startpage-endpage)', |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
'#states' => [ |
|
'invisible' => [ |
|
':input[name="Genre"]' => ['value' => 'book'], |
|
], |
|
], |
|
]; |
|
$form['Date'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Publication Date'), |
|
'#default_value' => upei_roblib_ill_get_request_variable('date'), |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
]; |
|
$form['actions'] = [ |
|
'#type' => 'actions', |
|
]; |
|
|
|
$form['actions']['next'] = [ |
|
'#type' => 'submit', |
|
'#button_type' => 'primary', |
|
'#value' => $this->t('Next'), |
|
'#submit' => ['::submitStepOne'], |
|
]; |
|
return $form; |
|
} |
|
|
|
/** |
|
* 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 ill_auth_form($form, &$form_state) { |
|
module_load_include('inc', 'upei_roblib_ill', 'includes/utilities'); |
|
$form['#prefix'] = upei_roblib_format_biblio_info($form_state); |
|
$form['#suffix'] = '<div class="roblib-required">* = Required Field</div> |
|
<div class="roblib-FOIPP"><strong>Protection of Privacy</strong> - The personal information requested |
|
on this form is collected under the authority of Section 31(c) of the PEI |
|
Freedom of Information and Protection of Privacy Act and will be protected |
|
under Part 2 of that Act. It will be used for the purpose of administering |
|
and providing library service. Direct any questions about this collection to |
|
Health Sciences and Scholarly Communications Librarian at ill@upei.ca, 550 |
|
University Ave, Charlottetown PE , 902-566-0453.</div>'; |
|
$form['FirstName'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Your First Name'), |
|
'#size' => 50, |
|
'#required' => TRUE, |
|
]; |
|
$form['Surname'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Your Last Name'), |
|
'#size' => 50, |
|
'#required' => TRUE, |
|
]; |
|
$form['campus_id'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Your Campus ID'), |
|
'#size' => 50, |
|
'#required' => TRUE, |
|
]; |
|
$patron_types = [ |
|
'Faculty/Staff' => t('Faculty/Staff'), |
|
'Undergraduate Student' => t('Undergraduate Student'), |
|
'Masters Student' => t('Masters Student'), |
|
'Doctoral Student' => t('Doctoral Student'), |
|
'Alumni Premiere Subscriber' => t('Alumni Premiere Subscriber'), |
|
'Alumni/Public' => t('Alumni/Public'), |
|
'Other' => 'Other', |
|
]; |
|
$departments = [ |
|
'Actuarial Science' => t('Actuarial Science'), |
|
'Analytics' => t('Analytics'), |
|
'Applied Communication, Leadership, and Culture' => t('Applied Communication, Leadership, and Culture'), |
|
'Applied Health Services Research' => t('Applied Health Services Research'), |
|
'Applied Human Sciences' => t('Applied Human Sciences'), |
|
'Arts (General)' => t('Arts (General)'), |
|
'Biology' => t('Biology'), |
|
'Biotechnology' => t('Biotechnology'), |
|
'Business' => t('Business'), |
|
'Canadian Studies' => t('Canadian Studies'), |
|
'Chemistry' => t('Chemistry'), |
|
'Climate Change and Adaptation' => t('Climate Change and Adaptation'), |
|
'Computer Science' => t('Computer Science'), |
|
'Diversity and Social Justice Studies' => t('Diversity and Social Justice Studies'), |
|
'Economics' => t('Economics'), |
|
'Education' => t('Education'), |
|
'English' => t('English'), |
|
'Environmental Studies/Sciences' => t('Environmental Studies/Sciences'), |
|
'Financial Mathematics' => t('Financial Mathematics'), |
|
'Foods and Nutrition' => t('Foods and Nutrition'), |
|
'French' => t('French'), |
|
'Graduate Studies (DrAH, Global Aff., etc.)' => t('Graduate Studies (DrAH, Global Aff., etc.)'), |
|
'History' => t('History'), |
|
'IKERAS' => t('IKERAS'), |
|
'Integrated Studies' => t('Integrated Studies'), |
|
'Island Studies' => t('Island Studies'), |
|
'Journalism' => t('Journalism'), |
|
'Kinesiology' => t('Kinesiology'), |
|
'Library, Robertson' => t('Library, Robertson'), |
|
'Mathematics' => t('Mathematics'), |
|
'Medicine' => t('Medicine'), |
|
'Modern Languages' => t('Modern Languages'), |
|
'Music' => t('Music'), |
|
'Nursing' => t('Nursing'), |
|
'Paramedicine' => t('Paramedicine'), |
|
'Philosophy' => t('Philosophy'), |
|
'Physics' => t('Physics'), |
|
'Political Science' => t('Political Science'), |
|
'Psychology' => t('Psychology'), |
|
'Radiography' => t('Radiography'), |
|
'Religious Studies' => t('Religious Studies'), |
|
'Science (General)' => t('Science (General)'), |
|
'Sociology/Anthropology' => t('Sociology/Anthropology'), |
|
'Spanish' => t('Spanish'), |
|
'Statistics' => t('Statistics'), |
|
'Sustainable Design Engineering' => t('Sustainable Design Engineering'), |
|
'Wildlife Conservation' => t('Wildlife Conservation'), |
|
'Veterinary Medicine' => t('Veterinary Medicine'), |
|
'Other' => ('Other (please add to the notes field)'), |
|
]; |
|
$form['patron_type'] = [ |
|
'#type' => 'select', |
|
'#title' => t('Your Patron Type'), |
|
'#options' => $patron_types, |
|
'#required' => TRUE, |
|
]; |
|
$form['Department'] = [ |
|
'#type' => 'select', |
|
'#title' => t('Your Department/Program'), |
|
'#options' => $departments, |
|
'#required' => TRUE, |
|
]; |
|
$form['DeliveryAddress'] = [ |
|
'#type' => 'textfield', |
|
'#title' => t('Your Email (If using an email address other than @upei.ca, enter that address in the Notes field as well.)'), |
|
'#size' => 50, |
|
'#required' => TRUE, |
|
]; |
|
$form['InstitutionName'] = [ |
|
'#type' => 'hidden', |
|
'#title' => t('Name of Institution'), |
|
'#size' => 50, |
|
'#default_value' => 'University of Prince Edward Island', |
|
'#required' => TRUE, |
|
]; |
|
$form['LibraryName'] = [ |
|
'#type' => 'hidden', |
|
'#title' => t('Name of Library'), |
|
'#size' => 50, |
|
'#default_value' => 'Robertson Library', |
|
'#required' => TRUE, |
|
]; |
|
$form['notes'] = [ |
|
'#type' => 'textarea', |
|
'#title' => t('Notes'), |
|
'#size' => 50, |
|
'#required' => FALSE, |
|
]; |
|
$form['certify'] = [ |
|
'#title' => t('I certify'), |
|
'#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'] = [ |
|
'#type' => 'submit', |
|
'#value' => 'Submit', |
|
]; |
|
|
|
return $form; |
|
} |
|
|
|
}
|
|
|