get('evergreen_api_url'); if (empty($evergreen_api_url)) { $evergreen_api_url = 'https://ill.libraryupei.ca/verify_eg_user.php'; } try { $response = \Drupal::httpClient()->get($evergreen_api_url, [ 'timeout' => 10, 'query' => [ 'userid' => $user_id, ], ]); $data = json_decode((string)$response->getBody(), TRUE); if (!empty($data['error'])) { \Drupal::logger('upei_roblib_ill')->warning('Evergreen REST API returned error for user ID @user_id: @error', [ '@user_id' => $user_id, '@error' => $data['error'], ]); return FALSE; } $evergreen_surname = $data['family_name'] ?? ''; // Case-insensitive comparison of the Evergreen surname and provided surname. if (strcasecmp(trim($evergreen_surname), trim($surname)) === 0) { return TRUE; } \Drupal::logger('upei_roblib_ill')->warning('Evergreen authentication failed for user ID @user_id. Expected surname: @surname, got: @evergreen_surname', [ '@user_id' => $user_id, '@surname' => $surname, '@evergreen_surname' => $evergreen_surname, ]); return FALSE; } catch (\Exception $e) { \Drupal::logger('upei_roblib_ill')->error('Failed to connect to Evergreen REST 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 ''; } /** * 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'] = [$arr['ISSN']]; } if (isset($arr['ISBN'])) { $arr['ISBN'] = [$arr['ISBN']]; } // The below checks are due to ebscos habit of sending sending the same info in both atitle and title etc. if (isset($arr['Genre']) && $arr['Genre'] == 'article' && isset($arr['Author'])) { // We want ArticleAuthor unset($arr['Author']); } if (isset($arr['Genre']) && $arr['Genre'] == 'book' && isset($arr['ArticleAuthor'])) { // We want Author unset($arr['ArticleAuthor']); } if (isset($arr['Genre']) && $arr['Genre'] == 'book' && isset($arr['ArticleTitle'])) { // We want Title only unset($arr['ArticleTitle']); } if (isset($arr['doi'])) { $arr['AdditionalNumbers'] = $arr['doi']; } 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']); unset($arr['doi_button']); unset($arr['honeypot_time']); array_walk($arr, 'upei_roblib_ill_check_arr_item'); return $arr; } function upei_roblib_ill_check_arr_item(&$value, $key) { if (is_array($value)) { array_walk($value, 'upei_roblib_ill_check_arr_item'); } //else { // $value = Xss::filter($value); //} } /** * 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; }