diff --git a/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php index 5ee81b7691ce9cf6a274cb7084a49039dea166ec..43561a87e097a4160c47f7da436849fb6bfa63b5 100644 --- a/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php @@ -33,6 +33,8 @@ use VuFindSearch\Backend\BackendInterface; use Zend\EventManager\EventInterface; +use SplObjectStorage; + /** * Abstract base class of SOLR error listeners. * @@ -56,7 +58,7 @@ abstract class AbstractErrorListener /** * Backends to listen for. * - * @var array + * @var SplObjectStorage */ protected $backends; @@ -67,41 +69,34 @@ abstract class AbstractErrorListener * * @return void */ - public function __construct($backend) + public function __construct(BackendInterface $backend) { - $this->backends = array(); + $this->backends = new SplObjectStorage(); $this->addBackend($backend); } /** * Add backend to listen for. * - * @param BackendInterface|string $backend Backend instance or name of backend + * @param BackendInterface $backend Backend instance * * @return void */ - public function addBackend($backend) + public function addBackend(BackendInterface $backend) { - if ($backend instanceOf BackendInterface) { - $this->backends[] = $backend->getName(); - } else { - $this->backends[] = $backend; - } + $this->backends->attach($backend); } /** * Return true if listeners listens for backend errors. * - * @param BackendInterface|string $backend Backend instance or name of backend + * @param BackendInterface $backend Backend instance * * @return boolean */ - public function listenForBackend($backend) + public function listenForBackend(BackendInterface $backend) { - if ($backend instanceOf BackendInterface) { - $backend = $backend->getName(); - } - return in_array($backend, $this->backends); + return $this->backends->contains($backend); } /** diff --git a/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php index f42bb6cb2c94f1d1f3623412ed4e7b083c3bcfe5..5133f75b27ee3b276e0f37d03fa9d99929b5eff5 100644 --- a/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php @@ -55,7 +55,7 @@ class ErrorListener extends AbstractErrorListener */ public function onSearchError(EventInterface $event) { - $backend = $event->getParam('backend'); + $backend = $event->getParam('backend_instance'); if ($this->listenForBackend($backend)) { $error = $event->getTarget(); if ($error instanceOf HttpErrorException) { diff --git a/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php index 8458a439b177341f3a7abbc1db3ebfa71d2fab96..af6fa05ce86d30b9fa4041bf006845a198c9ffb7 100644 --- a/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php @@ -65,7 +65,7 @@ class ErrorListener extends AbstractErrorListener */ public function onSearchError(EventInterface $event) { - $backend = $event->getParam('backend'); + $backend = $event->getParam('backend_instance'); if ($this->listenForBackend($backend)) { $error = $event->getTarget(); if ($error instanceOf HttpErrorException) { diff --git a/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php b/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php index 708fe31e593fcce624f1767f501df99b1045feef..50dcb9e10d9391093fa016a4fb58cca28df37bf0 100644 --- a/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php +++ b/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php @@ -58,12 +58,13 @@ class ErrorListenerTest extends TestCase */ public function testDetectParseError() { - $response = $this->createResponse('solr3-parse-error'); + $response = $this->createResponse('solr3-parse-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } @@ -76,11 +77,12 @@ class ErrorListenerTest extends TestCase public function testDetectUndefinedFieldError() { $response = $this->createResponse('solr3-undefined-field-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } diff --git a/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php b/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php index 84d51543757b09ec24409a7bef69171e0d3421df..a4b3e8a7813efaa232b6dc255c0abf90ba6fccf8 100644 --- a/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php +++ b/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php @@ -59,11 +59,12 @@ class ErrorListenerTest extends TestCase public function testDetectParseError() { $response = $this->createResponse('solr4-parse-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } @@ -76,11 +77,12 @@ class ErrorListenerTest extends TestCase public function testDetectUndefinedFieldError() { $response = $this->createResponse('solr4-undefined-field-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); }