Check the "Your Last Name" and "Your Campus ID" fields - those two need to match what is on file . (Your @campus_id appears as the NUMBER near the middle of your campus card). If you do not have a @campus_id, please contact the Robertson Library Service Desk, or, call @phone. Note: if you are a student taking online courses only, please email @ill_email.
@msg_from_server', [ '@campus_id' => $campus_id->toString(), '@ill_email' => $ill_email->toString(), '@phone' => $phone->toString(), '@msg_from_server' => $server_response, ]); } /** * Lookup the user in Evergreen and verify the surname matches. * * @param string $campus_id * The user's campus ID / barcode. * @param string $surname * The surname to check against. * * @return bool * TRUE if the surname matches, FALSE otherwise. */ function upei_roblib_ill_authenticate($campus_id, $surname): bool { if (empty($campus_id) || empty($surname)) { return FALSE; } $config = \Drupal::config('upei_roblib_ill.settings'); $evergreen_api_url = $config->get('evergreen_api_url'); if (empty($evergreen_api_url)) { \Drupal::logger('upei_roblib_ill')->error('Evergreen API URL is not configured.'); return FALSE; } // Construct the PatronAPI dump URL. // Format: {evergreen_api_url}/api/patronapi/{campus_id}/dump $url = rtrim($evergreen_api_url, '/') . '/api/patronapi/' . urlencode($campus_id) . '/dump'; try { $response = \Drupal::httpClient()->get($url, [ 'timeout' => 10, ]); $data = (string)$response->getBody(); // The PatronAPI dump endpoint returns data in a plain text/HTML format // looking like `PATRN NAME[p]=Smith, John`. if (preg_match('/PATRN NAME\[p\]=([^\[<]+)/i', $data, $matches)) { $patron_name = trim($matches[1]); // Usually "Lastname, Firstname" $name_parts = explode(',', $patron_name); if (count($name_parts) > 0) { $evergreen_surname = trim($name_parts[0]); // Case-insensitive comparison of the extracted surname and provided surname. if (strcasecmp($evergreen_surname, trim($surname)) === 0) { return TRUE; } } } // Log failure for debugging. \Drupal::logger('upei_roblib_ill')->warning('Evergreen authentication failed for @campus_id. Expected surname: @surname', [ '@campus_id' => $campus_id, '@surname' => $surname, ]); return FALSE; } catch (\Exception $e) { \Drupal::logger('upei_roblib_ill')->error('Failed to connect to Evergreen API: @message', [ '@message' => $e->getMessage(), ]); return FALSE; } } /** * Allows us to ask for _REQUEST variables that may or may not exist without * generating a php warning. Also does some formatting 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']) ?Html::escape($_REQUEST['auinit']) : NULL; $last_name = isset($_REQUEST['aulast']) ?Html::escape($_REQUEST['aulast']) : NULL; return !empty($last_name) ? $last_name . ',' . $initial : ''; } if ($variable == 'issn' && !empty($_REQUEST[$variable])) { // ebsco sometimes sends garbage as issns verify this is a valid issn before displaying the value in the form. return preg_match('/^\d{4}-?\d{3}[\dxX]$/', $_REQUEST[$variable]) ?Html::escape($_REQUEST[$variable]) : ''; } // ebsco sometimes returns bookitem we only understand chapter if (($variable == 'genre' && !empty($_REQUEST[$variable])) && $_REQUEST[$variable] == 'bookitem') { return 'chapter'; } return isset($_REQUEST[$variable]) ?Html::escape($_REQUEST[$variable]) : ''; } function upei_roblib_ill_get_doi_from_request() { return (!empty($_REQUEST['doi'])) ? $_REQUEST['doi'] : upei_roblib_ill_get_doi_from_id(); } function upei_roblib_ill_get_doi_from_id() { if (!empty($_REQUEST['ID'])) { return (strpos($_REQUEST['ID'], 'doi:') !== 0) ? '' : $_REQUEST['ID']; } return ''; } /** * 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 = []; $genre = $values['Genre']; $requestInfo['DateSubmitted'] = date('Y-m-d H:i:s'); $requestInfo['Notes'] = $notes; if ($genre == 'book') { $requestInfo['ServiceType'] = 'L'; $requestInfo['ServiceLabel'] = "R"; //$requestInfo['RequestSource'] = "C"; } else { $requestInfo['ServiceType'] = 'X'; $requestInfo['ServiceLabel'] = "R"; //$requestInfo['RequestSource'] = "C"; } return $requestInfo; } /** * Creates a summary Table based on the biblio information in the form_state * array for display * * @param $form_state * * @return string */ function upei_roblib_format_biblio_info($form_state) { $values = $form_state->getValues(); $data = upei_roblib_ill_clean_array($values); $rows = []; foreach ($data as $key => $value) { if ($key == 'ISSN' || $key == 'ISBN') { $value = reset($value); } array_push($rows, [$key, $value]); } $output = [ '#theme' => 'table', '#rows' => $rows, '#prefix' => '
', '#suffix' => '
', ]; $html_output = \Drupal::service('renderer')->render($output); return $html_output; }