diff --git a/local/config/vufind/FincLibero.ini b/local/config/vufind/FincLibero.ini index 3b73011fd7f88f3a4f2e1cf71a1d30fe1aea2eac..2fa52f5332f105e26eef5dccb07903de05db2ba0 100644 --- a/local/config/vufind/FincLibero.ini +++ b/local/config/vufind/FincLibero.ini @@ -45,6 +45,9 @@ relative_path=FincILS.ini ; Limitations that will identify the item for being bound to another item. ;awlLimitations[] = DE-15:OrderViaBoundItem +; Limitations that will be ignored by VuFind (cf. #9359#note-7) +;ignoriedLimitations[] = DE-15:ContactStaff + ; URIs that will be used for stack views ;stackURIs[] = "http://data.ub.uni-leipzig.de/resource/DE-15/pickup/zw01thek" diff --git a/local/languages/DDS/de.ini b/local/languages/DDS/de.ini index fc735434269263d722f16de3da3a8790f14fda6b..cdb304cca5ec0d69c473ab7501ce0e2a2a2d26f0 100644 --- a/local/languages/DDS/de.ini +++ b/local/languages/DDS/de.ini @@ -25,6 +25,7 @@ dds_restriction_text = "Dieser Dienst steht nur Mitarbeiterinnen und Mitarbeiter dds_issn = "Bitte eine korrekte ISSN-10 oder ISSN-13 angeben." dds_error_publishdate_too_short = "Mindestens ein zweistelliges Erscheinungsjahr angeben." dds_error_publishdate_too_long = "Maximal ein vierstelliges Erscheinungsjahr angeben." +dds_error_general_message = "Die Bestellung konnte nicht abgesendet werden. Bitte korrigieren Sie die unten angegebenen Fehler." acquisition_error_publishdate_pattern = "Bitte ein korrektes Jahr eingeben." dds_error_pages_too_short = "Mindestens einstellige Seitenzahlen angeben." -acquisition_error_pages_pattern = "Bitte einen Seitenzahl (z.B. 20 oder 20-29) angeben." \ No newline at end of file +acquisition_error_pages_pattern = "Bitte eine Seitenzahl (z.B. 20 oder 20-29) angeben." \ No newline at end of file diff --git a/local/languages/DDS/en.ini b/local/languages/DDS/en.ini index f5f96b23225173a5ee4773c3d2eec5d6c5122cfe..d99b2c9527d07f48c9f1423e83cc9a0ac768e595 100644 --- a/local/languages/DDS/en.ini +++ b/local/languages/DDS/en.ini @@ -25,6 +25,7 @@ dds_restriction_text = "This service is only available for members of Leipzig Un dds_issn = "Only correct ISSN-10 or ISSN-13" dds_error_publishdate_too_short = "min. a two digit publishdate" dds_error_publishdate_too_long = "max. a four digit publishdate" +dds_error_general_message = "The order could not be sent. Please correct the errors given below." acquisition_error_publishdate_pattern = "Please enter a correct year." dds_error_pages_too_short = "min. page 1" acquisition_error_pages_pattern = "Please specify a number of pages (e.g. 20 or 20-29). " \ No newline at end of file diff --git a/module/finc/config/dds-form.php b/module/finc/config/dds-form.php index 3d081ae7e0a56aed9ab83d2dfb1ebbc9c5867e98..20a0adfeb6320390d07099e40aca695e291d12c3 100644 --- a/module/finc/config/dds-form.php +++ b/module/finc/config/dds-form.php @@ -19,19 +19,14 @@ * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 */ -use fid\Hydrator\UserHydrator; -use Zend\Filter\Boolean; use Zend\Filter\PregReplace; use Zend\Filter\StringTrim; -use Zend\Form\Element\Checkbox; use Zend\Form\Element\Email; use Zend\Form\Element\Select; use Zend\Form\Element\Submit; use Zend\Form\Element\Text; use Zend\Form\Element\Textarea; use Zend\Validator\EmailAddress; -use Zend\Validator\Identical; -use Zend\Validator\Isbn; use Zend\Validator\NotEmpty; use Zend\Validator\Regex; use Zend\Validator\StringLength; @@ -119,11 +114,12 @@ return [ 'disable_inarray_validator' => true, ], 'attributes' => [ - 'required' => true, + 'required' => false, 'id' => 'department', ], ], ], + /* used for division 15 (medical) only */ 'inputdepartment' => [ 'spec' => [ 'name' => 'inputdepartment', @@ -400,4 +396,4 @@ return [ ], ], ], -]; \ No newline at end of file +]; diff --git a/module/finc/config/module.config.php b/module/finc/config/module.config.php index a5dfdc532872e3cdaab10332afa88f79cfe23231..d126c48273506f933fe89a8c7656250c81d336f8 100644 --- a/module/finc/config/module.config.php +++ b/module/finc/config/module.config.php @@ -10,6 +10,7 @@ $config = [ ], 'service_manager' => [ 'factories' => [ + 'finc\Auth\ILSAuthenticator' => 'finc\Auth\ILSAuthenticatorFactory', 'finc\Cache\Manager' => 'VuFind\Cache\ManagerFactory', 'finc\Config\BranchesReader' => 'VuFind\Config\YamlReaderFactory', 'finc\ILS\Connection' => 'VuFind\ILS\ConnectionFactory', @@ -29,6 +30,7 @@ $config = [ ], 'aliases' => [ 'MvcTranslator' => 'Zend\Mvc\I18n\Translator', + 'VuFind\Auth\ILSAuthenticator' => 'finc\Auth\ILSAuthenticator', 'VuFind\Cache\Manager' => 'finc\Cache\Manager', 'VuFind\ILS\Connection' => 'finc\ILS\Connection', 'VuFind\ILS\Logic\Holds' => 'finc\ILS\Logic\Holds', @@ -104,6 +106,14 @@ $config = [ 'finc\AjaxHandler\GetRecordCover', ] ], + 'auth' => [ + 'factories' => [ + 'finc\Auth\ILS' => 'finc\Auth\Factory::getILS' + ], + 'aliases' => [ + 'VuFind\Auth\ILS' => 'finc\Auth\ILS', + ] + ], 'ils_driver' => [ 'factories' => [ 'finc\ILS\Driver\FincILS' => 'finc\ILS\Driver\Factory::getFincILS', @@ -378,7 +388,6 @@ $staticRoutes = [ 'MyResearch/Acquisition', 'MyResearch/ResetPassword', 'dds/Home', - 'dds/Email', 'Record/EblLink' ]; diff --git a/module/finc/src/finc/Auth/Factory.php b/module/finc/src/finc/Auth/Factory.php new file mode 100644 index 0000000000000000000000000000000000000000..dead0c9064c4fd7fd672c668bfc56762d8fb9b24 --- /dev/null +++ b/module/finc/src/finc/Auth/Factory.php @@ -0,0 +1,58 @@ +<?php +/** + * Factory for authentication services. + * + * PHP version 5 + * + * Copyright (C) Villanova University 2014. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category VuFind + * @package Authentication + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace finc\Auth; +use Zend\ServiceManager\ServiceManager; + +/** + * Factory for authentication services. + * + * @category VuFind + * @package Authentication + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + * + * @codeCoverageIgnore + */ +class Factory +{ + /** + * Construct the ILS plugin. + * + * @param ServiceManager $sm Service manager. + * + * @return ILS + */ + public static function getILS(ServiceManager $sm) + { + return new ILS( + $sm->get('VuFind\ILS\Connection'), + $sm->get('VuFind\Auth\ILSAuthenticator') + ); + } +} diff --git a/module/finc/src/finc/Auth/ILS.php b/module/finc/src/finc/Auth/ILS.php new file mode 100644 index 0000000000000000000000000000000000000000..b76f6e95cbf2e0549ff6af32030ac49109cf4b00 --- /dev/null +++ b/module/finc/src/finc/Auth/ILS.php @@ -0,0 +1,136 @@ +<?php +/** + * ILS authentication module. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2010. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Authentication + * @author Franck Borel <franck.borel@gbv.de> + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development:plugins:authentication_handlers Wiki + */ +namespace finc\Auth; + +use VuFind\Exception\Auth as AuthException; +use VuFind\Exception\ILS as ILSException; + +/** + * ILS authentication module. + * + * @category VuFind + * @package Authentication + * @author Franck Borel <franck.borel@gbv.de> + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development:plugins:authentication_handlers Wiki + */ +class ILS extends \VuFind\Auth\ILS +{ + /** + * Update a user's password from the request. + * + * @param \Zend\Http\PhpEnvironment\Request $request Request object containing + * new account details. + * + * @throws AuthException + * @return \VuFind\Db\Row\User New user row. + */ + public function updatePassword($request) + { + // Ensure that all expected parameters are populated to avoid notices + // in the code below. + $params = []; + foreach (['oldpwd', 'password', 'password2'] as $param) { + $params[$param] = $request->getPost()->get($param, ''); + } + + // Connect to catalog: + if (!($patron = $this->authenticator->storedCatalogLogin())) { + throw new AuthException('authentication_error_technical'); + } + + // Validate Input + $this->validatePasswordUpdate($params); + + $result = $this->getCatalog()->changePassword( + [ + 'patron' => $patron, + 'oldPassword' => $params['oldpwd'], + 'newPassword' => $params['password'] + ] + ); + if (!$result['success']) { + throw new AuthException($result['status']); + } + + // Update the user and send it back to the caller: + $username = $patron[$this->getUsernameField()]; + $user = $this->getUserTable()->getByUsername($username); + $user->saveCredentials($patron['cat_username'], null); + return $user; + } + + /** + * Update the database using details from the ILS, then return the User object. + * + * @param array $info User details returned by ILS driver. + * + * @throws AuthException + * @return \VuFind\Db\Row\User Processed User object. + */ + protected function processILSUser($info) + { + // Figure out which field of the response to use as an identifier; fail + // if the expected field is missing or empty: + $usernameField = $this->getUsernameField(); + if (!isset($info[$usernameField]) || empty($info[$usernameField])) { + throw new AuthException('authentication_error_technical'); + } + + // Check to see if we already have an account for this user: + $userTable = $this->getUserTable(); + if (!empty($info['id'])) { + $user = $userTable->getByCatalogId($info['id']); + if (empty($user)) { + $user = $userTable->getByUsername($info[$usernameField]); + $user->saveCatalogId($info['id']); + } + } else { + $user = $userTable->getByUsername($info[$usernameField]); + } + + // No need to store the ILS password in VuFind's main password field: + $user->password = ''; + + // Update user information based on ILS data: + $fields = ['firstname', 'lastname', 'email', 'major', 'college']; + foreach ($fields as $field) { + $user->$field = $info[$field] ?? ' '; + } + + // Update the user in the database, then return it to the caller: + $user->saveCredentials( + $info['cat_username'] ?? ' ', + null + ); + + return $user; + } +} diff --git a/module/finc/src/finc/Auth/ILSAuthenticator.php b/module/finc/src/finc/Auth/ILSAuthenticator.php new file mode 100644 index 0000000000000000000000000000000000000000..ec46cc0e969143197fac749ad078256f865fa46b --- /dev/null +++ b/module/finc/src/finc/Auth/ILSAuthenticator.php @@ -0,0 +1,162 @@ +<?php +/** + * Class for managing ILS-specific authentication. + * + * PHP version 5 + * + * Copyright (C) Villanova University 2007. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @category VuFind + * @package Authentication + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org Main Page + */ +namespace finc\Auth; + +use VuFind\Auth\Manager as Manager; +use VuFind\ILS\Connection as ILSConnection; + +/** + * Class for managing ILS-specific authentication. + * + * @category VuFind + * @package Authentication + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org Main Page + */ +class ILSAuthenticator extends \VuFind\Auth\ILSAuthenticator +{ + /** + * Session containing PAIA login information + * + * @var Zend\Session\Container + */ + protected $session; + + /** + * SessionManager + * + * @var \VuFind\SessionManager + */ + protected $sessionManager; + + /** + * Constructor + * + * @param Manager $auth Auth manager + * @param ILSConnection $catalog ILS connection + * @param \Zend\Session\SessionManager $sessionManager Session manager + */ + public function __construct( + Manager $auth, + ILSConnection $catalog, + \Zend\Session\SessionManager $sessionManager + ) { + $this->auth = $auth; + $this->catalog = $catalog; + $this->sessionManager = $sessionManager; + } + + /** + * Get the session container (constructing it on demand if not already present) + * + * @return SessionContainer + */ + protected function getSession() + { + // SessionContainer not defined yet? Build it now: + if (null === $this->session) { + $this->session = new \Zend\Session\Container('PAIA', $this->sessionManager); + } + return $this->session; + } + + /** + * Log the current user into the catalog using stored credentials; if this + * fails, clear the user's stored credentials so they can enter new, corrected + * ones. + * + * Returns associative array of patron data on success, false on failure. + * + * @return array|bool + */ + public function storedCatalogLogin() + { + // Fail if no username is found, but allow a missing password (not every ILS + // requires a password to connect). + if (($user = $this->auth->isLoggedIn()) && !empty($user->cat_username)) { + // Do we have a previously cached ILS account? + if (isset($this->ilsAccount[$user->cat_username])) { + return $this->ilsAccount[$user->cat_username]; + } + + $session = $this->getSession(); + if (isset($session->cat_password)) { + $patron = $this->catalog->patronLogin( + $user->cat_username, + $session->cat_password + ); + } else { + $patron = $this->catalog->patronLogin( + $user->cat_username, + $user->getCatPassword() + ); + } + + if (empty($patron)) { + // Problem logging in -- clear user credentials so they can be + // prompted again; perhaps their password has changed in the + // system! + $user->clearCredentials(); + } else { + // cache for future use + $this->ilsAccount[$user->cat_username] = $patron; + return $patron; + } + } + + return false; + } + + /** + * Attempt to log in the user to the ILS, and save credentials if it works. + * + * @param string $username Catalog username + * @param string $password Catalog password + * + * Returns associative array of patron data on success, false on failure. + * + * @return array|bool + * @throws ILSException + */ + public function newCatalogLogin($username, $password) + { + $result = $this->catalog->patronLogin($username, $password); + if ($result) { + $user = $this->auth->isLoggedIn(); + if ($user) { + $user->saveCredentials($username, null); + $this->auth->updateSession($user); + // cache for future use + $this->ilsAccount[$username] = $result; + } + return $result; + } + return false; + } +} diff --git a/module/finc/src/finc/Auth/ILSAuthenticatorFactory.php b/module/finc/src/finc/Auth/ILSAuthenticatorFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..1ec9154aa8cb72006ef1a4f6ca3ae9deaa69dec1 --- /dev/null +++ b/module/finc/src/finc/Auth/ILSAuthenticatorFactory.php @@ -0,0 +1,87 @@ +<?php +/** + * ILS Authenticator factory. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Authentication + * @author Demian Katz <demian.katz@villanova.edu> + * @author Dorian Merz <merz@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace finc\Auth; + +use Interop\Container\ContainerInterface; +use Zend\ServiceManager\Factory\FactoryInterface; + +/** + * ILS Authenticator factory. + * + * @category VuFind + * @package Authentication + * @author Demian Katz <demian.katz@villanova.edu> + * @author Dorian Merz <merz@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +class ILSAuthenticatorFactory implements FactoryInterface +{ + /** + * Create an object + * + * @param ContainerInterface $container Service manager + * @param string $requestedName Service being created + * @param null|array $options Extra options (optional) + * + * @return object + * + * @throws ServiceNotFoundException if unable to resolve the service. + * @throws ServiceNotCreatedException if an exception is raised when + * creating a service. + * @throws ContainerException if any other error occurs + */ + public function __invoke( + ContainerInterface $container, + $requestedName, + array $options = null + ) { + if (!empty($options)) { + throw new \Exception('Unexpected options sent to factory.'); + } + // Construct the ILS authenticator as a lazy loading value holder so that + // the object is not instantiated until it is called. This helps break a + // potential circular dependency with the MultiBackend driver as well as + // saving on initialization costs in cases where the authenticator is not + // actually utilized. + $callback = function (& $wrapped, $proxy) use ($container, $requestedName) { + // Generate wrapped object: + $auth = $container->get('VuFind\Auth\Manager'); + $catalog = $container->get('VuFind\ILS\Connection'); + $sessionManager = $container->get('VuFind\SessionManager'); + $wrapped = new ILSAuthenticator($auth, $catalog, $sessionManager); + + // Indicate that initialization is complete to avoid reinitialization: + $proxy->setProxyInitializer(null); + }; + $cfg = $container->get('ProxyManager\Configuration'); + $factory = new \ProxyManager\Factory\LazyLoadingValueHolderFactory($cfg); + return $factory->createProxy($requestedName, $callback); + } +} diff --git a/module/finc/src/finc/Controller/DocumentDeliveryServiceController.php b/module/finc/src/finc/Controller/DocumentDeliveryServiceController.php index 23d91a76fd2b71f3d99fd9731d5a900dabd6f4cf..805fe9abc2ca4d28c2528512f11d40821057180a 100644 --- a/module/finc/src/finc/Controller/DocumentDeliveryServiceController.php +++ b/module/finc/src/finc/Controller/DocumentDeliveryServiceController.php @@ -28,15 +28,14 @@ */ namespace finc\Controller; -use VuFind\Exception\Mail as MailException; use finc\Exception\DDS as DDSException; use finc\Mailer\Mailer as Mailer; +use VuFind\Exception\Mail as MailException; use Zend\Form\Element\Select; use Zend\Form\Form; use Zend\Http\PhpEnvironment\Request; use Zend\Mail\Address as Address; use Zend\ServiceManager\ServiceLocatorInterface; -use Zend\Validator as Validator; /** * Controller for Document Delivery Service @@ -52,12 +51,10 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase { use \VuFind\Log\LoggerAwareTrait; - /** * VuFind configuration extended with Document Delivery Service configuration. * * @var $config - * @access protected */ protected $config = []; @@ -65,7 +62,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Departments * * @var $department - * @access protected */ protected $department = []; @@ -73,7 +69,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Divisions * * @var $division - * @access protected */ protected $division = []; @@ -81,7 +76,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * HTTP client * * @var \Zend\Http\Client - * @access protected */ protected $httpClient; @@ -113,7 +107,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase /** * @var $content - * @access protected */ protected $content = []; @@ -121,26 +114,22 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Build department taxonomy for options of select box. * * @return json $department - * @access protected */ protected function getDepartments() { return json_encode($this->department); } - /** * Build department taxonomy for options of select box. * * @return array $division - * @access protected */ protected function getDivisions() { return $this->division; } - /** * Display Feedback home form. * @@ -169,33 +158,32 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase return $view; } + if ($this->formWasSubmitted()) { + $content = $this->getContent(); + /* @var Form $form */ + $form = $this->serviceLocator->get('dds-form'); + $form->setData($content); + if ($form->isValid()) { + return $this->email($content); + } + $this->flashMessenger()->addMessage('DDS::dds_error_general_message', 'error'); + } + return $this->createDDSViewModel($this->getContent()); } /** - * Display Feedback home form. + * Send order mail if valid + * + * @param array $content form values * - * @return mixed - * @access public * @throws MailException * @throws DDSException + * + * @return mixed */ - public function emailAction() + public function email($content) { - $content = $this->getContent(); - - /** @var Form $form */ - /** @var Request $request */ - - //$request = $this->getRequest(); - $form = $this->serviceLocator->get('dds-form'); - if ($this->formWasSubmitted()) { - $form->setData($content); - if (!$form->isValid()) { - return $this->createDDSViewModel($content); - } - } - // Prepare Email Template $body = $this->buildEmailTemplates($content); @@ -212,7 +200,7 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase ? new Address( $content['email'], $content['name'] - ) : new Address($content['email']) ; + ) : new Address($content['email']); try { // Send Email @@ -238,10 +226,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase $this->flashMessenger()->addMessage($e->getMessage(), 'error'); return $this->createDDSViewModel($content); } - // Save to database - /*if (false === $this->sendOrderToApi($content)) { - throw new DDSException('Cannot send successful order to api.'); - }*/ return $this->redirect()->toRoute( 'dds-home' @@ -256,18 +240,14 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @return mixed True if authentication successful, null if * not successful, PEAR_Error on error. * @throws DDSException - * @access protected */ protected function authenticateDDSService($auth_path = '/authorize') { $method = 'POST'; - $auth_data['email'] = isset($this->config['DDS']['username']) - ? $this->config['DDS']['username'] : ''; - $auth_data['password'] = isset($this->config['DDS']['password']) - ? $this->config['DDS']['password'] : ''; + $auth_data['email'] = $this->config['DDS']['username'] ?? ''; + $auth_data['password'] = $this->config['DDS']['password'] ?? ''; - $api_url = isset($this->config['DDS']['url']) - ? $this->config['DDS']['url'] : ''; + $api_url = $this->config['DDS']['url'] ?? ''; $params = http_build_query($auth_data); @@ -316,13 +296,12 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param array $details Details to build template * * @return array [order|customer] Body texts for email - * @access protected */ protected function buildEmailTemplates($details) { // Get subito url $details['subito_url'] = $this->buildSubitoUrl($details); - // Get department name instead of identifier + // !!! Use department name instead of identifier !!! $details['department'] = ($details['division'] == '15') ? $details['inputdepartment'] : $this->getDepartmentName( $details['department'], @@ -354,7 +333,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * * @param array $fields List of parameters to build Subito url. * - * @access private * @return mixed Return Subito $url otherwise false. * @throws DDSException Exceptions for no sufficient delivered parameters. */ @@ -377,9 +355,7 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase // Get config $serviceconfig = ['broker_id', 'url']; - $auth_data['email'] = isset($this->config['DDS']['username']) - ? $this->config['DDS']['username'] : ''; - + $auth_data['email'] = $this->config['DDS']['username'] ?? ''; foreach ($serviceconfig as $var) { if (!isset($this->config['SubitoService'][$var]) || @@ -393,20 +369,21 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase } // user ci cp // Define obligated fields - // obligated at least one of ss or jt + /* obligated at least one of ss or jt if (empty($fields['issn']) && empty($fields['journal'])) { $this->flashMessenger()->addMessage( 'DDS::dds_issn_journal', 'error' ); - } + }*/ // all fields of vol, apy, pg if (empty($fields['number']) || empty($fields['publishdate']) || empty($fields['pages']) ) { + /* $this->flashMessenger()->addMessage( - 'DDS::dds_binding_statements', 'error' - ); + 'DDS::dds_binding_statements', 'info' + );*/ } // build subito url $subito_url = $url . "?BI=" . urlencode($broker_id); @@ -439,7 +416,7 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase $elem->setValue($value); } - $action = $this->url()->fromRoute('dds-email'); + $action = $this->url()->fromRoute('dds-home'); $form->setAttribute('action', $action); $form->prepare(); @@ -449,6 +426,14 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase $elemSdivision = $form->get('division'); $elemSdivision->setValueOptions($this->getDivisions()); $view->departments = $this->getDepartments(); + if ($division = $elemSdivision->getValue()) { + $elemSdepartment = $form->get('department'); + $options = json_decode($this->getDepartments(), true)[$division]; + foreach ($options as &$option) { + $option = html_entity_decode($option); + } + $elemSdepartment->setValueOptions($options); + } $view->loadForm = true; $view->setTemplate('documentdeliveryservice/home'); return $view; @@ -458,7 +443,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Create http client if it is not already exists. * * @return \Zend\Http\Client - * @access protected */ protected function createHttpClient() { @@ -469,7 +453,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Get comprehensive data and transfer it to an adaptable format for further * proceedings. * - * @access private * @return array $content * @throws DDSException Cannot load taxonomy of departments and divisions */ @@ -504,45 +487,45 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase (isset($post[$attribute]) && strlen($post[$attribute]) > 0) ? $post[$attribute] : ( - (isset($user['department_id']) && strlen($user['department_id']) > 0) + (isset($user['department_id']) && strlen($user['department_id']) > 0) ? $user['department_id'] : '' - ); + ); break; case 'division': $this->content[$attribute] = (isset($post[$attribute]) && strlen($post[$attribute]) > 0) ? $post[$attribute] : ( - (isset($user['division_id']) && strlen($user['division_id']) > 0) + (isset($user['division_id']) && strlen($user['division_id']) > 0) ? $user['division_id'] : '' - ); + ); break; case 'email': $this->content[$attribute] = (isset($user['email']) && strlen($user['email']) > 0) ? $user['email'] - : (isset($post[$attribute]) ? $post[$attribute] : ''); + : ($post[$attribute] ?? ''); break; case 'inputdepartment': $this->content[$attribute] = (isset($post[$attribute]) && strlen($post[$attribute]) > 0) ? $post[$attribute] : ( - (isset($user['department']) && strlen($user['department']) > 0) + (isset($user['department']) && strlen($user['department']) > 0) ? $user['department'] : '' - ); + ); break; case 'username': $this->content[$attribute] = (isset($user['username']) && strlen($user['username']) > 0) ? trim($user['username']) - : trim(isset($post[$attribute]) ? $post[$attribute] : ''); + : trim($post[$attribute] ?? ''); break; case 'userid': $this->content[$attribute] = (isset($user['libraryCard']) && strlen($user['libraryCard']) > 0) ? $user['libraryCard'] - : (isset($post[$attribute]) ? $post[$attribute] : ''); + : ($post[$attribute] ?? ''); break; default: if (!isset($this->content[$attribute])) { @@ -553,17 +536,9 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase break; } } - // clean up department_id if division == 15 - if (isset($this->content['division']) && $this->content['division'] == '15') { - $this->content['department'] = ''; - } else { - $this->content['inputdepartment'] = ''; - } return $this->content; } - - /** * Get config setting before checking if value exists at config file. * @@ -571,7 +546,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param string $var Variable of ini-file * * @return string - * @access protected * @throws DDSException No variable set at DDS.ini. */ protected function getConfigVar($identifier, $var) @@ -615,14 +589,12 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Get access token * * @return mixed If isset hashed token as string otherwise false. - * @access protected */ protected function getDDSToken() { return (isset($this->session->ddsToken)) ? $this->session->ddsToken : false; } - /** * Get all necessary user data for document delivery service * @@ -634,8 +606,8 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase $patron = $this->getILSAuthenticator()->storedCatalogLogin(); $ddsUserData['username'] = $patron['firstname'] . ' ' . $patron['lastname']; - $ddsUserData['phone'] = isset($patron['phone']) ? $patron['phone'] : ''; - $ddsUserData['email'] = isset($patron['email']) ? $patron['email'] : ''; + $ddsUserData['phone'] = $patron['phone'] ?? ''; + $ddsUserData['email'] = $patron['email'] ?? ''; $ddsUserData['libraryCard'] = $patron['cat_username']; return array_merge( @@ -649,7 +621,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * * @param string $user_id Identifier of user. * - * @access private * @return array $session */ private function getDDSUserDetail($user_id) @@ -668,7 +639,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param int $division Faculty / division id * * @return string Name of department - * @access protected */ protected function getDepartmentName($department, $division) { @@ -688,7 +658,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * Build department taxonomy for options of select box. * * @return boolean true - * @access protected */ protected function getDepartmentTaxonomy() { @@ -712,7 +681,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param int $division Division / faculty id * * @return array $details Details of departement - * @access protected */ protected function getDetailsOfDepartment($department, $division) { @@ -735,7 +703,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param string $field Form element name * @param string $index Field parameter to evaluate * - * @access protected * @return string $retval Return string for form field */ protected function getOpenUrlField($getvars, $field, $index) @@ -777,7 +744,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase /** * Get OpenUrl parameters * - * @access private * @return mixed False if no get vars exist, otherwise * array with vars for OpenUrl and not. * @@ -822,7 +788,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * * @param object $getvars GET variables. * - * @access private * @return mixed Return array with parameters by success, false by none. */ private function getOpenUrlParametersMapping($getvars) @@ -858,7 +823,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * * @param array $getvars GET variables. * - * @access private * @return string Return version number of openurl v1_0 or v0_1. By default * assume standard v0_1 */ @@ -890,7 +854,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param array $context Context of error response message * * @return boolean True if token expired. - * @access protected */ protected function isDDSTokenExpired($context) { @@ -953,14 +916,13 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase if (!$response->isSuccess()) { if ($response->getContent()) { // If token expired create new one. - if (true === $this->isDDSTokenExpired($response->getContent())) { + if (true === $this->isDDSTokenExpired($response->getBody())) { $this->authenticateDDSService(); $this->httpServiceRequest( $request_path, $request_type, $data ); - exit; } $responseArray = $this->parseJsonAsArray($response->getContent()); @@ -996,7 +958,7 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase if (isset($responseArray['error'])) { throw new DDSException( $responseArray['error'], - isset($responseArray['code']) ? $responseArray['code'] : 400 + $responseArray['code'] ?? 400 ); } return $responseArray; @@ -1008,14 +970,12 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param string $path Substitute of path for refresh token. * * @return mixed True if token refreshed. - * @access protected * @throws DDSException */ protected function refreshDDSToken($path = '/token') { $method = "GET"; - $api_url = isset($this->config['DDS']['url']) - ? $this->config['DDS']['url'] : ''; + $api_url = $this->config['DDS']['url'] ?? ''; $client = $this->createHttpClient(); try { @@ -1056,7 +1016,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * * @param array $content Content * - * @access private * @return boolean true * @throws DDSException */ @@ -1078,7 +1037,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param array $content Container of field variables * * @return array $content - * @access private * @deprecated */ private function setInputDepartmentToDepartment($content) @@ -1098,7 +1056,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param array $departmentdetails Details of department * * @return string - * @access private * @throws DDSException No or false variable is set. */ private function setRecipientEmail($departmentdetails) @@ -1108,8 +1065,9 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase if (isset($departmentdetails['branchEmail'])) { return $departmentdetails['branchEmail']; } - throw new DDSException('No email recipient address is set at '. - ' at database.'); + throw new DDSException( + 'No email recipient address is set at database.' + ); } if (isset($this->config['DDS']['to'])) { return $this->config['DDS']['to']; @@ -1127,7 +1085,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param array $departmentdetails Details of department. * * @return string - * @access private * @throws DDSException No or false variables set at DDS.ini. */ private function setSubjectEmail($departmentdetails) @@ -1154,7 +1111,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * * @param array $data data to insert * - * @access public * @return mixed $notice True if insert worked, error message if failed */ public function storeOrderOfItem($data) @@ -1184,7 +1140,6 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase * @param array $data Data to insert * * @return mixed $notice True if insert worked, error message if failed - * @access public */ public function storeUserDetail($data) { @@ -1206,13 +1161,10 @@ class DocumentDeliveryServiceController extends \VuFind\Controller\AbstractBase ); } - - /** * Check if config data should be defined in database or DDS.ini. * * @return boolean True if recipient data should taken from database. - * @access private */ private function useConfigFromDatabase() { diff --git a/module/finc/src/finc/ILS/Driver/FincLibero.php b/module/finc/src/finc/ILS/Driver/FincLibero.php index 5aa9a5825be8626c5223f09887b1cf7736ce4b3d..d64a33334fd2dd811ef8bf85b0093e7c1af824cf 100644 --- a/module/finc/src/finc/ILS/Driver/FincLibero.php +++ b/module/finc/src/finc/ILS/Driver/FincLibero.php @@ -193,6 +193,15 @@ class FincLibero extends FincILS implements TranslatorAwareInterface 'awlLimitations' ); + // get URIs of limitations that will be ignored by VuFind + $this->setMemberFromConfig( + 'ignoriedLimitations', + 'General', + 'ignoriedLimitations', + "No ignoriedLimitations defined.", + 'ignoriedLimitations' + ); + // get the URIs identifying records for stack views $this->setMemberFromConfig( 'stackURIs', diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php index fb499209ebb4c3333a6ea0eede93fa1f250363a0..5c5d72a314308e03a1965c734e377179387067cc 100644 --- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php +++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php @@ -643,9 +643,50 @@ trait SolrMarcFincTrait // modified due to #13670 // > Titel: 245$a $n $p $h $b $c $title = $subfield->getData(); - foreach (['n', 'p', 'h', 'b', 'c'] as $subkey) { - if ($subfield = $field->getSubfield($subkey)) { - $title .= ' ' . $subfield->getData(); + // if no punctuation set, set now: 245a: 245b (245n); 245p/ 245c + $setPuctuation = !$this->hasPunctuation(); + // #19467, #20357 for title without punctuation: change order and ignore 245h + $orderedFields = $setPuctuation ? ['b', 'n', 'p', 'c'] : ['n', 'p', 'h', 'b', 'c']; + foreach ($orderedFields as $subkey) { + if ($subfields = $field->getSubfields($subkey)) { + if ($setPuctuation && !empty($title)) { + if ($subkey == 'b') { + // leading colon for 245b + $title .= ':'; + } + + if ($subkey === 'p') { + // leading semicolon for 245p + $title .= ';'; + } + + if ($subkey === 'c') { + // leading slash for 245c + $title .= '/'; + } + } + + $title .= ' '; + + if ($subkey === 'n' && $setPuctuation) { + // leading bracket for 245n + $title .= '('; + } + + $title .= implode( + ', ', + array_map( + function ($subfield) { + return $subfield->getData(); + }, + $subfields + ) + ); + + if ($subkey === 'n' && $setPuctuation) { + // closing bracket and semicolon for 245n + $title .= ')'; + } } } } diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1070158569_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1070158569_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..957d768b8b08be9876a6a4c1e32b7c489f7e8446 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1070158569_fullrecord.txt @@ -0,0 +1 @@ +03652cam a2201117 c45000010013000000030007000130050017000200070003000370080041000400350023000810350022001040350025001260350021001510400031001720410008002030840012002110840041002231000097002642450078003612640027004393000014004663360026004803370046005063380025005524900068005775910068006457510074007137730048007878300142008359350009009779360296009869510007012829830019012899690006013088520044013149830018013589840006013768520044013829840013014269840015014399000028014549000016014829000010014989000028015089000010015369000031015469000028015779000028016059000025016339000019016589000016016779000028016939000028017219000028017499000027017779000012018049000011018169000013018279000011018409000021018519000022018729000013018949000030019079000025019379000026019629000010019889000013019989000010020119000014020219000019020359000017020549000021020719000013020929000019021059000025021249000025021499000025021749000025021999000011022249000015022359000013022509000015022639000010022789000027022889000023023159000023023389000028023619000028023899000011024179000020024289000012024489000012024609000014024729510007024869800041024930-1070158569DE-62720140604111040.0tu850101s1897 xx ||||| 00| ||lat c a(DE-627)1070158569 a(DE-576)000158569 a(DE-599)BSZ000158569 a(OCoLC)309931629 aDE-627bgercDE-627erakwb alat a12ssgn aNH 42452rvk0(DE-625)rvk/125639:2381 aPlinius Secundus, Gaiusd23-790(DE-588)1185950830(DE-627)1337540140(DE-576)1625750764aut10aC. Plini Secundi Naturalis Historiae libri XXXVIIn5pLibri XXXI - XXXVII 1aLipsiaebTeubnerc1897 aX, 512 S. aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier1 aBibliotheca scriptorvm Graecorvm et Romanorvm Tevbnerianav1654 a5090: DDSU/sred ; IMD-Felder und 1131 maschinell ergänzt (SWB) aLeipzig0(DE-588)4035206-70(DE-627)1047989980(DE-576)2090112464pup18w(DE-627)1070158518w(DE-576)000158518g5q5 0aBibliotheca scriptorum Graecorum et Romanorum Teubnerianav165491654w(DE-627)601129466w(DE-576)308216407w(DE-600)2498325-1x1864-399X amteorvaNH 4245bGesamtausgabenkGeschichtekGriechisch-römische GeschichtekGriechische und lateinische Schriftsteller (Inschriften bei ND 4200 ff)kLateinische SchriftstellerkSchriftsteller PkPlinius Secundus, GaiuskGesamtausgaben0(DE-627)12714553660(DE-625)rvk/125639:2380(DE-576)201455366 aMV a(DE-15)3300909 cB aDE-15z2014-04-03T10:00:26Zx2019-10-02 a(DE-14)323681 cB aDE-14z2009-02-06T20:01:10Zx2015-10-21 zLSTO: 02 s94 8 56577 aPlinius Secundus, Gaius ader Ältere aMaior aPlinius Secundus, Caius aMajor aPlinius Secundus Maior, C. aPlinius Secundus, Gajus aPlinius Secundus, Cajus aPlinius Secundus, C. aPlinius, Caius aPlinius, C. aPlinius, Caius Secundus aPlynius Secundus, Gaius aPlynius Secundus, Caius aPlynius Secundus Gaius aPlinius ad. Ä. astarÅ¡Ã aSenior aPlinius Secundus aPlinius Secundius aSenioris aRerum Naturalium Scriptor aFlorentino-Pragensis aFlorentinus-Pragensis aPline al'Ancien aPliny athe Elder ale Naturaliste aPline, Caius aPline Second, C. alÃncien aPline l'Ancien aPlinio, Gaio Secondo aPlinio Secundo, Caio aPlinio Secondo, Gaio aPlinio Segundo, Cayo aPlinio ail Vecchio ael Viejo aNapoletano aGaius aCaius Plinius Secundus aSecundus, Gaius P. aSecundus, Caius P. aSecundus, Gaius Plinius aSecundus, Caius Plinius aPlinij aPlinije Stariji aPlinije aStariji aThe elder bXT a1070158569b0k1070158569o000158569 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1070158569_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1070158569_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..decf887d57072f6b6b9bdc1bf0e0ffd610ba5a3a --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1070158569_result.txt @@ -0,0 +1 @@ +C. Plini Secundi Naturalis Historiae libri XXXVII (5); Libri XXXI - XXXVII \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1072033011_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1072033011_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..5e8565cf17be8b961ef18bb07277ff5386ab84f2 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1072033011_fullrecord.txt @@ -0,0 +1 @@ +01723cam a2200445 c45000010013000000030007000130050017000200070003000370080041000400350023000810350022001040350025001260350021001510400031001720410008002031000093002112450103003042460014004072640041004213000037004623360026004993370046005253380025005714900101005965910050006977730048007478100225007959510007010209830020010279840006010478520044010539830019010979690006011168520044011228520034011669000016012009510010012169510010012269800041012360-1072033011DE-62720140604111806.0tu850101s1966 xx ||||| 00| ||ger c a(DE-627)1072033011 a(DE-576)002033011 a(DE-599)BSZ002033011 a(OCoLC)310647965 aDE-627bgercDE-627erakwb ager1 aPreidel, Helmutd1900-19800(DE-588)13629846X0(DE-627)5784835210(DE-576)1626093454aut10aSlawische Altertumskunde des östlichen Mitteleuropas im 9. und 10. Jahrhundertn3cHelmut Preidel30aslavische 1aGräfelfing bei MünchenbGansc1966 a196 S.bIll., graph. Darst., Kt. aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier1 aVeröffentlichungen der Wissenschaftlichen Abteilung / Adalbert-Stifter-Verein e.V. Münchenv13 aIMD-Felder und 1131 maschinell ergänzt (SWB)18w(DE-627)1072032988w(DE-576)002032988g3q32 aAdalbert-Stifter-VereinbWissenschaftliche AbteilungtVeröffentlichungen der Wissenschaftlichen Abteilung des Adalbert-Stifter-Vereins, Münchenv13913w(DE-627)130107972w(DE-576)001045415w(DE-600)503408-5x0567-9044 aMV a(DE-14)14701762 cB aDE-14z2010-08-25T13:36:05Zx2015-10-21 a(DE-15)2764485 cB aDE-15z2011-11-04T09:01:58Zx2018-11-06 aDE-L327z2015-10-06T11:43:57Z aPreidel, H. bXA-DE bXA-CZ a1072033011b0k1072033011o002033011 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1072033011_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1072033011_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..2a46cde888c4be9fc8c950b4aeb171ae1c9ce91e --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1072033011_result.txt @@ -0,0 +1 @@ +Slawische Altertumskunde des östlichen Mitteleuropas im 9. und 10. Jahrhundert (3)/ Helmut Preidel \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1144749735_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1144749735_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..c5b9e4207f7e72cb20bf6c5d86e091f8393ef74c --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1144749735_fullrecord.txt @@ -0,0 +1 @@ +02348cam a2200601 45000010013000000030007000130050017000200070003000370080041000400350023000810350022001040350025001260350020001510400031001710410008002020840037002101000105002472450066003522500019004182640033004373000010004703360026004803370046005063380025005524900025005775830054006025830097006567000097007538500007008508500007008579360384008649510007012489830019012559690006012748520044012809000033013249000033013579000033013909000028014239000018014519000008014699000009014779000032014869000032015189000008015509000025015589000023015839000025016069000032016319000032016639510010016959800041017050-1144749735DE-62720211026144345.0tu990310s1954 xx ||||| 00| ||ger c a(DE-627)1144749735 a(DE-576)074749730 a(DE-599)BSZ074749730 a(OCoLC)73411127 aDE-627bgercDE-627erakwb ager aGK 40352rvk0(DE-625)rvk/41002:1 aGoethe, Katharina Elisabethd1731-18080(DE-588)1185402460(DE-627)1370657440(DE-576)1611428184aut10aBriefe der Frau Rat Goethecausgew. und hrsg. von Rudolf Bach a61. - 67. Tsd. 1aWiesbadenbInsel-Verl.c1954 a90 S. aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier0 aInsel-Büchereiv5441 aArchivierung prüfenc20200919fDE-640z12pdager1 aArchivierung/Langzeitarchivierung gewährleistetc20211026fSLGzBuchnachlass2pdager5DE-251 aBach, Rudolfd1901-1957eHrsg.0(DE-588)1160252710(DE-627)0775576380(DE-576)2861622454edt aeb aaarvaGK 4035bGoethes Familie (Texte und Sekundärliteratur)kGermanistik. Niederlandistik. SkandinavistikkDeutsche LiteraturkRomantikkLiteraturgeschichtekEinzelne Autoren der GoethezeitkAutoren GkGoethe, Johann Wolfgang vonkSekundärliteraturkLeben und PersönlichkeitkGoethes Familie (Texte und Sekundärliteratur)0(DE-627)12706988850(DE-625)rvk/41002:0(DE-576)200698885 aBO a(DE-15)3330141 cB aDE-15z2014-08-01T17:16:54Zx2019-11-26 aTextor, Catharina Elisabetha aGoethe, Katharina Elisabetha aGoethe, Catharina Elisabetha aGoethe, Catharina Elis. aGoethe, C. E. aAja aFrau aTextor, Katharina Elisabeth aTextor, Catharina Elisabeth aRat aGoethe, Katharina E. aGoethe, Elisabetha aGoethe, Catharina E. aGoethe, Catharina Elisabeth aGoethe, Katharina Elisabeth bXA-DE a1144749735b0k1144749735o074749730 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1144749735_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1144749735_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..7135d003de281ee8acef3f37df7b14e773923d2a --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1144749735_result.txt @@ -0,0 +1 @@ +Briefe der Frau Rat Goethe/ ausgew. und hrsg. von Rudolf Bach \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1172722633_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1172722633_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..32e8079b93b1afef51555261641bf7c684575c25 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1172722633_fullrecord.txt @@ -0,0 +1 @@ +10560cam a22032412 c45000010013000000030007000130050017000200070003000370080041000400350023000810350022001040350025001260350021001510400031001720410008002030840038002111000105002492450092003542640033004463000024004793360026005033370046005293380025005755910086006006550087006866890118007736890082008916890093009736890079010666890013011456890081011586890013012397000090012527730048013429360183013909510007015739830019015809690006015998520044016059830019016499840006016688520044016748520034017189790118017529790119018709790041019899000031020309000030020619000025020919000024021169000016021409000012021569000028021689000031021969000028022279000025022559000027022809000024023079000021023319000018023529000025023709000030023959000030024259000026024559000020024819000031025019000028025329000028025609000023025889000018026119000022026299000021026519000019026729000022026919000021027139000021027349000018027559000011027739000032027849000013028169000032028299000030028619000025028919000024029169000022029409000027029629000011029899000021030009000010030219000025030319000028030569000011030849000011030959000014031069000027031209000025031479000017031729000010031899000016031999000009032159000016032249000013032409000012032539000011032659000030032769000028033069000028033349000031033629000026033939000031034199000035034509000027034859000016035129000016035289000020035449000016035649000025035809000028036059000027036339000016036609000016036769000025036929000033037179000027037509000026037779000028038039000016038319000018038479000021038659000013038869000025038999000009039249000010039339000013039439000014039569000026039709000009039969000010040059000032040159000033040479000034040809000037041149000010041519000011041619000012041729000012041849000012041969000027042089000017042359000028042529000017042809000034042979000035043319000038043669000035044049000031044399000030044709000027045009000027045279000044045549000037045989000041046359000028046769000030047049000011047349000035047459000011047809000024047919000014048159000026048299000027048559000016048829000013048989000027049119000027049389000031049659000027049969000035050239000031050589000029050899000025051189000026051439000031051699000026052009000022052269000022052489000025052709000021052959000025053169000028053419000015053699000019053849000033054039000039054369000011054759000021054869000017055079000044055249000011055689000041055799000041056209000061056619000043057229000072057659000042058379000033058799000035059129000047059479500031059949500030060259500025060559500024060809500016061049500012061209500010061329500013061429500016061559500018061719500014061899500021062039500009062249500017062339500016062509500017062669500035062839500019063189500023063379500014063609500023063749500018063979500011064159500011064269500011064379500011064489500027064599500032064869500013065189500019065319500024065509500020065749500054065949500013066489500043066619500020067049500021067249500034067459500047067799500056068269500020068829500042069029500021069449500012069659500018069779500017069959500011070129500013070239500011070369500011070479500019070589500017070779500015070949500015071099500020071249500014071449500020071589500020071789500014071989500020072129500025072329510010072579510010072679800041072770-1172722633DE-62720140604142934.0tu030114s2002 xx ||||| 00| ||ger c a(DE-627)1172722633 a(DE-576)102722633 a(DE-599)BSZ102722633 a(OCoLC)314185903 aDE-627bgercDE-627erakwb ager aLI 842502rvk0(DE-625)rvk/97143:1 aGoethe, Johann Wolfgang vond1749-18320(DE-588)1185402380(DE-627)1334167200(DE-576)1611428424aut10aFaustn2pDer Tragödie zweiter Teil / mit Ill. von Max SlevogtcJohann Wolfgang Goethe 1aLeipzigbFaber & Faberc2002 a337 S.bzahlr. Ill. aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier a580,720 ddsu/shk; 5551: S1LB/sred ; IMD-Felder und 1131 maschinell ergänzt (SWB) 7aPressendruck0(DE-588)4159043-00(DE-627)1054884020(DE-576)2098470852gnd-content00Du0(DE-588)4099198-20(DE-627)10466522X0(DE-576)209350024aGoethe, Johann Wolfgang vond1749-1832tFaustn22gnd01Ds0(DE-588)4123412-10(DE-627)1045164880(DE-576)209559519aIllustration2gnd02Dp0(DE-588)1186149400(DE-627)1334383170(DE-576)163100527aSlevogt, Maxd1868-19322gnd03Ds0(DE-588)4127900-10(DE-627)1047250440(DE-576)209597518aZeichnung2gnd0 5(DE-627)10Ds0(DE-588)4036042-80(DE-627)1044008380(DE-576)209016124aLithografie2gnd1 5(DE-627)1 aSlevogt, Maxd1868-19320(DE-588)1186149400(DE-627)1334383170(DE-576)1631005274oth18w(DE-627)1172720975w(DE-576)102720975g2q2rvaLI 84250bSlevogt, MaxkKunstgeschichtekKünstler-MonografienkAlphabetische KünstlerlistekKünstler SkSlevogt, Max0(DE-627)12708836660(DE-625)rvk/97143:0(DE-576)200883666 aMV a(DE-15)1293003 cB aDE-15z2004-08-03T00:00:00Zx2018-05-25 a(DE-14)3529931 cB aDE-14z2003-05-27T00:00:00Zx2015-10-21 aDE-L242z2019-10-15T11:01:37Z f4.5.6.4.1.9Kunst9Buchgestaltung9Illustration9Anwendungsgebiete der Illustration9belletristische Illustration f4.5.6.3.1.9Kunst9Buchgestaltung9Illustration9Techniken der Illustration9Techniken der Illustration: Zeichnung f5.5.9Literatur9Literatur: Dramatik aSlevogt, Franz Theodor Max aSlevogt, Franz Theodor M. aSlevogt, Franz T. M. aSlevogt, Franz T.M. aSlevogt, M. aSlevogt aGoethe, Johann Wolfgang aGoethe, Johan Wolfgang von aGoethe, Johan Wolphgang aGoethe, Johan W. von aGoethe, Joh. Wolfg. v. aGoethe, J. Wolfgang aGoethe, J. W. v. aGoethe, J. W. aGoethe, Jan Wolfgang aGoethe, Jean Wolfgang von aGoethe, Juan Wolfgang von aGoethe, Juan Wolfgang aGoethe, Juan W. aGoethe, João Wolfgang von aGoethe, Iohann Wolfgang aGoethe, Iohan Wolphgang aGoethe, Ioannes W. aGoethe, I. W. aGoethe, Wolfgango aGoethe, Wolfango aGoethe, W. von aGoethe, Volfgango aGoethe, Volfango aGoethe, Giov. L. aGoethe, G. L. aGoethe aVon Goethe, Johann Wolfgang aGoethius aGöthe, Johann Wolfgang von aGöthe, Johann W. êvonë aGöthe, Jan Wolfgang aGöthe, Jan Wolfang aGöthe, J. W. von aGöthe, Giov. Volfango aGöthe aGöte, Iogann V. aGöte aGoete, Iohan V. p'on aGoet'e, Iohan Volp'gang aGoet'e aGoe te aGêôt'ê aG'ote, Jochan Volfgang aGete, Yohan Volfgang aG'ote, V. f. aG'ote aGót, J. V. aGót aGo't, I. V. aGoithios aGotenin aGejteh aGete, JÅhan Wolfgang fon aGete, Johann Volʹfgang aGéte, Johans Volfgangs aGÄ—tÄ—, Johanas Volfgangas aGete, Jochan Volfgang aGete, Jogann Vol'fgang fon aGete, Jogann Vol'fgang êfonë aGete, Jogann-Vol'fgang aGete, J. V. aGete, J.-V. aGete, Iogann W. aGete, I. W. aGete, Iohan Volfgang aGëte, Iogann Vol'fgang aGëte, Johann Volfgang aGete, I. V. aGete, I.-V. aGete, Yohan Wolfgang aGete, Yôhân Wôlfgang fôn aGête, Yôhan Wolfgang aGete, Yohann Volfqanq aGete, Yogann Volʹfgang aGete, Y. W. aGêtê, Y. W. aGete, Volʹfgang aGete, V. aGete, Egan Vol'fgang aGete aGÄ“te aGÄ›'á¹e aGette, G. aGede, Yuehan Wofugang aGede aGe de aGeteh, Yohan á¹¾olfgang fon aGÅ«ta, YÅ«hÄn WulfgÄng fun aGÅ«ta, YÅ«hÄn WulfgÄng fÅ«n aǦūta, YÅ«hÄn WulfǧÄnǧ fÅ«n aGÅ«ta aǦīta aǦītÄ aǦītah aǦītih aGiote, Johan Wolphgang aGiote, J. W. aGÇote, Jochan Volfgang aGiote, J. V. aÄ Å«ta, YÅ«hÄn FÅ«lfÄ¡Änḡ aÄ Å«tah, YÅ«hÄn FÅ«lfÄ¡Änḡ aÄ Å«tih, YÅ«hÄn VÅ«lfÄ¡anÄ¡ fÅ«n aÄ Å«tih, YÅ«hÄn FÅ«lfÄ¡Änḡ aGoytä, Yohan Welfgang fon aGyote, JohÄn BholphgÃ£Ä aGyot'e, Yohan Wolfgang aGyot'e, Yohan Volfgang aGÅšutih, YÅšuhÅšan VÅšulf·gan·g fÅšun aGkaite, Giochan Bolphnkannk phon aGkaite, Giochan Bolphnkannk êphonë aGkaite, Giochan B. phon aGkaite, IÅann Mpolphgang aGkaite aKoet'e, Yohan Polp'Ågang p'on aKoet'e aKêôt'ê, Volfkank aKÄ“ÅthÄ“ aKote, Johann Volfgang aKote, Jochann Volfgang aKote, J. V. aKote, V. aHete, Johann-Vol'fhanh aHëte, Ëhan Vol'fhanh aHëte, Ëhan Vol'fhanh aHöte, Iohann Volfqanq aYo han Bol peu gang pon Goe te aYohan-Bolpeugang-pon-Goete aYue han Wo fu gang Ge de aYuehan-Wofugang-Gede aGyote, Yohan Wolfgang aGoethe, Johann Wolfgang v. aGoethe, Johann W. von aGoethe, Johann W. aGoethe, J. W. von aGoethe, Wolfgang von aGoethe, Wolfgang aGete, Johan Volfgang aGete, Iogann Volʹfgang aGete, J.V. aGoithios, I.V. aGÄ“te, Yohan Vorufugangu Fon aÄ Å«tih, YÅ«hÄn FÅ«lfÄ¡ÄnÄ¡ fÅ«n aGoythe aGoethe, J.W. von aGoethe, J.W. aГёте, Йоҳанн Волфганг aæŒå¾· a約翰・沃爾夫岡・馮・æŒå¾· a约翰・沃尔夫冈・冯・æŒå¾· aゲーテ, ヨãƒãƒ³ãƒ»ãƒ´ã‚©ãƒ«ãƒ•ã‚¬ãƒ³ã‚°ãƒ»ãƒ•ã‚©ãƒ³ aגתה, יוהן ×•×•×œ×¤×’× ×’ פון aგáƒáƒ”თე, იáƒáƒ°áƒáƒœ ვáƒáƒšáƒ¤áƒ’áƒáƒœáƒ’ ფáƒáƒœ aگيوتÛ, يوھان Û‹ÙˆÙ„Ú§Ú¯Ø§Ú aê´´í…Œ, 요한 볼프강 í° aæŒå¾·, 约翰·沃尔夫冈· aگوته, یوهان ولÙگانگ Ùون aSlevogt, Franz Theodor Max aSlevogt, Franz Theodor M. aSlevogt, Franz T. M. aSlevogt, Franz T.M. aSlevogt, M. aSlevogt aMaler aRadierer aIllustrator aImpressionist aAbbildung aBuchillustration aBuch aIllustration aBebilderung aBildmaterial aWissenschaftliche Illustration aIllustrationen aBuchillustrationen aBuchkunst aIllustriertes Buch aKünstlerbuch aæ’图 aæ’ç”» aæ’圖 aæ’ç•« aИллюÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ aGoethe, Johann Wolfgang von aFaust II aFaust. 2. Teil aFaust. Zweiter Teil aFaust : Teil II aFaust : der Tragödie zweiter Teil in fünf Akten aPÌ•austi aFaust : The Second Part of the Tragedy aLe second Faust aIl secondo Faust aFaust : Druhý dÃl tragédie aFaust : tragedii część pierwsza i druga aFaust : partea întîi si partea a doua a tragediei aFaust drugi deo aFaust : tragedianın ikinci bölümü aPhaust : meros 2 aKlassik aHandzeichnung aZeichenkunst aGrafik aZeichnen a图画 a圖畫 aРиÑунок aLithographie aSteindruck aFlachdruck a石版å°åˆ·æœ¯ a石å°æœ¯ a平版å°åˆ·æœ¯ a石版å°åˆ·è¡“ a石å°è¡“ a平版å°åˆ·è¡“ aÐ›Ð¸Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ aXA-DE bXA-DE a1172722633b0k1172722633o102722633 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1172722633_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1172722633_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..5e240339cd742a6e8b69ddde9ae836eaa9ff11d1 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-1172722633_result.txt @@ -0,0 +1 @@ +Faust (2); Der Tragödie zweiter Teil / mit Ill. von Max Slevogt/ Johann Wolfgang Goethe \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130143812_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130143812_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..0ba5f4540c5ed3ba138ea0a51b3b0a522d2540c2 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130143812_fullrecord.txt @@ -0,0 +1 @@ +02625cas a2200721 45000010012000000030007000120050017000190070003000360080041000390160022000800160021001020220014001230350022001370350022001590350024001810350021002050350021002260400031002470410008002780440012002860820016002980840013003140840015003272450197003422460016005392640037005553360026005923370046006183380025006643620058006893630015007473630015007625010058007775910059008356550086008946890083009806890013010637700109010767850120011859350009013059360065013149510007013799830018013869690007014048520044014119830018014559840007014738520044014809830018015249840007015428520044015498520034015939840013016279840036016409840015016769840058016919500020017499500019017699500017017889500017018059500042018229800039018640-130143812DE-62720190608210910.0tu931116d18951897xx m| p| |0 |0ger c7 a0127056912DE-1017 a513447-X2DE-600 a0176-1390 a(DE-627)130143812 a(DE-576)015683788 a(DE-599)ZDB513447-X a(OCoLC)183368343 a(OCoLC)183368343 aDE-627bgercDE-627erakwb ager cXA-DXDE04a370qDE-600 a242ssgn a81.012bkl10aAcademische RevuebZeitschrift für das internationale Hochschulwesencin Verbindung mit den Hochschulnachrichten hrsg. von der Centralstelle für das Internationale Hochschulwesen in München30aakademische31aMünchenbAkad.-Verl.c1895-1897 aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier0 a1.1894/95(1895),Okt. - 3.1896/97(1897),Okt. = H. 1-3600a1i1894/9510i1896/97a3 aDarin: Amtl. Bekanntmachungen, Verlags-Ankündigungen aSortierzählung bei Bänden maschinell geändert (GBV) 7aZeitschrift0(DE-588)4067488-50(DE-627)10454466X0(DE-576)20917000X2gnd-content00Ds0(DE-588)4006681-20(DE-627)10637673X0(DE-576)208866574aBildungswesen2gnd0 5(DE-627)08iBeil.tDer StudentdMünchen : Acad.-Verl., 1896w(DE-627)129912921w(DE-600)340621-0w(DE-576)01530845600iAufgeg. intHochschulnachrichtendMünchen, 1890w(DE-627)130143855w(DE-600)513455-9w(DE-576)015683834x0176-1404 aSAXBbka81.01jGeschichte des BildungswesensqARK0(DE-627)106414518 aJT a(DE-15)636667 cZS aDE-15z2003-11-12T00:00:00Zx2015-10-16 a(DE-14)946026 cZS aDE-14z2019-07-31T12:33:28Zx2018-11-05 a(DE-14)946026 cZS aDE-14z2019-07-31T12:33:28Zx2018-11-05 aDE-2620z2019-01-14T00:00:00Z s35.4.964 v1.1894/95,Okt. - 3.1896/97,Okt. s19 4 15519 v1.1894/95(1895),Okt. - 3.1896/97(1897),Okt. = H. 1-36 aErziehungswesen aBildungssystem a教育系统 a教育系統 aСиÑтема Ð¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ a130143812b0k130143812o015683788 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130143812_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130143812_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..1e8ccd8ab61899c40d362af226c2288d992265e6 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130143812_result.txt @@ -0,0 +1 @@ +Academische Revue: Zeitschrift für das internationale Hochschulwesen/ in Verbindung mit den Hochschulnachrichten hrsg. von der Centralstelle für das Internationale Hochschulwesen in München \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130271578_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130271578_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..734f93220525093e89f7a1ad88428a10d70be709 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130271578_fullrecord.txt @@ -0,0 +1 @@ +02025cas a2200541 45000010012000000030007000120050017000190070003000360080041000390160022000800160021001020350022001230350022001450350024001670350021001910350021002120400031002330410008002640440010002720820016002820820016002981100169003142450131004832460122006142640024007363360026007603370046007863380025008323620013008573630012008705910019008826550094009019510007009959830020010029840007010228520044010299830019010739690007010928520044010999100047011439100009011909100022011999100047012219100077012689100047013459100052013929800039014440-130271578DE-62720190706095836.0tu931116c19779999xx z| m| |0 |0ger c7 a0131500062DE-1017 a563681-42DE-600 a(DE-627)130271578 a(DE-576)037122983 a(DE-599)ZDB563681-4 a(OCoLC)612527932 a(OCoLC)311920205 aDE-627bgercDE-627erakwb ager cXA-DE04a050qDE-10104a890qDE-6002 aRheinische Friedrich-Wilhelms-Universität BonnbSeminar für Orientalische KunstgeschichteeVerfasser0(DE-588)2043059-00(DE-627)1027992100(DE-576)1919264344aut10aVeröffentlichungen des Seminars für Orientalische Kunstgeschichte an der Universität BonnnReihe BpAntiquitates orientales1 iAnsetzungssachtitelaVeröffentlichungen des Seminars für Orientalische Kunstgeschichte an der Universität Bonn / B31aBonnbHabeltc1977- aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier0 a1.1977 -00a1i1977 aC*180687 (GBV) 7aMonografische Reihe0(DE-588)4179998-70(DE-627)1046286690(DE-576)2099951062gnd-content aST a(DE-14)13837808 cMB aDE-14z2006-03-20T09:30:29Zx2019-08-16 a(DE-15)3194642 cSE aDE-15z2013-01-29T10:59:26Zx2019-08-19 aSeminar für Orientalische Kunstgeschichte aBonn aUniversität Bonn aSeminar für orientalische Kunstgeschichte aRheinische Friedrich-Wilhelms-Seminar für orientalische Kunstgeschichte aRheinische Friedrich-Wilhelms-Universität aRheinische Friedrich-Wilhelms-Universität Bonn a130271578b0k130271578o037122983 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130271578_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130271578_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..5b89dd48cb593267e686658b00fbbad01e296012 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-130271578_result.txt @@ -0,0 +1 @@ +Veröffentlichungen des Seminars für Orientalische Kunstgeschichte an der Universität Bonn (Reihe B); Antiquitates orientales \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-229443699_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-229443699_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..a5495740f0e93bafcfac5a6bd7c97a51b63fc2a0 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-229443699_fullrecord.txt @@ -0,0 +1 @@ +01461cam a2200385 c45000010012000000030007000120050017000190070003000360080041000390350022000800350023001020350025001250350021001500400031001710410008002020440010002101000097002202450187003172640041005043000025005453360026005703370046005963380025006427100124006677730057007919510007008489830019008559690006008748520044008809000027009249100037009519100037009889510010010259800040010350-229443699DE-62720190826095828.0tu970613s1882 xx ||||| 00| ||ger c a(DE-627)229443699 a(DE-576)9229443697 a(DE-599)GBV229443699 a(OCoLC)258481121 aDE-627bgercDE-627erakwb ager cXA-AT1 aEngerth, Eduard vond1818-18970(DE-588)1191987970(DE-627)1454106840(DE-576)21160061X4aut10aKunsthistorische Sammlungen des allerhöchsten KaiserhausesbGemälde; beschreibendes VerzeichnisnBd. 1pItalienische, Spanische und Französische Schulencvon Eduard R. von Engerth 1aWienbSelbstverl. d. Directionc1882 aLXXXIX, 480 S.bIll. aTextbtxt2rdacontent aohne Hilfsmittel zu benutzenbn2rdamedia aBandbnc2rdacarrier2 aKunsthistorische Sammlungen des Allerhöchsten Kaiserhauses0(DE-588)43012-20(DE-627)1009871840(DE-576)1903870844oth18w(DE-627)146328043w(DE-576)9146328041gBd. 1q1.1882 aMV a(DE-15)3737738 cB aDE-15z2019-08-26T09:42:53Zx2019-08-27 aEngerth, Eduard R. von aKunsthistorische Sammlungen Wien aKunsthistorisches Hofmuseum Wien bXA-AT a229443699b0k229443699o9229443697 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-229443699_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-229443699_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..bb1b6ed4085140d3fc61defe0ddefb30f8bf8da1 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-229443699_result.txt @@ -0,0 +1 @@ +Kunsthistorische Sammlungen des allerhöchsten Kaiserhauses: Gemälde; beschreibendes Verzeichnis (Bd. 1); Italienische, Spanische und Französische Schulen/ von Eduard R. von Engerth \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-647227738_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-647227738_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..0789178a6d5ae9317b795e36300422f079d3b3fe --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-647227738_fullrecord.txt @@ -0,0 +1 @@ +03475cam a2200829 c45000010012000000030007000120050017000190070015000360080041000510350022000920350023001140350025001370350021001620400031001830410008002140440012002220840012002340840015002460840015002612450420002762640034006963000015007303360040007453370032007853380037008175330114008545350031009686890088009996890086010876890085011736890078012586890075013366890013014117000079014247730073015037760130015768560097017069360080018039360054018839510007019378560073019448520031020179700007020489710010020559720010020659730007020759350009020828520018020918520017021098520016021268520017021428520016021599500023021759500032021989500040022309500054022709500011023249500011023359500015023469500025023619500025023869500024024119500023024359500026024589500035024849500022025199500024025419500012025659510012025779510010025899800046025990-647227738DE-62720190310045822.0cr uuu---uuuuu110223s1882 xx |||||o 00| ||ger c a(DE-627)647227738 a(DE-576)9647227736 a(DE-599)GBV647227738 a(OCoLC)837931834 aDE-627bgercDE-627erakwb ager cXA-DXDE a22ssgn a86.102bkl a86.132bkl14aDie Verwaltung bei den Justizbehörden in PreußenbHandbuch zum praktischen Gebrauch in zwei AbtheilungennAbtheilung 2pBestimmungen über die Verwaltung im allgemeinen insbesondere über die persönichen Verhältnisse der Beamten nach den Gesetzen, Verordnungen, Erlassen, Ministerial-Verfügungen etc. mit Berücksichtigung der Verwaltungsgrundsätze, systematisch bearbeitet und erläutertnBd. 2cvon Hertting 1aBerlinbHeymanns Verlagc1882 aXI, 588 S. anicht spezifiziertbzzz2rdacontent aComputermedienbc2rdamedia aOnline-Ressourcebcr2rdacarrier aOnline-Ausg.d20117|2011||||||||||eOnline-Ressource (Text)fDeutsches Territorialrecht des 19. Jahrhunderts1 aSBB-PK Berlin3Gs 6905-2,200Ds0(DE-588)4117364-80(DE-627)1057998740(DE-576)209509309aVerwaltungshandeln2gnd01Ds0(DE-588)4029081-50(DE-627)1062758440(DE-576)208980903aJustizverwaltung2gnd02Ds0(DE-588)4738572-80(DE-627)3664448910(DE-576)215907574aGerichtsordnung2gnd03Dg0(DE-588)4047194-90(DE-627)1045168280(DE-576)209072652aPreußen2gnd04Ds0(DE-588)4048737-40(DE-627)1061897190(DE-576)20907907XaRecht2gnd0 5(DE-627)1 aHertting, A.0(DE-588)1727882930(DE-627)6977190060(DE-576)1336448204oth18w(DE-627)647226901w(DE-576)964722690XgAbtheilung 2, Bd. 2q2,2.188208iDruckausg.tDie Verwaltung bei den Justizbehörden in PreußendBerlin : Heymanns Verlag, 1882hXI, 588 S.w(DE-627)14133835040uhttp://resolver.staatsbibliothek-berlin.de/SBB0000444900030000xVerlagzKostenfrei3Volltextbka86.10jRecht einzelner Länder, Gebiete und VölkerqARK0(DE-627)106422499bka86.13jGerichtsverfassungqARK0(DE-627)106411411 aMV40uhttp://resolver.staatsbibliothek-berlin.de/SBB00004449000300009LFER aLFERz2019-11-13T00:00:00Z cOD cEBOOK cEBOOK cEB alfer 2lferaDE-Zwi2 2lferaDE-Ch1 2lferaDE-15 2lferaDE-105 2lferaDE-14 aGerichtsverwaltung aOrdentliche Gerichtsbarkeit aУправление ÑŽÑтиции aÐдминиÑтративное дейÑтвие a法制 a法律 aПраво aBrandenburg-Preußen aKönigreich Preußen aPreußische Staaten aPreußischer Staat aDer Preußische Staat aKöniglich Preußische Staaten aPrusy Królewskie aKöniglich Preußen aPrussia aXA-DXDE aXA-DE a647227738b0k647227738o9647227736clfer \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-647227738_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-647227738_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..fdc0055c1f8fb900a78bbea694d044c647a1597f --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-647227738_result.txt @@ -0,0 +1 @@ +Die Verwaltung bei den Justizbehörden in Preußen: Handbuch zum praktischen Gebrauch in zwei Abtheilungen (Abtheilung 2, Bd. 2); Bestimmungen über die Verwaltung im allgemeinen insbesondere über die persönichen Verhältnisse der Beamten nach den Gesetzen, Verordnungen, Erlassen, Ministerial-Verfügungen etc. mit Berücksichtigung der Verwaltungsgrundsätze, systematisch bearbeitet und erläutert/ von Hertting \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-682748102_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-682748102_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..3abe46b4889ee8112ec4eaf62b64afce04391889 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-682748102_fullrecord.txt @@ -0,0 +1 @@ +07111cam a2202317 a45000010012000000030007000120050017000190070015000360080041000510350022000920350023001140350025001370400031001620410008001930440012002011000105002132450034003182560065003522640033004173000009004503360040004593370032004993380037005314900021005685330163005899510007007528520031007599700007007909710010007979720010008079730007008179350009008248520016008338520017008498520016008668520017008828520018008999000028009179000031009459000028009769000025010049000027010299000024010569000021010809000018011019000025011199000030011449000030011749000026012049000020012309000031012509000028012819000028013099000023013379000018013609000022013789000021014009000019014219000022014409000021014629000021014839000018015049000011015229000032015339000013015659000032015789000030016109000025016409000024016659000022016899000027017119000011017389000021017499000010017709000025017809000028018059000011018339000011018449000014018559000027018699000025018969000017019219000010019389000016019489000009019649000016019739000013019899000012020029000011020149000030020259000028020559000028020839000031021119000026021429000031021689000035021999000027022349000016022619000016022779000020022939000016023139000025023299000028023549000027023829000016024099000016024259000025024419000033024669000027024999000026025269000028025529000016025809000018025969000021026149000013026359000025026489000009026739000010026829000013026929000014027059000026027199000009027459000010027549000032027649000033027969000034028299000037028639000010029009000011029109000012029219000012029339000012029459000027029579000017029849000028030019000017030299000034030469000035030809000038031159000035031539000031031889000030032199000027032499000027032769000044033039000037033479000041033849000028034259000030034539000011034839000035034949000011035299000024035409000014035649000026035789000027036049000016036319000013036479000027036609000027036879000031037149000027037459000035037729000031038079000029038389000025038679000026038929000031039189000026039499000022039759000022039979000025040199000021040449000025040659000028040909000015041189000019041339000033041529000039041859000011042249000021042359000017042569000044042739000011043179000041043289000041043699000061044109000043044719000072045149000042045869000033046289000035046619000047046969510010047439800040047530-682748102DE-62720170914001141.0cr g| 008aabda120111m19449999xx |||||o 00| ||ger c a(DE-627)682748102 a(DE-576)9682748100 a(DE-599)GBV682748102 aDE-627bgercDE-627erakwb ager cXA-DXDE1 aGoethe, Johann Wolfgang vond1749-18320(DE-588)1185402380(DE-627)1334167200(DE-576)1611428424aut10aFaustbeine TragödiecGoethe aJPEG, 8 bit (Graustufen); Digitalisierungsvorlage: Mikrofilm 1aBerlinbSuhrkampc[um 1944-] c12° anicht spezifiziertbzzz2rdacontent aComputermedienbc2rdamedia aOnline-Ressourcebcr2rdacarrier0 aPantheon-Ausgabe aOnline-Ausg.bDresdencAlpha Com Sachsend20097|2009||||||||||eOnline-RessourcefFaustsammlung der HAAB WeimarfProjekt Sicherungsverfilmung der HAAB Weimar aMC aLFERz2019-11-13T00:00:00Z cOD cEBOOK cEBOOK cEB alfer 2lferaDE-14 2lferaDE-105 2lferaDE-15 2lferaDE-Ch1 2lferaDE-Zwi2 aGoethe, Johann Wolfgang aGoethe, Johan Wolfgang von aGoethe, Johan Wolphgang aGoethe, Johan W. von aGoethe, Joh. Wolfg. v. aGoethe, J. Wolfgang aGoethe, J. W. v. aGoethe, J. W. aGoethe, Jan Wolfgang aGoethe, Jean Wolfgang von aGoethe, Juan Wolfgang von aGoethe, Juan Wolfgang aGoethe, Juan W. aGoethe, João Wolfgang von aGoethe, Iohann Wolfgang aGoethe, Iohan Wolphgang aGoethe, Ioannes W. aGoethe, I. W. aGoethe, Wolfgango aGoethe, Wolfango aGoethe, W. von aGoethe, Volfgango aGoethe, Volfango aGoethe, Giov. L. aGoethe, G. L. aGoethe aVon Goethe, Johann Wolfgang aGoethius aGöthe, Johann Wolfgang von aGöthe, Johann W. êvonë aGöthe, Jan Wolfgang aGöthe, Jan Wolfang aGöthe, J. W. von aGöthe, Giov. Volfango aGöthe aGöte, Iogann V. aGöte aGoete, Iohan V. p'on aGoet'e, Iohan Volp'gang aGoet'e aGoe te aGêôt'ê aG'ote, Jochan Volfgang aGete, Yohan Volfgang aG'ote, V. f. aG'ote aGót, J. V. aGót aGo't, I. V. aGoithios aGotenin aGejteh aGete, JÅhan Wolfgang fon aGete, Johann Volʹfgang aGéte, Johans Volfgangs aGÄ—tÄ—, Johanas Volfgangas aGete, Jochan Volfgang aGete, Jogann Vol'fgang fon aGete, Jogann Vol'fgang êfonë aGete, Jogann-Vol'fgang aGete, J. V. aGete, J.-V. aGete, Iogann W. aGete, I. W. aGete, Iohan Volfgang aGëte, Iogann Vol'fgang aGëte, Johann Volfgang aGete, I. V. aGete, I.-V. aGete, Yohan Wolfgang aGete, Yôhân Wôlfgang fôn aGête, Yôhan Wolfgang aGete, Yohann Volfqanq aGete, Yogann Volʹfgang aGete, Y. W. aGêtê, Y. W. aGete, Volʹfgang aGete, V. aGete, Egan Vol'fgang aGete aGÄ“te aGÄ›'á¹e aGette, G. aGede, Yuehan Wofugang aGede aGe de aGeteh, Yohan á¹¾olfgang fon aGÅ«ta, YÅ«hÄn WulfgÄng fun aGÅ«ta, YÅ«hÄn WulfgÄng fÅ«n aǦūta, YÅ«hÄn WulfǧÄnǧ fÅ«n aGÅ«ta aǦīta aǦītÄ aǦītah aǦītih aGiote, Johan Wolphgang aGiote, J. W. aGÇote, Jochan Volfgang aGiote, J. V. aÄ Å«ta, YÅ«hÄn FÅ«lfÄ¡Änḡ aÄ Å«tah, YÅ«hÄn FÅ«lfÄ¡Änḡ aÄ Å«tih, YÅ«hÄn VÅ«lfÄ¡anÄ¡ fÅ«n aÄ Å«tih, YÅ«hÄn FÅ«lfÄ¡Änḡ aGoytä, Yohan Welfgang fon aGyote, JohÄn BholphgÃ£Ä aGyot'e, Yohan Wolfgang aGyot'e, Yohan Volfgang aGÅšutih, YÅšuhÅšan VÅšulf·gan·g fÅšun aGkaite, Giochan Bolphnkannk phon aGkaite, Giochan Bolphnkannk êphonë aGkaite, Giochan B. phon aGkaite, IÅann Mpolphgang aGkaite aKoet'e, Yohan Polp'Ågang p'on aKoet'e aKêôt'ê, Volfkank aKÄ“ÅthÄ“ aKote, Johann Volfgang aKote, Jochann Volfgang aKote, J. V. aKote, V. aHete, Johann-Vol'fhanh aHëte, Ëhan Vol'fhanh aHëte, Ëhan Vol'fhanh aHöte, Iohann Volfqanq aYo han Bol peu gang pon Goe te aYohan-Bolpeugang-pon-Goete aYue han Wo fu gang Ge de aYuehan-Wofugang-Gede aGyote, Yohan Wolfgang aGoethe, Johann Wolfgang v. aGoethe, Johann W. von aGoethe, Johann W. aGoethe, J. W. von aGoethe, Wolfgang von aGoethe, Wolfgang aGete, Johan Volfgang aGete, Iogann Volʹfgang aGete, J.V. aGoithios, I.V. aGÄ“te, Yohan Vorufugangu Fon aÄ Å«tih, YÅ«hÄn FÅ«lfÄ¡ÄnÄ¡ fÅ«n aGoythe aGoethe, J.W. von aGoethe, J.W. aГёте, Йоҳанн Волфганг aæŒå¾· a約翰・沃爾夫岡・馮・æŒå¾· a约翰・沃尔夫冈・冯・æŒå¾· aゲーテ, ヨãƒãƒ³ãƒ»ãƒ´ã‚©ãƒ«ãƒ•ã‚¬ãƒ³ã‚°ãƒ»ãƒ•ã‚©ãƒ³ aגתה, יוהן ×•×•×œ×¤×’× ×’ פון aგáƒáƒ”თე, იáƒáƒ°áƒáƒœ ვáƒáƒšáƒ¤áƒ’áƒáƒœáƒ’ ფáƒáƒœ aگيوتÛ, يوھان Û‹ÙˆÙ„Ú§Ú¯Ø§Ú aê´´í…Œ, 요한 볼프강 í° aæŒå¾·, 约翰·沃尔夫冈· aگوته, یوهان ولÙگانگ Ùون bXA-DE a682748102b0k682748102o9682748100 \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/0-682748102_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-682748102_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..fcd1ae307e47fa19ec3446b0de68879dc3f7c579 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/0-682748102_result.txt @@ -0,0 +1 @@ +Faust: eine Tragödie/ Goethe \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/106-IDC14405_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/106-IDC14405_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..4f8a00d492905a92247b5ff5b57c983edc9b3f50 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/106-IDC14405_fullrecord.txt @@ -0,0 +1 @@ +01555cam a22003974a 4500001001300000003000700013005001700020006001900037007001500056008004100071035002900112035002000141040003400161090001200195095001600207099002100223100003800244245007700282246004900359260003400408300002100442500003600463506003800499530003100537533019300568752002100761773003800782773004500820773003000865776001500895830004200910830004600952830003300998856008101031980004501112106-IDC14405nllekb20100217120344.0m d cr bn----anbun040416s19uu gw b ||0|1 rus d a(CStRLIN)NYPGR31279884-B a(OCoLC)31279884 aRPBcRPBdNNdNeLeIDCdnllekb a0521.33 aPS-0521-001 aR-1077c26.50dh1 aMariengof, AnatoliÄ,d1897-1962.10aBrityÄ chelovekh[electronic resource] :broman /cAnatoliÄ Mariengof.1 iTitle on microfiche header:aBrityj Äelovek aBerlin :bPetropolis,c[19--] a121 p. ;c18 cm. aPublisher's device on fly-leaf. aAccess restricted to subscribers. aAlso issued on microfiche. aElectronic resource.bLeiden :cIDC,d2010.f(Russia USSR Eastern Europe ; R-1077)f(Russian Avant-garde, 1904-1946 ; R-1077)f(Russian symbolism ; R-1077)nMode of access: World Wide Web. aGermanydBerlin.0 tRussia USSR Eastern EuropewIDC860 tRussian Avant-garde, 1904-1946wIDC143060 tRussian symbolismwIDC1240 hMicrofiche 0aRussia USSR Eastern Europe ;vR-1077. 0aRussian Avant-garde, 1904-1946 ;vR-1077. 0aRussian symbolism ;vR-1077.4 zDigital images available at:uhttp://dx.doi.org/10.1163/9789004192676.R-1077 aIDC14405b106csid-106-col-slavicstudies \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/106-IDC14405_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/106-IDC14405_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..09724cc8e2aaf5a42f91ce8b6914bda477a971e7 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/106-IDC14405_result.txt @@ -0,0 +1 @@ +BrityÄ chelovek [electronic resource] : roman / AnatoliÄ Mariengof. \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/finc-147-978-0-230-27613-0_fullrecord.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/finc-147-978-0-230-27613-0_fullrecord.txt new file mode 100644 index 0000000000000000000000000000000000000000..cbc9a1a7b224a4ab95315c578b47ed7b0193fe3f --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/finc-147-978-0-230-27613-0_fullrecord.txt @@ -0,0 +1 @@ +01778nam a22004335i 4500001002700000003000900027005001700036007001500053008004100068020003700109024003100146050001600177072001600193072002300209082001200232245017200244264007500416300003200491336002600523337002600549338003600575347002400611520022400635650002900859650002400888650002300912650001500935650002900950650003000979700003401009700003401043710003401077773002001111776003601131856004401167912001401211950006101225980005801286finc-147-978-0-230-27613-0DE-He21320160523200815.0cr nn 008mamaa151204s2010 xxk| s |||| 0|eng d a97802302761309978-0-230-27613-07 a10.1057/97802302761302doi 4aHF1351-1647 7aKCL2bicssc 7aBUS0690202bisacsh04a33722310aReport on the State of the European Unionh[electronic resource] :bVolume 3: Crisis in the EU Economic Governance /cedited by Jean-Paul Fitoussi, Jacques Le Cacheux. 1aLondon :bPalgrave Macmillan UK :bImprint: Palgrave Macmillan,c2010. aX, 210 p.bonline resource. atextbtxt2rdacontent acomputerbc2rdamedia aonline resourcebcr2rdacarrier atext filebPDF2rda aThe Report on the State of the European Union examines the progress of European integration and focuses on economic aspects of the process. This third volume in the series explores the EU in light of the current crisis. 0aInternational economics. 0aRegional economics. 0aSpatial economics.14aEconomics.24aInternational Economics.24aRegional/Spatial Science.1 aFitoussi, Jean-Paul.eeditor.1 aCacheux, Jacques Le.eeditor.2 aSpringerLink (Online service)0 tSpringer eBooks08iPrinted edition:z978134931731840uhttp://dx.doi.org/10.1057/9780230276130 aZDB-2-PEF aPalgrave Economics & Finance Collection (Springer-41136) a978-0-230-27613-0b147csid-147-col-palgraveeconomics \ No newline at end of file diff --git a/module/finc/tests/fixtures/getTitleDetails/DE-15/finc-147-978-0-230-27613-0_result.txt b/module/finc/tests/fixtures/getTitleDetails/DE-15/finc-147-978-0-230-27613-0_result.txt new file mode 100644 index 0000000000000000000000000000000000000000..8834abd13f62cdc1e68b468b6d4d85accca534f7 --- /dev/null +++ b/module/finc/tests/fixtures/getTitleDetails/DE-15/finc-147-978-0-230-27613-0_result.txt @@ -0,0 +1 @@ +Report on the State of the European Union [electronic resource] : Volume 3: Crisis in the EU Economic Governance / edited by Jean-Paul Fitoussi, Jacques Le Cacheux. \ 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 1b5e7ec45dd969f10709e13e1aeaef9304dc1b5a..762ef96f63f35f3d8fbd23cf0c6f0c73b020cd0b 100644 --- a/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php +++ b/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php @@ -118,6 +118,65 @@ class SolrMarcFincTestCase extends VuFindTestCase $expectedResult = $expectedResult ?? $this->getFixtureData("/getUrls/{$testCase}_result.json"); $this->assertEquals($expectedResult, $actualResult); } + + /** + * @return void + */ + public function testGetTitleDetails(): void + { + $fixtures = [ + '106-IDC14405' => 'DE-15', + 'finc-147-978-0-230-27613-0' => 'DE-15' + ]; + + $this->runTestGetTitleDetails($fixtures, true); + } + + /** + * @return void + */ + public function testGetTitleDetailsSetPunctuation(): void + { + // "245a: 245b (245n); 245p/ 245c" + $fixtures = [ + '0-682748102' => 'DE-15', // |a Faust |b eine Tragödie |c Goethe + '0-1144749735' => 'DE-15', // |a Briefe der Frau Rat Goethe |c ausgew. und hrsg. von Rudolf Bach + '0-1172722633' => 'DE-15', // |a Faust |n 2 |p Der Tragödie zweiter Teil / mit Ill. von Max Slevogt |c Johann Wolfgang Goethe + '0-1070158569' => 'DE-15', // |a C. Plini Secundi Naturalis Historiae libri XXXVII |n 5 |p Libri XXXI - XXXVII + '0-130143812' => 'DE-15', // |a Academische Revue |b Zeitschrift für das internationale Hochschulwesen |c in Verbindung mit den Hochschulnachrichten hrsg. von der Centralstelle für das Internationale Hochschulwesen in München + '0-229443699' => 'DE-15', // |a Kunsthistorische Sammlungen des allerhöchsten Kaiserhauses |b Gemälde; beschreibendes Verzeichnis |n Bd. 1 |p Italienische, Spanische und Französische Schulen |c von Eduard R. von Engerth + '0-647227738' => 'DE-15', // |a Die Verwaltung bei den Justizbehörden in Preußen |b Handbuch zum praktischen Gebrauch in zwei Abtheilungen |n Abtheilung 2 |p Bestimmungen über die Verwaltung im allgemeinen insbesondere über die persönichen Verhältnisse der Beamten nach den Gesetzen, Verordnungen, Erlassen, Ministerial-Verfügungen etc. mit Berücksichtigung der Verwaltungsgrundsätze, systematisch bearbeitet und erläutert |n Bd. 2 |c von Hertting + '0-130271578' => 'DE-15', // |a Veröffentlichungen des Seminars für Orientalische Kunstgeschichte an der Universität Bonn |n Reihe B |p Antiquitates orientales + '0-1072033011' => 'DE-15' // |a Slawische Altertumskunde des östlichen Mitteleuropas im 9. und 10. Jahrhundert |n 3 |c Helmut Preidel + ]; + + $this->runTestGetTitleDetails($fixtures, false); + } + + /** + * @param array $fixtures + * @param bool $hasPunctuation + * + * @return void + */ + protected function runTestGetTitleDetails(array $fixtures, $hasPunctuation): void + { + foreach ($fixtures as $recordId => $isil) { + $driver = $this->getDriverMock(); + $driver->setFullRecord($this->getFixtureData("getTitleDetails/{$isil}/{$recordId}_fullrecord.txt", false)); + $this->assertEquals( + $driver->hasPunctuation(), + $hasPunctuation, + "{$isil}: Record {$recordId} " . ($hasPunctuation ? "has no punctuation as expected." : "has punctuation but shouldn't.") + ); + $expected = $this->getFixtureData("getTitleDetails/{$isil}/{$recordId}_result.txt", false); + $this->assertEquals( + $expected, + implode($driver->getTitleDetails()), + "{$isil}: Record {$recordId} title punctuation does not match expected result: \"" . $expected . "\"" + ); + } + } } class SolrMarcFincDriverMock extends SolrMarcFincDriver diff --git a/themes/finc-accessibility/js/record.js b/themes/finc-accessibility/js/record.js index 26da27f6f5f484bf429a4eab12162fc12bf15de8..4061aac960994b15678094cb98e48c07a075ac3f 100644 --- a/themes/finc-accessibility/js/record.js +++ b/themes/finc-accessibility/js/record.js @@ -145,15 +145,6 @@ function registerTabEvents() { VuFind.lightbox.bind('.tab-pane.active'); } -function removeHashFromLocation() { - if (window.history.replaceState) { - var href = window.location.href.split('#'); - window.history.replaceState({}, document.title, href[0]); - } else { - window.location.hash = '#'; - } -} - function ajaxLoadTab($newTab, tabid, setHash) { // Request the tab via AJAX: $.ajax({ @@ -171,12 +162,7 @@ function ajaxLoadTab($newTab, tabid, setHash) { if (typeof syn_get_widget === "function") { syn_get_widget(); } - if (typeof setHash == 'undefined' || setHash) { - window.location.hash = tabid; - } else { - removeHashFromLocation(); - } - setupJumpMenus($newTab); + $('.tab-pane.active').find(':focusable').eq(0).focus(); }); return false; } @@ -246,22 +232,6 @@ function backgroundLoadTab(tabid) { return ajaxLoadTab(newTab, tabid, false); } -function applyRecordTabHash() { - var activeTab = $('.record-tabs li.active').attr('data-tab'); - var $initiallyActiveTab = $('.record-tabs li.initiallyActive a'); - var newTab = typeof window.location.hash !== 'undefined' - ? window.location.hash.toLowerCase() : ''; - - // Open tab in url hash - if (newTab.length <= 1 || newTab === '#tabnav') { - $initiallyActiveTab.click(); - } else if (newTab.length > 1 && '#' + activeTab !== newTab) { - $('.' + newTab.substr(1) + ' a').click(); - } -} - -$(window).on('hashchange', applyRecordTabHash); - function recordDocReady() { $('.record-tabs .nav-tabs a').click(function recordTabsClick() { var $li = $(this).parent(); @@ -288,7 +258,6 @@ function recordDocReady() { // now need to return -- just switch it back on. if ($li.hasClass('initiallyActive')) { $(this).tab('show'); - window.location.hash = 'tabnav'; return false; } // otherwise, we need to let the browser follow the link: @@ -297,21 +266,11 @@ function recordDocReady() { $(this).tab('show'); if ($top.find('.' + tabid + '-tab').length > 0) { $top.find('.' + tabid + '-tab').addClass('active'); - if ($top.find('#' + tabid ).length) { - $top.find('#' + tabid ).parent().focus(); - } - if ($(this).parent().hasClass('initiallyActive')) { - removeHashFromLocation(); - } else { - window.location.hash = tabid; - } + $('.tab-pane.active').find(':focusable').eq(0).focus(); return false; } else { var newTab = getNewRecordTab(tabid).addClass('active'); $top.find('.tab-content').append(newTab); - if ($top.find('#' + tabid ).length) { - $top.find('#' + tabid ).parent().focus(); - } return ajaxLoadTab(newTab, tabid, !$(this).parent().hasClass('initiallyActive')); } }); @@ -321,5 +280,4 @@ function recordDocReady() { }); registerTabEvents(); - applyRecordTabHash(); } diff --git a/themes/finc/scss/compiled.scss b/themes/finc/scss/compiled.scss index 76039d0252fecf7b2c7694f303a9e0ad12b69170..9eaea47a0003c36ad2a9ac4563e56412c2e8029b 100644 --- a/themes/finc/scss/compiled.scss +++ b/themes/finc/scss/compiled.scss @@ -579,8 +579,13 @@ select:hover { } input { + margin-left: 1.4rem; position: relative; } + + label { + padding-left: 0; + } } } @@ -3345,6 +3350,12 @@ input { label[data-required="true"][for]::after { content: ' *'; } + + .form-group { + ul li { + color: $brand-danger; + } + } } // ZEND-FORMS - END diff --git a/themes/finc/templates/documentdeliveryservice/zform.phtml b/themes/finc/templates/documentdeliveryservice/zform.phtml index 4f9481ef1576f6cae903b6ae234e8eecb731d49a..fde5f06b3def634a62156ddeff3e1c886c575bd3 100644 --- a/themes/finc/templates/documentdeliveryservice/zform.phtml +++ b/themes/finc/templates/documentdeliveryservice/zform.phtml @@ -50,7 +50,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?php if ($this->department): ?> <input type="hidden" name="subito[hdepartment]" value="<?=$this->department?>"/> <?php endif; ?> - <? /* name */ ?> + <?php /* name */ ?> <?php /** @var Element\Text $elemName */ $elemName = $form->get('username'); @@ -63,7 +63,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemName)?> </div> - <? /* phone */ ?> + <?php /* phone */ ?> <?php /** @var Element\Text $elemPhone */ $elemPhone = $form->get('phone'); @@ -75,7 +75,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElement($elemPhone)?> </div> - <? /* email */ ?> + <?php /* email */ ?> <?php /** @var Element\Email $elemEmail */ $elemEmail = $form->get('email'); @@ -88,7 +88,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemEmail)?> </div> - <? /* userid */ ?> + <?php /* userid */ ?> <?php /** @var Element\Text $elemUserid */ $elemUserid = $form->get('userid'); @@ -101,7 +101,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemUserid)?> </div> - <? /* division */ ?> + <?php /* division */ ?> <?php /** @var Element\Select $elemDivision */ $elemDivision = $form->get('division'); @@ -114,7 +114,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemDivision)?> </div> - <? /* department */ ?> + <?php /* department */ ?> <?php /** @var Element\Select $elemDepartment */ $elemDepartment = $form->get('department'); @@ -127,7 +127,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemDepartment)?> </div> - <? /* department medicine */ ?> + <?php /* department medicine */ ?> <?php /** @var Element\Text $elemMdepartment */ $elemMdepartment = $form->get('inputdepartment'); @@ -140,7 +140,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemMdepartment)?> </div> - <? /* author */ ?> + <?php /* author */ ?> <?php /** @var Element\Text $elemAuthor */ $elemAuthor = $form->get('author'); @@ -153,7 +153,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemAuthor)?> </div> - <? /* title of issue */ ?> + <?php /* title of issue */ ?> <?php /** @var Element\Text $elemArticle */ $elemArticle = $form->get('article'); @@ -166,7 +166,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemArticle)?> </div> - <? /* title of journal */ ?> + <?php /* title of journal */ ?> <?php /** @var Element\Text $elemJournal */ $elemJournal = $form->get('journal'); @@ -179,7 +179,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemJournal)?> </div> - <? /* issn */ ?> + <?php /* issn */ ?> <?php /** @var Element\Text $elemIssn */ $elemIssn = $form->get('issn'); @@ -192,7 +192,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemIssn)?> </div> - <? /* publish date */ ?> + <?php /* publish date */ ?> <?php /** @var Element\Text $elemPublishdate */ $elemPublishdate = $form->get('publishdate'); @@ -205,7 +205,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemPublishdate)?> </div> - <? /* journal number */ ?> + <?php /* journal number */ ?> <?php /** @var Element\Text $elemNumber */ $elemNumber = $form->get('number'); @@ -218,7 +218,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemNumber)?> </div> - <? /* pages */ ?> + <?php /* pages */ ?> <?php /** @var Element\Text $elemPages */ $elemPages = $form->get('pages'); @@ -231,7 +231,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemPages)?> </div> - <? /* remarks */ ?> + <?php /* remarks */ ?> <?php /** @var Element\Textarea $elemRemarks */ $elemRemarks = $form->get('remarks'); @@ -244,7 +244,7 @@ $formElementErrors->setTranslatorTextDomain('DDS'); <?=$this->formElementErrors($elemRemarks)?> </div> - <? /* submit button */ ?> + <?php /* submit button */ ?> <?php /** @var Submit $elemSubmit */ $elemSubmit = $form->get('submit'); @@ -275,34 +275,10 @@ $formElementErrors->setTranslatorTextDomain('DDS'); $this->inlineScript()->captureStart(); echo <<<JS $(document).ready(function(){ - // if department already selected and post request failed then - // rebuild select menu - if ( $('input:hidden[name="department"]').val() != 'undefined') { - department.addDepartmentSelect( - $('input[name="department"]').val(), - $('select[name="division"]').val() - ); - } + department.init($('select[name="division"]').val(), true); $('select[name="division"]').change(function() { - department.init($(this).val()); + department.init($(this).val(), false); }); - // $('.form-group input').focus(function() { - // $(this).parent().prev('.error-field').hide(200); - // }); - // $('.form-group select').focus(function() { - // $(this).parent().prev('.error-field').hide(200); - // }); - /*if ( $('#loginOptions a.login').length ) { - var loginUrl = { - followup: true, - followupModule: 'Subito', - followupAction: 'Subito' - }; - $('#loginOptions a.login').attr('href', function ( index, value ) { - return value + '?' + $.param( loginUrl ); - }); - // console.log($('#loginOptions a.login').attr('href')); - }*/ }); /** * Show & hide of subito form elements regarding select menu status. @@ -313,32 +289,31 @@ echo <<<JS **/ var department = { - init: function ( divisionid ) { + init: function ( divisionid, forceKeepOptions ) { addOptions = false; var elements = []; if ( divisionid == '15') { elements = { "department":"show", - "costcentre":"show", "sdepartment":"hide" } } else if (divisionid == '') { elements = { "department":"hide", - "costcentre":"hide", "sdepartment":"hide" } } else { elements = { "department":"hide", - "costcentre":"hide", "sdepartment":"show" } - var addOptions = true; - } + if (!forceKeepOptions) { + var addOptions = true; + } + } department.showHideElements(elements); - if (addOptions == true) { - department.addDepartmentOptions( divisionid ); + if (addOptions) { + department.addDepartmentOptions( divisionid ); } }, addDepartmentOptions: function ( divisionid ) { @@ -378,7 +353,13 @@ var department = { } if (value == 'hide') { $('.input-' + index).hide(200); - } + } + let control = $('.input-' + index).find('.form-control'); + if (control) { + $('.input-' + index).find('.form-control').attr("required", value == 'show'); + $('.input-' + index).find('.form-control').attr("data-required", value == 'show'); + $('.input-' + index).find('label').attr("data-required", value == 'show'); + } }); } } diff --git a/themes/finc/templates/myresearch/editlist.phtml b/themes/finc/templates/myresearch/editlist.phtml index 929bb53ca801ed12daec205700970390de96cb04..affb476f7e3d4dd00f80ec3a0ba5e51cb2470210 100644 --- a/themes/finc/templates/myresearch/editlist.phtml +++ b/themes/finc/templates/myresearch/editlist.phtml @@ -40,14 +40,14 @@ <fieldset> <legend><?=$this->transEsc('Access') ?></legend> <div class="radio inline"> - <label> - <input id="list_public_1" type="radio" name="public" value="1"<?php if ($this->list->isPublic()): ?> checked="checked"<?php endif; ?>/> <?=$this->transEsc('Public') ?> - </label> + <?php /* finc: add for attribute to label; take out input element and put it before label element, #21664 - VE */ ?> + <input id="list_public_1" type="radio" name="public" value="1"<?php if ($this->list->isPublic()): ?> checked="checked"<?php endif; ?>/> + <label for="list_public_1"><?=$this->transEsc('Public') ?></label> </div> <div class="radio inline"> - <label> - <input id="list_public_0" type="radio" name="public" value="0"<?php if (!$this->list->isPublic()): ?> checked="checked"<?php endif; ?>/> <?=$this->transEsc('Private') ?> - </label> + <?php /* finc: add for attribute to label; take out input element and put it before label element, #21664 - VE */ ?> + <input id="list_public_0" type="radio" name="public" value="0"<?php if (!$this->list->isPublic()): ?> checked="checked"<?php endif; ?>/> + <label for="list_public_0"><?=$this->transEsc('Private') ?></label> </div> </fieldset> </div>