diff --git a/local/languages/de.ini b/local/languages/de.ini index 948159a37bc3c7690fe079f2f4d7c847c9ab8acd..496b964d9fb8576c6a3d0816b4ba55f86a1a5c1d 100644 --- a/local/languages/de.ini +++ b/local/languages/de.ini @@ -720,7 +720,7 @@ errorcode_password_validation_error = "Das übergebene Password ist nicht korrek errorcode_old_password_validation_error = "Die Kombination aus Benutzernummer und Kennwort ist nicht gültig. Bitte überprüfen Sie Ihre Eingabe." errorcode_empty_req_param_error = "Um das Formular erfolgreich zu senden, müssen alle erforderlichen Felder ausgefüllt sein" exclude_newspapers = "Ohne Zeitungsartikel" -exclude_filter = "Filter "%%filter_name%%" ausschließen" +exclude_filter = "Filter '%%filter_name%%' ausschließen" export_download = "Datei herunterladen" export_exporting = "Exportdatei erstellen" export_fail = "Ihre Datensätze wurden nicht exportiert" @@ -885,6 +885,7 @@ create a new list = "erstellen Sie eine neue Liste" page_reload_hint = "Seite wird neu geladen" page_reload_on_select_hint = "Seite wird bei Auswahl des Filters '%%filter_name%%' neu geladen" page_reload_on_deselect_hint = "Seite wird neu geladen, wenn der Filter '%%filter_name%%' abgewählt wird" +page_reload_on_xclude_hint = "Seite wird neu geladen, wenn der Filter '%%filter_name%%' aus den Suchergebnissen ausgeschlossen wird" password_too_short = "Zu kurz" password_very_weak = "Sehr schwach" password_weak = "Schwach" @@ -1835,8 +1836,9 @@ Address-Contact-Hours = "Adresse, Kontakt" resolver_link_access_denied = "nicht verfügbar" resolver_link_access_limited = "Im Campusnetz verfügbar" resolver_link_access_open = "verfügbar" +resolver_link_access_unknown = "Titel ist beim Resolver-Service nicht bekannt" ; message to be shown upon empty resolver response -no_resolver_links = "Keine Online Links verfügbar." +no_resolver_links = "Keine Online-Links verfügbar." ; reset password reset_password_text = "Bitten füllen Sie dieses Formular aus, um Ihr Passwort zurücksetzen zu lassen. Sie erhalten an u.g. E-Mail-Adresse eine Benachrichtigung, nachdem wir das Passwort zurückgesetzt haben." @@ -1994,7 +1996,7 @@ Modal_description = "Sie befinden sich in einem Dialogfenster, das über dem Hau Skip_navigation_links = "Sprunglinks zur Suche und zum Inhalt" Skip to search = "Zum Suchbereich" Skip to content = "Zum Inhalt" -Skip to facet = "Zu ihrem ausgewählten Suchfilter "%%filter_name%%" springen" +Skip to facet = "Zu ihrem ausgewählten Suchfilter '%%filter_name%%' springen" skip-to = "Zu" ; Overwrite, only in de.ini necessary: @@ -2072,3 +2074,6 @@ toggle-dropdown = "Untermenü aufklappen" missing_record_redirect = "Der aufgerufene Titel ist nicht vorhanden. Stattdessen wurde eine Suche ausgelöst" missing_record_exception = "Der aufgerufene Titel (%%id%%) ist nicht vorhanden." + +; #18611 unknown resolver state 10 +Unknown Electronic = "Titel ist beim Resolver-Service nicht bekannt" diff --git a/local/languages/en.ini b/local/languages/en.ini index 9ff0abdf9d9e408e5278184e8fa36ccbc8b32e56..54a429be64cdc2b6d0e5cf29c91b2906af54baf4 100644 --- a/local/languages/en.ini +++ b/local/languages/en.ini @@ -704,7 +704,7 @@ errorcode_empty_password = "Some data was missing. No password was submitted" errorcode_member_not_found = "The member number does not exist" errorcode_password_validation_error = "Your passed password is not correct" errorcode_empty_req_param_error = "All required fields have to be filled to submit successfully the form" -exclude_filter = "Exclude filter "%%filter_name%%"" +exclude_filter = "Exclude filter '%%filter_name%%'" exclude_newspapers = "Exclude Newspaper Articles" export_download = "Download File" export_exporting = "Creating Export File" @@ -847,6 +847,7 @@ create a new list = "Create a New List" page_reload_hint = "Page will refresh immediately" page_reload_on_select_hint = "Page will refresh when filter '%%filter_name%%' is selected" page_reload_on_deselect_hint = "Page will refresh when filter '%%filter_name%%' is deselected" +page_reload_on_xclude_hint = "Page will refresh when filter '%%filter_name%%' is selected for exclusion from the search results" password_too_short = "Too short" password_very_weak = "Very weak" password_weak = "Weak" @@ -1943,9 +1944,11 @@ Address-Contact-Hours = "Address, Contact" resolver_link_access_denied = "not available" resolver_link_access_limited = "Available in Campus LAN" resolver_link_access_open = "available" +resolver_link_access_unknown = "Record unknown to resolver" ; message to be shown upon empty resolver response no_resolver_links = "No online links available." + ; reset password reset_password_text = "Please complete the form below to reset your password. You will receive an email after we have completed resetting your password." Reset Password = "Reset Password" @@ -2092,7 +2095,7 @@ Modal_description = "This is a dialog window which overlays the main content of Skip_navigation_links = "Skip navigation links" Skip to search = "Skip to search" skip-to = "Skip to " -Skip to facet = "Skip to your selected search filter "%%filter_name%%"" +Skip to facet = "Skip to your selected search filter '%%filter_name%%'" License = "License" @@ -2158,3 +2161,6 @@ toggle-dropdown = "Toggle Dropdown" missing_record_redirect = "Record unavailable. You have been redirected to a search." missing_record_exception = "Record %%id%% is unavailable." + +; #18611 unknown resolver state 10 +Unknown Electronic = "Record is unknown to the resolver service" diff --git a/module/fid/src/AjaxHandler/GetResolverLinks.php b/module/fid/src/AjaxHandler/GetResolverLinks.php index c32f4083aa68432c365e1327e2e8028851f638a4..fcf3cce5f6dc8b2987821d8313209e499205191a 100644 --- a/module/fid/src/AjaxHandler/GetResolverLinks.php +++ b/module/fid/src/AjaxHandler/GetResolverLinks.php @@ -180,7 +180,7 @@ class GetResolverLinks extends \VuFind\AjaxHandler\GetResolverLinks // Render the links using the view: $view = [ 'openUrlBase' => $base, 'openUrl' => $openUrl, - 'electronic' => $electronic, 'services' => $services, + 'electronic' => $electronic, 'unknown' => $unknown, 'services' => $services, 'searchClassId' => $searchClassId, 'resolver' => $requestedResolver, 'moreOptionsLink' => $moreOptionsLink ]; diff --git a/module/finc/config/dds-form.php b/module/finc/config/dds-form.php index 1fcb1903776403d48a9eebca09448e08b83a3a72..3d081ae7e0a56aed9ab83d2dfb1ebbc9c5867e98 100644 --- a/module/finc/config/dds-form.php +++ b/module/finc/config/dds-form.php @@ -119,7 +119,7 @@ return [ 'disable_inarray_validator' => true, ], 'attributes' => [ - 'required' => false, + 'required' => true, 'id' => 'department', ], ], diff --git a/module/finc/src/finc/AjaxHandler/GetResolverLinks.php b/module/finc/src/finc/AjaxHandler/GetResolverLinks.php index ede2a0813fb502a8cf97cba198d2245d09ecf18f..fc94801bd8fe6483c199890a18fcc27874ec86e7 100644 --- a/module/finc/src/finc/AjaxHandler/GetResolverLinks.php +++ b/module/finc/src/finc/AjaxHandler/GetResolverLinks.php @@ -31,8 +31,9 @@ */ namespace finc\AjaxHandler; -use VuFind\Resolver\Driver\PluginManager as ResolverManager; use VuFind\Resolver\Connection; +use VuFind\Resolver\Driver\DriverInterface; +use VuFind\Resolver\Driver\PluginManager as ResolverManager; use VuFind\Session\Settings as SessionSettings; use Zend\Config\Config; use Zend\Mvc\Controller\Plugin\Params; @@ -62,7 +63,6 @@ class GetResolverLinks extends \VuFind\AjaxHandler\GetResolverLinks */ protected $resolverConfig; - /** * Constructor * @@ -70,7 +70,7 @@ class GetResolverLinks extends \VuFind\AjaxHandler\GetResolverLinks * @param ResolverManager $pm Resolver driver plugin manager * @param RendererInterface $renderer View renderer * @param Config $config Top-level VuFind configuration (config.ini) - * @param Config $resolver Top-level VuFind configuration (Resolver.ini) + * @param Config $resolver Link Resolver configuration (Resolver.ini) */ public function __construct( SessionSettings $ss, @@ -98,16 +98,17 @@ class GetResolverLinks extends \VuFind\AjaxHandler\GetResolverLinks { $this->disableSessionWrites(); // avoid session write timing bug $openUrl = $params()->fromQuery('openurl', ''); - $requestedResolver = $params()->fromQuery('resolvertype', ''); + $resolver = $params()->fromQuery('resolvertype', ''); $searchClassId = $params()->fromQuery('searchClassId', ''); //$config = $this->getConfig('Resolver'); $resolvers = explode(',', $this->resolverConfig->General->active_resolvers); - if (in_array($requestedResolver, $resolvers) - && isset($this->resolverConfig->$requestedResolver)) { - $resolverType = isset($this->resolverConfig->$requestedResolver->resolver) - ? $this->resolverConfig->$requestedResolver->resolver : 'generic'; + if (in_array($resolver, $resolvers) + && isset($this->resolverConfig->$resolver) + ) { + $resolverType = isset($this->resolverConfig->$resolver->resolver) + ? $this->resolverConfig->$resolver->resolver : 'generic'; if (!$this->pluginManager->has($resolverType)) { return $this->formatResponse( $this->translate("Could not load driver for $resolverType"), @@ -115,64 +116,81 @@ class GetResolverLinks extends \VuFind\AjaxHandler\GetResolverLinks ); } - $resolver = new Connection($this->pluginManager->get($resolverType)); - if (isset($this->resolverConfig->$requestedResolver->resolver_cache)) { - $resolver->enableCache( - $this->resolverConfig->$requestedResolver->resolver_cache + /** + * Loaded Resolver + * + * @var DriverInterface $resolverObject + */ + $resolverObject + = new Connection($this->pluginManager->get($resolverType)); + if (isset($this->resolverConfig->$resolver->resolver_cache)) { + $resolverObject->enableCache( + $this->resolverConfig->$resolver->resolver_cache ); } - $result = $resolver->fetchLinks($openUrl); + $result = $resolverObject->fetchLinks($openUrl); // Sort the returned links into categories based on service type: - $electronic = $print = $services = []; + $electronic = $print = $services = $unknown = []; foreach ($result as $link) { - switch (isset($link['service_type']) ? $link['service_type'] : '') { - case 'getHolding': - $print[] = $link; - break; - case 'getWebService': - $services[] = $link; - break; - case 'getDOI': - // Special case -- modify DOI text for special display: - $link['title'] = $this->translate('Get full text'); - $link['coverage'] = ''; - break; - case 'getFullTxt': - default: - $electronic[] = $link; - break; + switch ($link['service_type'] ?? '') { + case 'getHolding': + $print[] = $link; + break; + case 'getWebService': + $services[] = $link; + break; + case 'getDOI': + // Special case -- modify DOI text for special display: + $link['title'] = $this->translate('Get full text'); + $link['coverage'] = ''; + break; + case 'unknown': + $unknown[] = $link; + break; + case 'getFullTxt': + default: + $electronic[] = $link; + break; } } // Get the OpenURL base: - if (isset($this->resolverConfig->$requestedResolver) - && isset($this->resolverConfig->$requestedResolver->url) + if (isset($this->resolverConfig->$resolver) + && isset($this->resolverConfig->$resolver->url) ) { - // Trim off any parameters (for legacy compatibility -- default config - // used to include extraneous parameters): + // Trim off any parameters (for legacy compatibility + // -- default config used to include extraneous parameters): list($base) = explode( '?', - $this->resolverConfig->$requestedResolver->url + $this->resolverConfig->$resolver->url ); } else { $base = false; } - $moreOptionsLink = $resolver->supportsMoreOptionsLink() - ? $resolver->getResolverUrl($openUrl) : ''; + $moreOptionsLink = $resolverObject->supportsMoreOptionsLink() + ? $resolverObject->getResolverUrl($openUrl) : ''; // Render the links using the view: - $view = [ - 'openUrlBase' => $base, 'openUrl' => $openUrl, 'print' => $print, - 'electronic' => $electronic, 'services' => $services, - 'searchClassId' => $searchClassId, 'resolver' => $requestedResolver, - 'moreOptionsLink' => $moreOptionsLink - ]; + $html = $this->renderer->render( + 'ajax/resolverLinks.phtml', + compact( + 'openUrlBase', 'openUrl', 'print', + 'electronic', 'unknown', 'services', + 'searchClassId', 'resolver', + 'moreOptionsLink' + ) + ); + + // output HTML encoded in JSON object + return $this->formatResponse(compact('html')); } - $html = $this->renderer->render('ajax/resolverLinks.phtml', $view); - // output HTML encoded in JSON object - return $this->formatResponse(compact('html')); + // if we get here, the requested resolver is not configured + return $this->formatResponse( + $this->translate("Resolver $resolver not configured"), + self::STATUS_HTTP_ERROR + ); } } diff --git a/module/finc/src/finc/Controller/Admin/I18nController.php b/module/finc/src/finc/Controller/Admin/I18nController.php index 7052a038b9d04e14d16ef0be2e2c8b4e4e37eafd..b29ba1e16acb2fc1ad1e34c4f2f7eafd220b1345 100644 --- a/module/finc/src/finc/Controller/Admin/I18nController.php +++ b/module/finc/src/finc/Controller/Admin/I18nController.php @@ -62,6 +62,11 @@ class I18nController extends AbstractAdmin */ protected $translations; + /** + * @var string + */ + private $locale; + /** * I18nController constructor. * @@ -92,21 +97,21 @@ class I18nController extends AbstractAdmin { $params = $this->params(); $defaultLocale = array_keys($this->languages)[0]; - $locale = $params->fromQuery('locale', $defaultLocale); + $this->locale = $locale = $params->fromQuery('locale', $defaultLocale); $domain = $params->fromQuery('domain', 'default'); $translations = $this->getTranslations(); $defaultTranslations = $this->getDefaultTranslations(); - foreach (array_keys($translations[$locale]) as $name) { + foreach (array_keys($translations[$this->locale]) as $name) { $selected = $name === $domain; $domains[$name] = compact('name', 'selected'); } $languages = array_map( - function ($lang) use ($locale) { + function ($lang) { $langLocale = $lang['locale']; - $selected = $langLocale === $locale; + $selected = $langLocale === $this->locale; return $lang + compact('selected'); }, $this->languages @@ -135,11 +140,11 @@ class I18nController extends AbstractAdmin $params = $this->params(); $view->setVariables( [ - 'locale' => $locale = $params->fromPost('locale'), - 'language' => $this->languages[$locale]['name'], - 'domain' => $params->fromPost('domain'), - 'token' => $params->fromPost('token'), - 'value' => $params->fromPost('value'), + 'locale' => $locale = $params->fromPost('locale'), + 'language' => $this->languages[$locale]['name'], + 'domain' => $params->fromPost('domain'), + 'token' => $params->fromPost('token'), + 'value' => $params->fromPost('value'), 'defaultValue' => $params->fromPost('default_value') ] ); @@ -186,14 +191,12 @@ class I18nController extends AbstractAdmin protected function loadTranslations(array $dirs) { - foreach (array_keys($this->languages) as $locale) { - foreach ($this->getDomains() as $domain) { - $translations[$locale][$domain] = $this->loadMessages( - $dirs, - $domain, - $locale - ); - } + foreach ($this->getDomains() as $domain) { + $translations[$this->locale][$domain] = $this->loadMessages( + $dirs, + $domain, + $this->locale + ); } return $translations ?? []; diff --git a/module/finc/src/finc/ILS/Driver/FincILS.php b/module/finc/src/finc/ILS/Driver/FincILS.php index fd6dee3b7a9956b03b1e90bff2d47e4b69205f09..4dbb8c94e4b9546cae0e9e32304a6b741760f398 100644 --- a/module/finc/src/finc/ILS/Driver/FincILS.php +++ b/module/finc/src/finc/ILS/Driver/FincILS.php @@ -632,6 +632,14 @@ class FincILS extends PAIA implements LoggerAwareInterface (string)$vcard->{'X-LIBRARY-ILS-PATRON-EDIT-ALLOW'} ); } + if (isset($vcard->{'X-LIBRARY-BORROWER-BLACK-LIST-INDICATOR'})) { + $statuscodeInd + = (string)$vcard->{'X-LIBRARY-BORROWER-BLACK-LIST-INDICATOR'}; + } + if (isset($vcard->{'X-LIBRARY-BORROWER-BLACK-LIST-DESCRIPTION'})) { + $statuscodeDesc + = (string)$vcard->{'X-LIBRARY-BORROWER-BLACK-LIST-DESCRIPTION'}; + } } catch (Exception $e) { throw $e; } diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php index 0be113ea6225f2a6dd7266abcc338b90ebedd313..d0276cc56ad185c19e4442743e00f2b598c3e915 100644 --- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php +++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php @@ -192,6 +192,9 @@ trait SolrMarcFincTrait if (!empty($subresult)) { foreach ($subresult as $perIndicator2) { + if (empty($perIndicator2)) { + continue; + } foreach ($perIndicator2 as $current) { // If entry doesn't exist so far write // to return variable. @@ -419,7 +422,11 @@ trait SolrMarcFincTrait */ public function getISSNs() { - return $this->getFieldArray('022', ['a']); + $fromMarc = $this->getFieldArray('022', ['a']); + if (empty($fromMarc)) { + return parent::getISSNs(); + } + return $fromMarc; } /** diff --git a/module/finc/src/finc/Resolver/Driver/Ezb.php b/module/finc/src/finc/Resolver/Driver/Ezb.php index 49010ca04e3bcf9c791a0fca8348f8aa7686333e..cdd4277fa89a00dd6dc78b3a65df6003afed65ed 100644 --- a/module/finc/src/finc/Resolver/Driver/Ezb.php +++ b/module/finc/src/finc/Resolver/Driver/Ezb.php @@ -115,6 +115,15 @@ class Ezb extends AbstractBase implements TranslatorAwareInterface $parsed[$tmp2[0]] = $tmp2[1]; } + // resolver only accepts date formats YYYY, YYYY-MM, and YYYY-MM-DD + // in case we have a date in another format, drop the date information + if ( + isset($parsed['rft.date']) + && !preg_match('/^\d{4}(-\d\d(-\d\d)?)?$/',$parsed['rft.date']) + ) { + unset($parsed['rft.date']); + } + // Downgrade 1.0 to 0.1 if ($parsed['ctx_ver'] == 'Z39.88-2004') { $openURL = $this->downgradeOpenUrl($parsed); @@ -167,10 +176,12 @@ class Ezb extends AbstractBase implements TranslatorAwareInterface $this->getElectronicResults('2', 'Licensed', $records, $xpath); $this->getElectronicResults('3', 'Partially licensed', $records, $xpath); $this->getElectronicResults('4', 'Not free', $records, $xpath); + $this->getElectronicResults('10', 'Unknown Electronic', $records, $xpath); // get results for print, only if available $this->getPrintResults('2', 'Print available', $records, $xpath); $this->getPrintResults('3', 'Print partially available', $records, $xpath); + $this->getPrintResults('10', 'Unknown Print', $records, $xpath); return $records; } diff --git a/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..9f026ebd72b67266d4fe46891bc1e3b4c9c8e1ef --- /dev/null +++ b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt @@ -0,0 +1 @@ +03910nam a22009732 45000010013000000030007000130050017000200070015000370080041000520240039000930350023001320350026001550350022001810400031002030410008002340840043002421000030002852450247003152460014005622640009005763000037005853360026006223370032006483380037006805000057007175020058007745060106008325330104009385350015010425400083010575400104011405830068012446550091013127510074014037760214014778500007016918560114016988560119018129120016019319360192019479510007021398520032021468560065021788520031022439700007022749710010022819720010022919730007023019350009023088520016023178520018023338520017023518520017023688520018023858520016024038520018024198520018024378520018024558520017024738520017024908520018025078520017025258560065025428520031026079700007026389710010026459720010026559730007026659350009026728520016026818520018026978520017027158520017027328520018027498520016027678520018027838520018028018520018028198520017028378520017028548520018028718520017028899800030029060-1763648745DE-62720210719201444.0cr uuu---uuuuu210719s1965 xx |||||om 00| ||ger c7 aurn:nbn:de:bsz:15-0020-3325332urn a(DE-627)1763648745 a(DE-599)KXP1763648745 a(OCoLC)1260628169 aDE-627bgercDE-627erakwb ager aZX 70002rvk0(DE-625)rvk/158439:142571 aGöldner, Karl-Heinz4aut10aZum gegenseitigen Führen, Ein- und Unterordnen der Schüler im Sportunterrichtbein Beitrag zur Erziehung der Schüler zur Kollektivität im Sportunterricht; dargestellt auf der Grundlage eines pädagogischen ExperimentscKarl-Heinz Göldner30aEinordnen 1c1965 aIX, 200, XXVI Bl.bgraph. Darst. aTextbtxt2rdacontent aComputermedienbc2rdamedia aOnline-Ressourcebcr2rdacarrier aWahrnehmung der Rechte durch die VG Wort (§ 51 VGG) aLeipzig, Dt. Hochsch. für Körperkultur, Diss., 19650 qDE-15aOpen AccesseControlled Vocabulary for Access Rightsuhttp://purl.org/coar/access_right/c_abf2 aOnline-AusgabebLeipzigcUniversitätsbibliothek Leipzigd2020e1 Online-Ressource7|2020||||||||||1 aUB Leipzig qDE-15aUrheberrechtsschutz 1.02rsuhttp://rightsstatements.org/vocab/InC/1.0/ qDE-15aFreier Zugang - Rechte vorbehalten 1.0fUBL FZ-RV 1.0uhttps://www.ub.uni-leipzig.de/fz-rv-11 aArchivierung/Langzeitarchivierung gewährleistet2pdager5DE-15 7aHochschulschrift0(DE-588)4113937-90(DE-627)1058257780(DE-576)2094805802gnd-content aLeipzig0(DE-588)4035206-70(DE-627)1047989980(DE-576)2090112464uvp08iElektronische Reproduktion vonaGöldner, Karl-HeinztZum gegenseitigen Führen, Ein- und Unterordnen der Schüler im Sportunterrichtd1965hIX, 200, XXVI Bl.w(DE-627)142511671Xw(DE-576)355116715nUB Leipzig aaa40uhttp://nbn-resolving.org/urn:nbn:de:bsz:15-0020-332533xDigitalisierungyOnline-Zugriffzkostenfrei3Volltext42uhttps://iiif.ub.uni-leipzig.de/0000030933/manifest.jsonmB:DE-15qapplication/jsonxDigitalisierungyIIIF-Manifest aZDB-175-LHSrvaZX 7000bAllgemeines; EinführungenkSportkSportwissenschaftkTheorie des SportskAllgemeineskAllgemeines; Einführungen0(DE-627)139653542X0(DE-625)rvk/158439:142570(DE-576)32653542X aBO aDE-15z2021-07-19T00:00:00Z40uhttp://nbn-resolving.org/urn:nbn:de:bsz:15-0020-3325339LFER aLFERz2021-08-10T19:50:52Z cOD cEBOOK cEBOOK cEB alfer 2lferaDE-15 2lferaDE-Brt1 2lferaDE-Rs1 2lferaDE-Ch1 2lferaDE-L229 2lferaDE-14 2lferaDE-Pl11 2lferaDE-Gla1 2lferaDE-Zwi2 2lferaDE-Zi4 2lferaDE-Bn3 2lferaDE-D161 2lferaDE-10540uhttp://nbn-resolving.org/urn:nbn:de:bsz:15-0020-3325339LFER aLFERz2021-09-14T20:01:17Z cOD cEBOOK cEBOOK cEB alfer 2lferaDE-15 2lferaDE-Brt1 2lferaDE-Rs1 2lferaDE-Ch1 2lferaDE-L229 2lferaDE-14 2lferaDE-Pl11 2lferaDE-Gla1 2lferaDE-Zwi2 2lferaDE-Zi4 2lferaDE-Bn3 2lferaDE-D161 2lferaDE-105 a1763648745b0k1763648745 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json new file mode 100644 index 0000000000000000000000000000000000000000..9d36b72bea9d58cd7b95cc97aa6aa4c4d07d15bf --- /dev/null +++ b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json @@ -0,0 +1,12 @@ +[ + { + "url": "http://nbn-resolving.org/urn:nbn:de:bsz:15-0020-332533", + "desc": "Full Text", + "indicators": "40" + }, + { + "url": "https://iiif.ub.uni-leipzig.de/0000030933/manifest.json", + "desc": "IIIF-Manifest, Digitalisierung", + "indicators": "42" + } +] \ No newline at end of file diff --git a/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..5275de52855b249f62aba0d672f13f65736ac6fc --- /dev/null +++ b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt @@ -0,0 +1 @@ +03104naa a2200997 45000010013000000030007000130050017000200070015000370080041000520240041000930350023001340350022001570350025001790400031002040410008002350820008002431000091002512450062003422640051004043000021004553360026004763370032005023380037005345910065005716500071006366500076007076500074007836510070008579510007009278560083009348520032010179500009010499500014010589500017010729500010010899500015010999500028011149500018011429500011011609500011011719500015011829500009011979500010012069500015012169500014012319500014012459500025012599500029012849500035013139500016013489500012013649500018013769500015013949500015014099500023014249500030014479500009014779500039014869500031015259500009015569500042015659500048016079500041016559500010016969500040017069500009017469500011017559500027017669500007017939500015018009500025018159500026018409500022018669500020018889500019019089500014019279500013019419500015019549500017019699500017019869500015020039510010020189510010020288520027020389800041020650-1497294835DE-62720150306122414.0cr uuu---uuuuu150306s2015 xx |||||o 00| ||eng c7 aurn:nbn:de:bsz:15-qucosa-1619432urn a(DE-627)1497294835 a(DE-576)427294835 a(DE-599)BSZ427294835 aDE-627bgercDE-627erakwb aeng0 a7911 aStoppe, Sebastiand1978-0(DE-588)13178076X0(DE-627)6633567330(DE-576)34640150X4aut10aHow predictable are the Academy Awards?cSebastian Stoppe 1aLeipzigbUniversitätsbibliothek Leipzigc2015 aOnline-Ressource aTextbtxt2rdacontent aComputermedienbc2rdamedia aOnline-Ressourcebcr2rdacarrier aworkingPaper ; IMD-Felder und 1131 maschinell ergänzt (SWB)070(DE-588)4017102-40(DE-627)1045596830(DE-576)208918531aFilm2gnd070(DE-588)4204337-20(DE-627)10514410X0(DE-576)210161345aFilmpreis2gnd070(DE-588)4005227-80(DE-627)1047680290(DE-576)208859845aUmfrage2gnd 70(DE-588)4078704-70(DE-627)1060766120(DE-576)209209682aUSA2gnd aAR4 uhttp://nbn-resolving.de/urn:nbn:de:bsz:15-qucosa-161943yOnline-Zugriff9DE-15 aDE-15z2015-03-06T12:24:14Z aKino aSpielfilm aFilmaufnahme aFilme aSpielfilme aAudiovisuelles Material aVideokassette a电影 a電影 aФильм aFilm aPreis aFilmpreise a电影奬 a電影奬 aÐšÐ¸Ð½Ð¾Ð¿Ñ€ÐµÐ¼Ð¸Ñ aUnited States of America aVereinigte Staaten von Amerika aNordamerika aAmerika aUnited States aEtats Unis aEtats-Unis aVereinigte Staaten aEstados Unidos de America aEEUU aVereinigte Staaten von Nordamerika aSoedinennye Å taty Ameriki aSÅ A aStany Zjednoczone Ameryki Północnej aHÄ“nÅmenai Politeiai tÄ“s Boreiu AmerikÄ“s aHÄ“nÅmenes Politeies tÄ“s AmerikÄ“s aHÄ“PA aÄ’nÅmenes Politeies tÄ“s AmerikÄ“s aÄ’PA aMeiguo aEtats-Unis d'Amérique aUS aAmerikaner aBevölkerungsumfrage aRepräsentativumfrage aMeinungsbefragung aMeinungsumfrage aVolksbefragung aBefragung aUmfragen aDemoskopie aæ°‘æ„调查 aæ°‘æ„調查 aÐžÐ¿Ñ€Ð¾Ñ aXD-US bXA-DE 2fincaFID-MEDIEN-DE-15 a1497294835b0k1497294835o427294835 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json new file mode 100644 index 0000000000000000000000000000000000000000..199d5009e410306fff651d44e7944e83341086b1 --- /dev/null +++ b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json @@ -0,0 +1,7 @@ +[ + { + "url": "http://nbn-resolving.de/urn:nbn:de:bsz:15-qucosa-161943", + "desc": "Online-Zugriff", + "indicators": "4 " + } +] \ No newline at end of file diff --git a/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..79c2b4b3541ca68917fa5a65e77a41e1dabec97c --- /dev/null +++ b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt @@ -0,0 +1 @@ +01725cam a2200397157450000100200000000700150002000800390003504100080007403700360008210000220011824500440014026000790018452005410026350000170080485600780082165000340089965000150093365000220094865000210097065000090099165000350100065000110103565000140104665000190106065000260107965000110110565000220111665000190113865000090115765000200116665000290118665000100121565000110122508200080123698000830124422-15-qucosa-161943cr |||||||||||150101s2015 xx eng aeng nurn:nbn:de:bsz:15-qucosa-161943 aStoppe, Sebastian aHow predictable are the Academy Awards? bUniversitätsbibliothek Leipzigc2015g(issued 2015-03-06)9(created 2015)3 aBy conducting an explorative study it is tried to determine whether a sample of film enthusiasts can produce a similar result in judging for the 87th Academy Awards for movies in 2014 like the actual Academy members or not. An online survey has been created and the votes cast by the participants have been tabulated. It can be shown that the results of the simulated awards voting in the survey are quite similar to the actual Academy decision. However, additional adjustments and further studies are recommended to ensure the results. aworkingPaper41uhttps://nbn-resolving.org/urn:nbn:de:bsz:15-qucosa-161943zOnline-Zugriff 4aAcademy Awards. Rangfolgewahl 4aWahlzettel 4aeinfache Mehrheit 4aVorhersagbarkeit 4aFilm 4aVereinigte Staaten von Amerika 4aStudie 4aBefragung 4aAcademy Awards 4ainstant runoff voting 4aballot 4arelative majority 4apredictability 4afilm 4amotion pictures 4aUnited States of America 4astudy 4asurvey0 a791 aurn:nbn:de:bsz:15-qucosa-161943b22csid-22-col-qucosa-adlrcsid-22-col-qucosa \ No newline at end of file diff --git a/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json new file mode 100644 index 0000000000000000000000000000000000000000..6f031148fd50c2bc1da67e1071d4fd0b6116eb38 --- /dev/null +++ b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json @@ -0,0 +1,7 @@ +[ + { + "url": "https://nbn-resolving.org/urn:nbn:de:bsz:15-qucosa-161943", + "desc": "Online-Zugriff", + "indicators": "41" + } +] \ No newline at end of file diff --git a/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php b/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php index 886eb7aecb2ba0bb3418ce78c8af9fa49a6523cd..1b5e7ec45dd969f10709e13e1aeaef9304dc1b5a 100644 --- a/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php +++ b/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php @@ -28,8 +28,9 @@ */ namespace fincTest\RecordDriver; -use VuFindTest\Unit\TestCase as VuFindTestCase; use finc\RecordDriver\SolrMarcFinc as SolrMarcFincDriver; +use finc\RecordDriver\SolrMarcFincTrait; +use VuFindTest\Unit\TestCase as VuFindTestCase; /** * SolrMarcTestCase @@ -38,6 +39,7 @@ use finc\RecordDriver\SolrMarcFinc as SolrMarcFincDriver; * @package finc * @author Guenter Hipler <guenter.hipler@unibas.ch> * @author Frank Morgner <morgnerf@ub.uni-leipzig.de> + * @author Robert Lange <lange@ub.uni-leipzig.de> * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link http://vufind.org */ @@ -73,11 +75,62 @@ class SolrMarcFincTestCase extends VuFindTestCase * * @return array */ - protected function getFixtureData($file) + protected function getFixtureData($file, $decode = true) + { + $content = file_get_contents(realpath(FINC_TEST_FIXTURES . '/' . $file)); + return $decode ? json_decode($content, true) : $content; + } + + /** + * @return void + */ + public function testGetURLs() + { + // although not current isil, link for IIIF should be shown based on indicator 2 #20600 + $this->runGetURLsTestCase('IIIF_0-1763648745'); + $this->runGetURLsTestCase('IIIF_0-1763648745', ['DE-15']); + + // Record 0-1497294835 with isil of DE-15 in fullrecord (subfield 9) results in empty array for adlr #18915 + $this->runGetURLsTestCase('isil_with_DE-15_0-1497294835', ['DE-15-FID'], []); + $this->runGetURLsTestCase('isil_with_DE-15_0-1497294835', ['FID-MEDIEN-DE-15'], []); + // .. but is shown in DE-15 + $this->runGetURLsTestCase('isil_with_DE-15_0-1497294835', ['DE-15']); + + // Record 0-1497294835 has no given isil in fullrecord (subfield 9) => shown as default / fallback #18915 + $this->runGetURLsTestCase('no_isil_for_22-15-qucosa-161943', ['DE-15-FID']); + $this->runGetURLsTestCase('no_isil_for_22-15-qucosa-161943', ['DE-15']); + } + + protected function getDriverMock() + { + return new SolrMarcFincDriverMock(); + } + + /** + * @return void + */ + public function runGetURLsTestCase(string $testCase, array $isils = [], $expectedResult = null) + { + $driver = $this->getDriverMock(); + $driver->setFullRecord($this->getFixtureData("getUrls/{$testCase}_fullrecord.txt", false)); + $driver->setIsils($isils); + $actualResult = $driver->getURLs(); + $expectedResult = $expectedResult ?? $this->getFixtureData("/getUrls/{$testCase}_result.json"); + $this->assertEquals($expectedResult, $actualResult); + } +} + +class SolrMarcFincDriverMock extends SolrMarcFincDriver +{ + use SolrMarcFincTrait; + + public function setFullRecord(string $fullrecord) + { + $this->fields['fullrecord'] = $fullrecord; + } + + public function setIsils(array $isils) { - return json_decode( - file_get_contents(realpath(FINC_TEST_FIXTURES . '/' . $file)), - true - ); + $this->isil = $isils; } } diff --git a/themes/finc-accessibility/templates/Auth/AbstractBase/login.phtml b/themes/finc-accessibility/templates/Auth/AbstractBase/login.phtml new file mode 100644 index 0000000000000000000000000000000000000000..7a7764f9287be9baa6b4dc3f3b3c83ababcf7843 --- /dev/null +++ b/themes/finc-accessibility/templates/Auth/AbstractBase/login.phtml @@ -0,0 +1,22 @@ +<!-- finc-accessibility: auth - abstractbase - login.phtml --> +<?php $account = $this->auth()->getManager(); ?> +<?php $sessionInitiator = $account->getSessionInitiator($this->serverUrl($this->url('myresearch-home'))); ?> +<?php if (!$sessionInitiator): // display default login form if no login URL provided ?> + <form method="post" action="<?=$this->url('myresearch-home')?>" name="loginForm" class="form-login"> + <?=$this->auth()->getLoginFields()?> + <input type="hidden" name="auth_method" value="<?=$account->getAuthMethod()?>"> + <input type="hidden" name="csrf" value="<?=$this->escapeHtmlAttr($account->getCsrfHash())?>" /> + <div class="form-group"> + <input class="btn btn-primary" type="submit" name="processLogin" aria-label="<?= $this->transEsc("Login-to-account") ?>" value="<?=$this->transEsc('Login')?>"> + <?php if ($account->supportsCreation()): ?> + <a class="btn btn-link createAccountLink" href="<?=$this->url('myresearch-account') ?>?auth_method=<?=$account->getAuthMethod()?>"><?=$this->transEsc('Create New Account')?></a> + <?php endif; ?> + <?php if ($account->supportsRecovery()): ?> + <a class="btn btn-link" href="<?=$this->url('myresearch-recover') ?>?auth_method=<?=$account->getAuthMethod()?>"><?=$this->transEsc('Forgot Password')?></a> + <?php endif; ?> + </div> + </form> +<?php else: ?> + <a href="<?=$this->escapeHtmlAttr($sessionInitiator)?>" class="btn btn-link" data-lightbox-ignore><?=$this->transEsc("Institutional Login")?></a> +<?php endif; ?> +<!-- finc-accessibility: auth - abstractbase - login.phtml - END --> diff --git a/themes/finc-accessibility/templates/Recommend/SideFacets/cluster-list.phtml b/themes/finc-accessibility/templates/Recommend/SideFacets/cluster-list.phtml index b4099695aacfd3feb94bd97e67246300908d6a64..293af05732827251527ee22b281cc69fe25b3cae 100644 --- a/themes/finc-accessibility/templates/Recommend/SideFacets/cluster-list.phtml +++ b/themes/finc-accessibility/templates/Recommend/SideFacets/cluster-list.phtml @@ -42,9 +42,11 @@ $moreUrl .= '&baseUriExtra=' . urlencode($this->baseUriExtra); } ?> + <li> <a class="facet narrow-toggle <?=$moreClass ?>" data-lightbox href="<?=$moreUrl ?>" rel="nofollow"> <span class="text"><?=$this->transEsc('see all')?> ...</span> </a> + </li> <?php endif; ?> <li class="facet narrow-toggle <?=$moreClass ?>"> <a class="text" href="#" onclick="event.stopImmediatePropagation(); return lessFacets('narrowGroupHidden-<?=$this->escapeHtmlAttr($this->title) ?>');"> diff --git a/themes/finc/templates/Recommend/SideFacets/single-facet.phtml b/themes/finc/templates/Recommend/SideFacets/single-facet.phtml index 9f0ebf61886dbd8d670abb9459721b0277080a53..00a568ce1757f155394f0a9a0dfb49b78b4e6362 100644 --- a/themes/finc/templates/Recommend/SideFacets/single-facet.phtml +++ b/themes/finc/templates/Recommend/SideFacets/single-facet.phtml @@ -70,8 +70,11 @@ <?php if ($hasSubLinks): ?> <?php $excludeURL = $this->urlBase . $this->url->addFacet($this->group, $this->facet['value'], 'NOT'); ?> - <a href="<?=$excludeURL ?>" data-lightbox-ignore class="exclude" title="<?= $this->transEsc('exclude_filter', ['%%filter_name%%' => $this->facet['displayText']]) ?>, <?= $this->transEsc('page_reload_hint') ?>"> + <a href="<?=$excludeURL ?>" data-lightbox-ignore class="exclude" title="<?= $this->transEsc('exclude_filter', ['%%filter_name%%' => $this->facet['displayText']]) ?>, <?= $this->transEsc('page_reload_on_xclude_hint', ['%%filter_name%%' => $this->facet['displayText']]) ?>"> <i class="fa fa-times" aria-hidden="true"></i> + <span class="sr-only"> + <?= $this->transEsc('exclude_filter', ['%%filter_name%%' => $this->facet['displayText']]) ?>, <?= $this->transEsc('page_reload_on_xclude_hint', ['%%filter_name%%' => $this->facet['displayText']]) ?> + </span> </a> <?php endif; ?> diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml index 3c1233c8b90ba4f5341f0a60d79e1a1bfa024bae..377e7ddf6a32d81a0bc92b694099ffb1713e1234 100644 --- a/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml +++ b/themes/finc/templates/RecordDriver/DefaultRecord/list-entry.phtml @@ -125,7 +125,7 @@ $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('list' <?php endforeach; ?> <?php endif; ?> - <?php if (count($this->lists) > 0): ?> + <?php if (!empty($this->lists)): ?> <strong><?=$this->transEsc('Saved in')?>:</strong> <?php $i = 0; foreach ($this->lists as $current): ?> diff --git a/themes/finc/templates/admin/i18n/home.phtml b/themes/finc/templates/admin/i18n/home.phtml index 1742553be46f6279e424f9c0e88134fbd2287e4d..0e634d2a26596a0f79e5e655361d82c0636d5a54 100644 --- a/themes/finc/templates/admin/i18n/home.phtml +++ b/themes/finc/templates/admin/i18n/home.phtml @@ -1,7 +1,7 @@ <!-- finc: admin - i18n - home --> <?php $this->headTitle($this->translate('admin_i18n_menu_entry')); ?> -<div class="<?= ($this->layoutClass('mainbody') . (!$this->config()->get('config')->Site->admin_enabled ? ' solo' : '')) ?>"> +<div class="<?= ($this->layoutClass('mainbody') . (!$this->config()->get('config')->Site->admin_enabled ? ' solo' : '')) ?>" style="width: 100%"> <h1><?= $this->transEsc('admin_i18n_menu_entry') ?></h1> <?= $this->flashmessages() ?> <div class="panel panel-info"> @@ -76,12 +76,6 @@ </table> </div> -<?php if ($this->config()->get('config')->Site->admin_enabled): ?> - <div class="<?= $this->layoutClass('sidebar') ?>"> - <?= $this->render("admin/menu.phtml") ?> - </div> -<?php endif; ?> - <?php $script = <<<JS $(document).ready(function () { diff --git a/themes/finc/templates/ajax/resolverLinks.phtml b/themes/finc/templates/ajax/resolverLinks.phtml index 9b46024cabfd134f762343dc09fb45b715ec86fe..d9b82875c17cd7e6184f08cc5721db62b1dcad85 100644 --- a/themes/finc/templates/ajax/resolverLinks.phtml +++ b/themes/finc/templates/ajax/resolverLinks.phtml @@ -25,7 +25,7 @@ <small><?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?><?=isset($link['coverageHref'])?' <a href="'.$link['coverageHref'].'" target="_blank">'.$this->translate('Readme').'</a>':''?></small> <?php /* finc-specific change #5334 - END */ ?> <?php else: ?> - <?=isset($link['title'])?$this->escapeHtml($link['title']):''?> <?=isset($link['coverage'])?$this->escapeHtml($link['coverage']):''?> + <?=isset($link['title'])?$this->escapeHtml($link['title']):''?> <?=isset($link['coverage'])?$this->transEsc($link['coverage']):''?> <?php endif; ?> </li> <?php endforeach; ?> diff --git a/themes/finc/templates/header.phtml b/themes/finc/templates/header.phtml index 50d239b701eb65722cd1115f6bdc0c405fae1650..e5220854a619639dc3b6406eabb204102b6dce00 100644 --- a/themes/finc/templates/header.phtml +++ b/themes/finc/templates/header.phtml @@ -37,8 +37,8 @@ <?php $cart = $this->cart(); if ($cart->isActive()): ?> <li id="cartSummary"> - <a id="cartItems" class="btn" data-lightbox title="<?=$this->transEsc('View Book Bag')?>" href="<?=$this->url('cart-home')?>"> - <i class="fa fa-clipboard" aria-hidden="true"></i> <span role="status"><span class="sr-only"><?=$this->transEsc('Book Bag')?>:</span> <strong><?=count($cart->getItems())?></strong> <span class="cart-label"><?=$this->transEsc('items')?></span></span> + <a id="cartItems" class="btn" data-lightbox title="<?=$this->transEsc('View Book Bag')?>" href="<?=$this->url('cart-home')?>" aria-describedby="cartStatus"> + <i class="fa fa-clipboard" aria-hidden="true"></i> <span class="sr-only"><?=$this->transEsc('Book Bag')?>:</span> <strong><?=count($cart->getItems())?></strong> <span class="cart-label"><?=$this->transEsc('items')?></span> <span class="sr-only full<?=!$cart->isFull() ? ' hidden' : ''?>">(<?=$this->transEsc('bookbag_full')?>)</span> </a> </li> diff --git a/themes/finc/templates/myresearch/bulk-action-buttons.phtml b/themes/finc/templates/myresearch/bulk-action-buttons.phtml new file mode 100644 index 0000000000000000000000000000000000000000..0f70b338fb60343c7e44a4ec998bba4c2c7538f0 --- /dev/null +++ b/themes/finc/templates/myresearch/bulk-action-buttons.phtml @@ -0,0 +1,26 @@ +<!-- finc: myresearch - bulk-action-buttons --> +<?php if (isset($list)): ?> + <input type="hidden" name="listID" value="<?=$this->escapeHtmlAttr($list->id)?>" /> + <input type="hidden" name="listName" value="<?=$this->escapeHtmlAttr($list->title)?>" /> +<?php endif; ?> +<?php $user = $this->auth()->isLoggedIn(); ?> +<div class="bulkActionButtons"> + <div class="bulk-checkbox"> + <input type="checkbox" name="selectAll" class="checkbox-select-all" id="myresearchCheckAll"/> + <label for="myresearchCheckAll"><?=$this->transEsc('select_page')?> | <?=$this->transEsc('with_selected')?>:</label> + </div> + <div class="btn-group"> + <input id="<?=$this->idPrefix?>ribbon-email" class="btn btn-default" type="submit" name="email" value="<?=$this->transEsc('Email')?>" title="<?=$this->transEsc('email_selected')?>"/> + <?php if ((null !== $this->list && $this->list->editAllowed($user)) || null === $this->list && $user): ?> + <input class="btn btn-default" id="<?=$this->idPrefix?>delete_list_items_<?=null !== $this->list ? $this->escapeHtmlAttr($this->list->id) : ''?>" type="submit" name="delete" value="<?=$this->transEsc('Delete')?>" title="<?=$this->transEsc('delete_selected')?>"/> + <?php endif; ?> + <?php $exportOptions = $this->export()->getActiveFormats('bulk'); if (count($exportOptions) > 0): ?> + <input id="<?=$this->idPrefix?>ribbon-export" class="btn btn-default" type="submit" name="export" value="<?=$this->transEsc('Export')?>" title="<?=$this->transEsc('export_selected')?>"/> + <?php endif; ?> + <input id="<?=$this->idPrefix?>ribbon-print" class="btn btn-default" type="submit" name="print" value="<?=$this->transEsc('Print')?>" title="<?=$this->transEsc('print_selected')?>" data-lightbox-ignore/> + <?php if ($this->cart()->isActive()): ?> + <input class="btn btn-default" id="<?=$this->idPrefix?>updateCart" type="submit" name="add" value="<?=$this->transEsc('Add to Book Bag')?>"/> + <?php endif; ?> + </div> +</div> +<!-- finc: myresearch - bulk-action-buttons - END --> \ No newline at end of file diff --git a/themes/finc/templates/myresearch/cataloglogin.phtml b/themes/finc/templates/myresearch/cataloglogin.phtml index 65a755ab2d32f494b16a448504f5d443c16c5c67..1f89d9181e8f2d8788f28707721dfd0244ffc9fa 100644 --- a/themes/finc/templates/myresearch/cataloglogin.phtml +++ b/themes/finc/templates/myresearch/cataloglogin.phtml @@ -37,7 +37,7 @@ <input id="profile_cat_password" type="password" name="cat_password" value="" class="form-control" autocomplete="current-password"/> </div> <div class="form-group"> - <input class="btn btn-primary" type="submit" name="processLogin" value="<?=$this->transEsc('Login')?>"> + <input class="btn btn-primary" type="submit" name="processLogin" aria-label="<?= $this->transEsc("Login-to-account") ?>" value="<?=$this->transEsc('Login')?>"> </div> </form> <?php endif; ?> diff --git a/themes/finc/templates/search/bulk-action-buttons.phtml b/themes/finc/templates/search/bulk-action-buttons.phtml index cc40884afe28ff37699faaf0e3e6d1483eb120b3..caa79a1ba818f44c22f100ed276a2323a0b07411 100644 --- a/themes/finc/templates/search/bulk-action-buttons.phtml +++ b/themes/finc/templates/search/bulk-action-buttons.phtml @@ -10,13 +10,13 @@ </div> <div class="btn-group"> <?php if (isset($this->showBulkOptions) && $this->showBulkOptions): ?> - <input id="ribbon-email" class="btn btn-transparent" type="submit" name="email" title="<?=$this->transEsc('bookbag_email_selected')?>" value="<?=$this->transEsc('Email')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> + <input id="<?=$this->idPrefix?>ribbon-email" class="btn btn-transparent" type="submit" name="email" title="<?=$this->transEsc('bookbag_email_selected')?>" value="<?=$this->transEsc('Email')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> <?php $exportOptions = $this->export()->getBulkOptions(); if (count($exportOptions) > 0): ?> - <input id="ribbon-export" class="btn btn-transparent" type="submit" name="export" title="<?=$this->transEsc('bookbag_export_selected')?>" value="<?=$this->transEsc('Export')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> + <input id="<?=$this->idPrefix?>ribbon-export" class="btn btn-transparent" type="submit" name="export" title="<?=$this->transEsc('bookbag_export_selected')?>" value="<?=$this->transEsc('Export')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> <?php endif; ?> - <input id="ribbon-print" class="btn btn-transparent" type="submit" name="print" title="<?=$this->transEsc('bookbag_print_selected')?>" value="<?=$this->transEsc('Print')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> + <input id="<?=$this->idPrefix?>ribbon-print" class="btn btn-transparent" type="submit" name="print" title="<?=$this->transEsc('bookbag_print_selected')?>" value="<?=$this->transEsc('Print')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> <?php if ($this->userlist()->getMode() !== 'disabled'): ?> - <input id="ribbon-save" class="btn btn-transparent" type="submit" name="saveCart" title="<?=$this->transEsc('bookbag_save_selected')?>" value="<?=$this->transEsc('Save')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> + <input id="<?=$this->idPrefix?>ribbon-save" class="btn btn-transparent" type="submit" name="saveCart" title="<?=$this->transEsc('bookbag_save_selected')?>" value="<?=$this->transEsc('Save')?>"<?php if($this->formAttr):?> form="<?=$this->escapeHtmlAttr($this->formAttr) ?>"<?php endif; ?>/> <?php endif; ?> <?php endif; ?> <?php if (isset($this->showCartControls) && $this->showCartControls): ?>