Skip to content
Snippets Groups Projects
Commit 08d1f09d authored by Ere Maijala's avatar Ere Maijala Committed by Demian Katz
Browse files

Make MultiBackend use getStatuses of the ILS drivers. (#1227)

- More error tolerant and efficient than the previous loop.
- Resolves VUFIND-1245.
parent 17a23c50
No related merge requests found
...@@ -190,20 +190,51 @@ class MultiBackend extends AbstractBase implements \Zend\Log\LoggerAwareInterfac ...@@ -190,20 +190,51 @@ class MultiBackend extends AbstractBase implements \Zend\Log\LoggerAwareInterfac
*/ */
public function getStatuses($ids) public function getStatuses($ids)
{ {
$items = []; // Group records by source and request statuses from the drivers
$grouped = [];
foreach ($ids as $id) { foreach ($ids as $id) {
try { $source = $this->getSource($id);
$items[] = $this->getStatus($id); if (!isset($grouped[$source])) {
} catch (ILSException $e) { $driver = $this->getDriver($source);
$items[] = [ $grouped[$source] = [
[ 'driver' => $driver,
'id' => $id, 'ids' => []
'error' => 'An error has occurred'
]
]; ];
} }
$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;
} }
/** /**
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment