diff --git a/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php b/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php index db2d4bac3ccfcf7d91817885e76a6d73f6a4d0ef..eae0779b66a4095d7b1fcfd95b7535523fa27371 100644 --- a/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php +++ b/module/VuFind/src/VuFind/ILS/Driver/MultiBackend.php @@ -190,20 +190,51 @@ class MultiBackend extends AbstractBase implements \Zend\Log\LoggerAwareInterfac */ public function getStatuses($ids) { - $items = []; + // Group records by source and request statuses from the drivers + $grouped = []; foreach ($ids as $id) { - try { - $items[] = $this->getStatus($id); - } catch (ILSException $e) { - $items[] = [ - [ - 'id' => $id, - 'error' => 'An error has occurred' - ] + $source = $this->getSource($id); + if (!isset($grouped[$source])) { + $driver = $this->getDriver($source); + $grouped[$source] = [ + 'driver' => $driver, + 'ids' => [] ]; } + $grouped[$source]['ids'][] = $id; + } + + // Process each group + $results = []; + foreach ($grouped as $source => $current) { + // Get statuses only if a driver is configured for this source + if ($current['driver']) { + $localIds = array_map( + function ($id) { + return $this->getLocalId($id); + }, + $current['ids'] + ); + try { + $statuses = $current['driver']->getStatuses($localIds); + } catch (ILSException $e) { + $statuses = array_map( + function ($id) { + return ['id' => $id, 'error' => 'An error has occurred']; + }, + $localIds + ); + } + $statuses = array_map( + function ($status) use ($source) { + return $this->addIdPrefixes($status, $source); + }, + $statuses + ); + $results = array_merge($results, $statuses); + } } - return $items; + return $results; } /**