From 9c47ff1fce671f0229964cfa94a5c44f1813bc39 Mon Sep 17 00:00:00 2001 From: jpkanter <kanter@ub.uni-leipzig.de> Date: Wed, 12 Apr 2023 11:10:04 +0200 Subject: [PATCH] adjusted Ajax Boss Handler: * added some more in-depth doc texts * deleted an unncessary function and replaced it with standard calls * made callnumber retrival slightly more resilient --- composer.json | 4 ++ src/AjaxHandler/GetBoss.php | 73 +++++++++++++------------------------ 2 files changed, 29 insertions(+), 48 deletions(-) diff --git a/composer.json b/composer.json index 73bce1b..e2286ec 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,10 @@ { "name": "Gregor Gawol", "email": "gawol@ub.uni-leipzig.de" + }, + { + "name": "Pascal Kanter", + "email": "kanter@ub.uni-leipzig.de" } ], "require": { diff --git a/src/AjaxHandler/GetBoss.php b/src/AjaxHandler/GetBoss.php index 866fe74..834a7d9 100644 --- a/src/AjaxHandler/GetBoss.php +++ b/src/AjaxHandler/GetBoss.php @@ -132,8 +132,8 @@ class GetBoss extends \VuFind\AjaxHandler\AbstractBase // Obtain user information from ILS: $library = isset($libraries[$homeLibrary]) ? $libraries[$homeLibrary] : $libraries['AAAAA']; - $network = $library->getNetwork(); - $boss = $library->getBoss(); + $network = strtolower($library->getNetwork()); + $isil = $library->getIsil(); $driver = $this->recordLoader->load( $params->fromQuery('id'), @@ -172,19 +172,15 @@ class GetBoss extends \VuFind\AjaxHandler\AbstractBase $this->config->General->networks->toArray() : []; $addNetworks = isset($this->config->General->addNetworks) ? $this->config->General->addNetworks->toArray() : []; - $network = strtolower($network); $inArray = in_array($network, $networks); $zdbId = $driver->tryMethod('getZdbId'); $isbns = $driver->tryMethod('getISBNs'); $isbns = count($isbns) > 0 ? $isbns[0] : ''; $results['param'] = !empty($results['param']) ? $results['param'] : $isbns; $isISXNZBD = (!empty($isbns) || !empty($zdbId)) ? true : false; - $tmp = $isilCallNumber; - unset($tmp['isils']); - $callnumber = $this->getCallnumbers($boss, $tmp); + $callnumber = $this->getCallnumbers($isil, $isilCallNumber); - $isISIL = $inArray && $isISXNZBD ? - $this->isISIL($isilCallNumber['isils'], $boss) : false; + $isISIL = $inArray && $isISXNZBD ? key_exists($isil, $isilCallNumber): false; $view = [ 'homeLibrary' => ($homeLibrary == "AAAAA") ? true : false, @@ -204,65 +200,46 @@ class GetBoss extends \VuFind\AjaxHandler\AbstractBase /** * Get the call numbers of a certain isil * - * @param $namespace - * @param $data + * @param $isil - ISIL of the library, like DE-15 + * @param $data - Array of CallNumbers with Key:Value equal to ISIL:Number (and sometimes ISIL:[Number]) * - * @return array + * @return array of deduplicated callnumbers */ - private function getCallnumbers($namespace, $data) + private function getCallnumbers($isil, $data) { - if ($this->isISIL(array_keys($data), $namespace)) { - $cnValue = []; - foreach ($data as $key => $value) { - if (preg_match('/' . $namespace . '/', $key) && !empty($value)) { - $cnValue[] = $value; - } + if ( !array_key_exists($isil, $data) ) {return [];} + // somestimes the value is just a value, sometimes its an array of value, untidy! + if ( !is_array($data[$isil])) { $data[$isil] = [$data[$isil]]; } + + $cnValue = []; + foreach ( $data[$isil] as $number) { + if (!empty($number) && !in_array($number, $cnValue)) { + $cnValue[] = $number; } - return $cnValue; } - return []; + return $cnValue; } /** * Get all call numbers with array structure * [ isil => call number] * - * @param $results + * @param array $raw_data as it comes from the interface + * usually [Holding => [ 0 => ['isil', 'callnumber', 'issue'] ] ] * - * @return array + * @return array of key:value as ISIL: [Callnumber], Callnumbers may be singular or multivalued */ - private function getISILCallNumber($results) + private function getISILCallNumber($raw_data) { $retval = []; - $results = is_null($results) ? [] : $results; - foreach ($results as $result) { - foreach ($result as $holding) { - $tmp[] = $holding['isil']; - $retval[($holding['isil'])] = isset($holding['callnumber']) ? - $holding['callnumber'] : ''; + $raw_data = is_null($raw_data) ? [] : $raw_data; + foreach ($raw_data as $row) { + foreach ($row as $holding) { + $retval[$holding['isil']] = isset($holding['callnumber']) ? $holding['callnumber'] : ''; } } - $retval['isils'] = !empty($tmp) ? $tmp : []; - - if (empty($results)) { - $retval['isils'] = []; - } - return $retval; } - /** - * Has the isil call numbers? - * - * @param $data - * @param $isil - * - * @return bool - */ - private function isISIL($data, $isil) - { - return preg_grep('/'.$isil.'/', $data) ? - true : false; - } } -- GitLab