diff --git a/includes/utilities.inc b/includes/utilities.inc index e77fdbf..1700177 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -10,12 +10,15 @@ * @param $value * @param $key */ + +use Drupal\Component\Utility\Xss; + function upei_roblib_ill_check_arr_item(&$value, $key) { if (is_array($value)) { array_walk($value, 'upei_roblib_ill_check_arr_item'); } else { - $value = filter_xss($value); + $value = Xss::filter($value); } } @@ -143,7 +146,8 @@ function upei_roblib_ill_request_info_array($values, $notes) { * @return string */ function upei_roblib_format_biblio_info($form_state) { - $data = upei_roblib_ill_clean_array($form_state['storage']['upei_roblib_ill_request_form']); + $values = $form_state->getValues(); + $data = upei_roblib_ill_clean_array($values); $rows = []; foreach ($data as $key => $value) { if ($key == 'ISSN' || $key == 'ISBN') { @@ -157,6 +161,6 @@ function upei_roblib_format_biblio_info($form_state) { '#prefix' => '
', '#suffix' => '
', ]; - $html_output = drupal_render($output); + $html_output = \Drupal::service('renderer')->render($output); return $html_output; } diff --git a/src/Form/RoblibIllLoanForm.php b/src/Form/RoblibIllLoanForm.php index 16cd291..4d99267 100644 --- a/src/Form/RoblibIllLoanForm.php +++ b/src/Form/RoblibIllLoanForm.php @@ -23,11 +23,22 @@ class RoblibIllLoanForm extends FormBase { * {@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); - $form = []; - - return $form; + /* $values = $form_state->getValues(); + if (empty($values)) { + $form_name = 'upei_roblib_ill_request_form'; + } + else { + $form_name = 'upei_roblib_ill_auth_form'; + } + $form_state->setValue('step', $from_name); + return $form_name === 'upei_roblib_ill_request_form' ? $this->ill_request_form($form, $form_state) : + $this->ill_auth_form($form, $form_state); + * */ } /** @@ -37,11 +48,403 @@ class RoblibIllLoanForm extends FormBase { } + /** + * @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) { + $form_state + ->set('step', 2) + ->setRebuild(TRUE); + } + /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { - + //process the form + //$response = upei_roblib_ill_add_request($form_state, $form_state['storage']['aid']); + //$error = isset($response['RequestNumber']) ? 'FALSE' : 'TRUE'; + $form_state->setRedirect('roblib_ill.loan_form_finished'); + /*$form_state->set['redirect'] = [ + '/upei/roblib/ill/finished', + [ + 'query' => [ + 'message' => 'test message',//$response['ConfirmMessage'], + 'email' => 'test email',//$form_state['values']['DeliveryAddress'], + 'error' => 'no errors',//$error, + ], + ], + ];*/ + } + + /** + * 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'); + $header_message = $config->get('ill_header_message', ''); + $emergency_message = ''; + if (!empty($header_message)) { + $emergency_message = '
'; + $emergency_message .= $header_message; + $emergency_message .= '
'; + } + $form['#prefix'] = $emergency_message . '
'; + $form['#suffix'] = '
* = Required Field
'; + $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'), + ], + '#required' => TRUE, + ]; + if (!empty($type)) { + $form['Genre']['#default_value'] = $type; + } + $form['doi'] = [ + '#type' => 'textfield', + '#title' => t("DOI (ex: 10.1016/j.ypmed.2019.01.018) more info"), + '#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' => 'upei_roblib_ill_doi_callback', + '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'], + //'#validate' => ['::validatePageOne'], + ]; + 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'] = '
* = Required Field
+
Protection of Privacy - 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.
'; + $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'), + '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'), + 'Global Affairs' => t('Global Affairs'), + 'History' => t('History'), + 'Integrated Studies' => t('Integrated Studies'), + 'Island Studies' => t('Island Studies'), + 'Journalism' => t('Journalism'), + 'Kinesiology' => t('Kinesiology'), + 'Library, Robertson' => t('Library, Robertson'), + 'Nursing' => t('Nursing'), + 'Mathematics' => t('Mathematics'), + 'Modern Languages' => t('Modern Languages'), + 'Music' => t('Music'), + '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'), + '#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; } } diff --git a/upei_roblib_ill.module b/upei_roblib_ill.module index f1745c3..ecd1bce 100644 --- a/upei_roblib_ill.module +++ b/upei_roblib_ill.module @@ -1,40 +1,4 @@ 'UPEI Roblib ILL settings', - 'description' => 'Conifiguration for the UPEI ILL forms', - 'page callback' => 'drupal_get_form', - 'page arguments' => ['upei_roblib_ill_admin_form'], - 'access arguments' => ['access administration pages'], - 'file' => 'includes/admin.form.inc', - 'type' => MENU_NORMAL_ITEM, - ]; - $items['upei/roblib/ill'] = [ - 'title' => 'UPEI ILL Form', - 'description' => 'The entry point for the UPEI ILL forms', - 'page callback' => 'drupal_get_form', - 'page arguments' => ['upei_roblib_ill_form'], - 'access arguments' => ['access content'], - 'file' => 'includes/form.inc', - 'type' => MENU_NORMAL_ITEM, - ]; - $items['upei/roblib/ill/finished'] = [ - 'title' => 'UPEI ILL Request', - 'description' => 'Redirect to this page after form is submitted', - 'page callback' => 'upei_roblib_ill_form_redirect', - 'access arguments' => ['access content'], - 'file' => 'includes/form.inc', - 'type' => MENU_NORMAL_ITEM, - ]; - return $items; -} /** * Get the metadata associated with this DOI. diff --git a/upei_roblib_ill.routing.yml b/upei_roblib_ill.routing.yml index aa055e1..4f0e789 100644 --- a/upei_roblib_ill.routing.yml +++ b/upei_roblib_ill.routing.yml @@ -10,7 +10,7 @@ roblib_ill.loan_form: path: 'upei/roblib/ill/{parameters}' defaults: _form: '\Drupal\upei_roblib_ill\Form\RoblibIllLoanForm' - _title: 'Roblib ILL Loan Form' + _title: 'Interlibrary Loan Request' parameters: '[a-zA-Z\s]+' requirements: _permission: 'access content' @@ -19,6 +19,6 @@ roblib_ill.loan_form_finished: path: 'upei/roblib/ill/finished' defaults: _controller: '\Drupal\upei_roblib_ill\Controller\RoblibIllController::finished' - _title: 'Inter Library Loan Completed' + _title: 'Interlibrary Loan Request Completed' requirements: _permission: 'access content' \ No newline at end of file