Whoops \ Exception \ ErrorException (E_NOTICE)
Undefined offset: 1 Whoops\Exception\ErrorException thrown with message "Undefined offset: 1" Stacktrace: #21 Whoops\Exception\ErrorException in /usr/local/vufind/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php:296 #20 Whoops\Run:handleError in /usr/local/vufind/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php:296 #19 VuFind\View\Helper\Root\ResultFeed:getDateModified in /usr/local/vufind/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php:253 #18 VuFind\View\Helper\Root\ResultFeed:addEntry in /usr/local/vufind/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php:185 #17 VuFind\View\Helper\Root\ResultFeed:__invoke in /usr/local/vufind/module/VuFind/src/VuFind/Controller/AbstractSearch.php:352 #16 VuFind\Controller\AbstractSearch:resultsAction in /usr/local/vufind/module/VuFind/src/VuFind/Controller/AuthorController.php:72 #15 VuFind\Controller\AuthorController:resultsAction in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php:77 #14 Laminas\Mvc\Controller\AbstractActionController:onDispatch in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:321 #13 Laminas\EventManager\EventManager:triggerListeners in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:178 #12 Laminas\EventManager\EventManager:triggerEventUntil in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractController.php:105 #11 Laminas\Mvc\Controller\AbstractController:dispatch in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/Plugin/Forward.php:144 #10 Laminas\Mvc\Controller\Plugin\Forward:dispatch in /usr/local/vufind/module/VuFind/src/VuFind/Controller/AbstractBase.php:533 #9 VuFind\Controller\AbstractBase:forwardTo in /usr/local/vufind/module/VuFind/src/VuFind/Controller/AuthorController.php:99 #8 VuFind\Controller\AuthorController:homeAction in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php:77 #7 Laminas\Mvc\Controller\AbstractActionController:onDispatch in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:321 #6 Laminas\EventManager\EventManager:triggerListeners in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:178 #5 Laminas\EventManager\EventManager:triggerEventUntil in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractController.php:105 #4 Laminas\Mvc\Controller\AbstractController:dispatch in /usr/local/vufind/vendor/laminas/laminas-mvc/src/DispatchListener.php:139 #3 Laminas\Mvc\DispatchListener:onDispatch in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:321 #2 Laminas\EventManager\EventManager:triggerListeners in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:178 #1 Laminas\EventManager\EventManager:triggerEventUntil in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Application.php:331 #0 Laminas\Mvc\Application:run in /usr/local/vufind/public/index.php:88
21
Whoops\Exception\ErrorException
/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php296
20
Whoops\Run handleError
/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php296
19
VuFind\View\Helper\Root\ResultFeed getDateModified
/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php253
18
VuFind\View\Helper\Root\ResultFeed addEntry
/module/VuFind/src/VuFind/View/Helper/Root/ResultFeed.php185
17
VuFind\View\Helper\Root\ResultFeed __invoke
/module/VuFind/src/VuFind/Controller/AbstractSearch.php352
16
VuFind\Controller\AbstractSearch resultsAction
/module/VuFind/src/VuFind/Controller/AuthorController.php72
15
VuFind\Controller\AuthorController resultsAction
/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php77
14
Laminas\Mvc\Controller\AbstractActionController onDispatch
/vendor/laminas/laminas-eventmanager/src/EventManager.php321
13
Laminas\EventManager\EventManager triggerListeners
/vendor/laminas/laminas-eventmanager/src/EventManager.php178
12
Laminas\EventManager\EventManager triggerEventUntil
/vendor/laminas/laminas-mvc/src/Controller/AbstractController.php105
11
Laminas\Mvc\Controller\AbstractController dispatch
/vendor/laminas/laminas-mvc/src/Controller/Plugin/Forward.php144
10
Laminas\Mvc\Controller\Plugin\Forward dispatch
/module/VuFind/src/VuFind/Controller/AbstractBase.php533
9
VuFind\Controller\AbstractBase forwardTo
/module/VuFind/src/VuFind/Controller/AuthorController.php99
8
VuFind\Controller\AuthorController homeAction
/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php77
7
Laminas\Mvc\Controller\AbstractActionController onDispatch
/vendor/laminas/laminas-eventmanager/src/EventManager.php321
6
Laminas\EventManager\EventManager triggerListeners
/vendor/laminas/laminas-eventmanager/src/EventManager.php178
5
Laminas\EventManager\EventManager triggerEventUntil
/vendor/laminas/laminas-mvc/src/Controller/AbstractController.php105
4
Laminas\Mvc\Controller\AbstractController dispatch
/vendor/laminas/laminas-mvc/src/DispatchListener.php139
3
Laminas\Mvc\DispatchListener onDispatch
/vendor/laminas/laminas-eventmanager/src/EventManager.php321
2
Laminas\EventManager\EventManager triggerListeners
/vendor/laminas/laminas-eventmanager/src/EventManager.php178
1
Laminas\EventManager\EventManager triggerEventUntil
/vendor/laminas/laminas-mvc/src/Application.php331
0
Laminas\Mvc\Application run
/public/index.php88
     *
     * @param \VuFind\RecordDriver\AbstractBase $record Record to pull date from.
     *
     * @return int|DateTime|null
     */
    protected function getDateModified($record)
    {
        // Best case -- "last indexed" date is available:
        $date = $record->tryMethod('getLastIndexed');
        if (!empty($date)) {
            return strtotime($date);
        }
 
        // Next, try publication date:
        $date = $record->tryMethod('getPublicationDates');
        if (isset($date[0])) {
            // Extract first string of numbers -- this should be a year:
            preg_match('/[^0-9]*([0-9]+).*/', $date[0], $matches);
            $date = new DateTime();
            $date->setDate($matches[1], 1, 1);
            return $date;
        }
 
        // If we got this far, no date is available:
        return null;
    }
}
 
     *
     * @param \VuFind\RecordDriver\AbstractBase $record Record to pull date from.
     *
     * @return int|DateTime|null
     */
    protected function getDateModified($record)
    {
        // Best case -- "last indexed" date is available:
        $date = $record->tryMethod('getLastIndexed');
        if (!empty($date)) {
            return strtotime($date);
        }
 
        // Next, try publication date:
        $date = $record->tryMethod('getPublicationDates');
        if (isset($date[0])) {
            // Extract first string of numbers -- this should be a year:
            preg_match('/[^0-9]*([0-9]+).*/', $date[0], $matches);
            $date = new DateTime();
            $date->setDate($matches[1], 1, 1);
            return $date;
        }
 
        // If we got this far, no date is available:
        return null;
    }
}
 
        $entry = $feed->createEntry();
        $title = $record->tryMethod('getTitle');
        $title = empty($title) ? $record->getBreadcrumb() : $title;
        $entry->setTitle(
            empty($title) ? $this->translate('Title not available') : $title
        );
        $serverUrl = $this->getView()->plugin('serverurl');
        $recordLink = $this->getView()->plugin('recordLink');
        try {
            $url = $serverUrl($recordLink->getUrl($record));
        } catch (\Laminas\Router\Exception\RuntimeException $e) {
            // No route defined? See if we can get a URL out of the driver.
            // Useful for web results, among other things.
            $url = $record->tryMethod('getUrl');
            if (empty($url) || !is_string($url)) {
                throw new \Exception('Cannot find URL for record.');
            }
        }
        $entry->setLink($url);
        $date = $this->getDateModified($record);
        if (!empty($date)) {
            $entry->setDateModified($date);
        }
        $author = $record->tryMethod('getPrimaryAuthor');
        if (!empty($author)) {
            $entry->addAuthor(['name' => $author]);
        }
        $formats = $record->tryMethod('getFormats');
        if (is_array($formats)) {
            foreach ($formats as $format) {
                $entry->addDCFormat($format);
            }
        }
        $dcDate = $this->getDcDate($record);
        if (!empty($dcDate)) {
            $entry->setDCDate($dcDate);
        }
 
        $feed->addEntry($entry);
    }
                    ->setPage($params->getPage() + 1)->getParams(false),
                'next',
                $params->getView()
            );
        }
        $feed->addOpensearchLink(
            $baseUrl . $results->getUrlQuery()->setPage($lastPage)->getParams(false),
            'last',
            $params->getView()
        );
 
        // add opensearch fields
        $feed->setOpensearchTotalResults($results->getResultTotal());
        $feed->setOpensearchItemsPerPage($params->getLimit());
        $feed->setOpensearchStartIndex($results->getStartRecord() - 1);
        $feed->setOpensearchSearchTerms($params->getQuery()->getAllTerms());
 
        $records = $results->getResults();
        foreach ($records as $current) {
            $this->addEntry($feed, $current);
        }
 
        return $feed;
    }
 
    /**
     * Support method to extract a date from a record driver. Return empty string
     * if no valid match is found.
     *
     * @param \VuFind\RecordDriver\AbstractBase $record Record to read from
     *
     * @return string
     */
    protected function getDcDate($record)
    {
        // See if we can extract a date that's pre-formatted in a DC-friendly way:
        $dates = (array)$record->tryMethod('getPublicationDates');
        $regex = '/[0-9]{4}(\-[01][0-9])?(\-[0-3][0-9])?/';
        foreach ($dates as $date) {
            if (preg_match($regex, $date, $matches)) {
            if ($this->saveToHistory) {
                $this->saveSearchToHistory($results);
            }
 
            // Set up results scroller:
            if ($this->resultScrollerActive()) {
                $this->resultScroller()->init($results);
            }
 
            foreach ($results->getErrors() as $error) {
                $this->flashMessenger()->addErrorMessage($error);
            }
        }
 
        // Special case: If we're in RSS view, we need to render differently:
        if (isset($view->params) && $view->params->getView() == 'rss') {
            $response = $this->getResponse();
            $response->getHeaders()->addHeaderLine('Content-type', 'text/xml');
            $feed = $this->getViewRenderer()->plugin('resultfeed');
            $response->setContent($feed($view->results)->export('rss'));
            return $response;
        }
 
        // Search toolbar
        $config = $this->serviceLocator->get(\VuFind\Config\PluginManager::class)
            ->get('config');
        $view->showBulkOptions = isset($config->Site->showBulkOptions)
          && $config->Site->showBulkOptions;
 
        return $view;
    }
 
    /**
     * Process the jumpto parameter -- either redirect to a specific record and
     * return view model, or ignore the parameter and return false.
     *
     * @param \VuFind\Search\Base\Results $results Search results object.
     *
     * @return bool|\Laminas\View\Model\ViewModel
     */
        return parent::facetListAction();
    }
 
    /**
     * Sets the configuration for displaying author results
     *
     * @return mixed
     */
    public function resultsAction()
    {
        $this->searchClassId = 'SolrAuthor';
 
        // Save author searches if next_prev_navigation is enabled - otherwise
        // there are wacky results when trying to page through results (the
        // next/prev links only appear for records which were included in the
        // results for the previous keyword search, and the next/prev links will
        // iterate you through that search).
        $this->saveToHistory = $this->resultScrollerActive();
 
        return parent::resultsAction();
    }
 
    /**
     * Sets the configuration for performing an author search
     *
     * @return mixed
     */
    public function searchAction()
    {
        $this->searchClassId = 'SolrAuthorFacets';
        $this->saveToHistory = false;
        $this->rememberSearch = false;
        return parent::resultsAction();
    }
 
    /**
     * Displays the proper page for a search action
     *
     * @return mixed
     */
     */
    public function onDispatch(MvcEvent $e)
    {
        $routeMatch = $e->getRouteMatch();
        if (! $routeMatch) {
            /**
             * @todo Determine requirements for when route match is missing.
             *       Potentially allow pulling directly from request metadata?
             */
            throw new Exception\DomainException('Missing route matches; unsure how to retrieve action');
        }
 
        $action = $routeMatch->getParam('action', 'not-found');
        $method = static::getMethodFromAction($action);
 
        if (! method_exists($this, $method)) {
            $method = 'notFoundAction';
        }
 
        $actionResponse = $this->$method();
 
        $e->setResult($actionResponse);
 
        return $actionResponse;
    }
}
 
        }
 
        if ($this->sharedManager) {
            foreach ($this->sharedManager->getListeners($this->identifiers, $name) as $priority => $listeners) {
                $listOfListenersByPriority[$priority][] = $listeners;
            }
        }
 
        // Sort by priority in reverse order
        krsort($listOfListenersByPriority);
 
        // Initial value of stop propagation flag should be false
        $event->stopPropagation(false);
 
        // Execute listeners
        $responses = new ResponseCollection();
        foreach ($listOfListenersByPriority as $listOfListeners) {
            foreach ($listOfListeners as $listeners) {
                foreach ($listeners as $listener) {
                    $response = $listener($event);
                    $responses->push($response);
 
                    // If the event was asked to stop propagating, do so
                    if ($event->propagationIsStopped()) {
                        $responses->setStopped(true);
                        return $responses;
                    }
 
                    // If the result causes our validation callback to return true,
                    // stop propagation
                    if ($callback && $callback($response)) {
                        $responses->setStopped(true);
                        return $responses;
                    }
                }
            }
        }
 
        return $responses;
    }
            $event->setParams($argv);
        }
 
        return $this->triggerListeners($event, $callback);
    }
 
    /**
     * @inheritDoc
     */
    public function triggerEvent(EventInterface $event)
    {
        return $this->triggerListeners($event);
    }
 
    /**
     * @inheritDoc
     */
    public function triggerEventUntil(callable $callback, EventInterface $event)
    {
        return $this->triggerListeners($event, $callback);
    }
 
    /**
     * @inheritDoc
     */
    public function attach($eventName, callable $listener, $priority = 1)
    {
        if (! is_string($eventName)) {
            throw new Exception\InvalidArgumentException(sprintf(
                '%s expects a string for the event; received %s',
                __METHOD__,
                (is_object($eventName) ? get_class($eventName) : gettype($eventName))
            ));
        }
 
        $this->events[$eventName][(int) $priority][0][] = $listener;
        return $listener;
    }
 
    /**
     * @param  null|Response $response
     * @return Response|mixed
     */
    public function dispatch(Request $request, Response $response = null)
    {
        $this->request = $request;
        if (! $response) {
            $response = new HttpResponse();
        }
        $this->response = $response;
 
        $e = $this->getEvent();
        $e->setName(MvcEvent::EVENT_DISPATCH);
        $e->setRequest($request);
        $e->setResponse($response);
        $e->setTarget($this);
 
        $result = $this->getEventManager()->triggerEventUntil(function ($test) {
            return ($test instanceof Response);
        }, $e);
 
        if ($result->stopped()) {
            return $result->last();
        }
 
        return $e->getResult();
    }
 
    /**
     * Get request object
     *
     * @return Request
     */
    public function getRequest()
    {
        if (! $this->request) {
            $this->request = new HttpRequest();
        }
 
        return $this->request;
 
        // Allow passing parameters to seed the RouteMatch with & copy matched route name
        if ($params !== null) {
            $routeMatch = new RouteMatch($params);
            $routeMatch->setMatchedRouteName($event->getRouteMatch()->getMatchedRouteName());
            $event->setRouteMatch($routeMatch);
        }
 
        if ($this->numNestedForwards > $this->maxNestedForwards) {
            throw new Exception\DomainException(
                "Circular forwarding detected: greater than $this->maxNestedForwards nested forwards"
            );
        }
        $this->numNestedForwards++;
 
        // Detach listeners that may cause problems during dispatch:
        $sharedEvents = $event->getApplication()->getEventManager()->getSharedManager();
        $listeners = $this->detachProblemListeners($sharedEvents);
 
        $return = $controller->dispatch($event->getRequest(), $event->getResponse());
 
        // If we detached any listeners, reattach them now:
        $this->reattachProblemListeners($sharedEvents, $listeners);
 
        $this->numNestedForwards--;
 
        return $return;
    }
 
    /**
     * Detach problem listeners specified by getListenersToDetach() and return an array of information that will
     * allow them to be reattached.
     *
     * @param  SharedEvents $sharedEvents Shared event manager
     * @return array
     */
    protected function detachProblemListeners(SharedEvents $sharedEvents)
    {
        // Convert the problem list from two-dimensional array to more convenient id => event => class format:
        $formattedProblems = [];
            ->__invoke($msg, $tokens, $default);
    }
 
    /**
     * Convenience method to make invocation of forward() helper less verbose.
     *
     * @param string $controller Controller to invoke
     * @param string $action     Action to invoke
     * @param array  $params     Extra parameters for the RouteMatch object (no
     * need to provide action here, since $action takes care of that)
     *
     * @return mixed
     */
    public function forwardTo($controller, $action, $params = [])
    {
        // Inject action into the RouteMatch parameters
        $params['action'] = $action;
 
        // Dispatch the requested controller/action:
        return $this->forward()->dispatch($controller, $params);
    }
 
    /**
     * Check to see if a form was submitted from its post value
     * Also validate the Captcha, if it's activated
     *
     * @param string $submitElement Name of the post field of the submit button
     * @param bool   $useCaptcha    Are we using captcha in this situation?
     *
     * @return bool
     */
    protected function formWasSubmitted($submitElement = 'submit',
        $useCaptcha = false
    ) {
        // Fail if the expected submission element was missing from the POST:
        // Form was submitted; if CAPTCHA is expected, validate it now.
        return $this->params()->fromPost($submitElement, false)
            && (!$useCaptcha || $this->captcha()->verify());
    }
 
    public function searchAction()
    {
        $this->searchClassId = 'SolrAuthorFacets';
        $this->saveToHistory = false;
        $this->rememberSearch = false;
        return parent::resultsAction();
    }
 
    /**
     * Displays the proper page for a search action
     *
     * @return mixed
     */
    public function homeAction()
    {
        // If an author was requested, forward to the results page; otherwise,
        // display the search form:
        $author = $this->params()->fromQuery('author');
        return !empty($author)
            ? $this->forwardTo('Author', 'Results') : parent::homeAction();
    }
 
    /**
     * Is the result scroller active?
     *
     * @return bool
     */
    protected function resultScrollerActive()
    {
        $config = $this->serviceLocator->get(\VuFind\Config\PluginManager::class)
            ->get('config');
        return isset($config->Record->next_prev_navigation)
            && $config->Record->next_prev_navigation;
    }
}
 
     */
    public function onDispatch(MvcEvent $e)
    {
        $routeMatch = $e->getRouteMatch();
        if (! $routeMatch) {
            /**
             * @todo Determine requirements for when route match is missing.
             *       Potentially allow pulling directly from request metadata?
             */
            throw new Exception\DomainException('Missing route matches; unsure how to retrieve action');
        }
 
        $action = $routeMatch->getParam('action', 'not-found');
        $method = static::getMethodFromAction($action);
 
        if (! method_exists($this, $method)) {
            $method = 'notFoundAction';
        }
 
        $actionResponse = $this->$method();
 
        $e->setResult($actionResponse);
 
        return $actionResponse;
    }
}
 
        }
 
        if ($this->sharedManager) {
            foreach ($this->sharedManager->getListeners($this->identifiers, $name) as $priority => $listeners) {
                $listOfListenersByPriority[$priority][] = $listeners;
            }
        }
 
        // Sort by priority in reverse order
        krsort($listOfListenersByPriority);
 
        // Initial value of stop propagation flag should be false
        $event->stopPropagation(false);
 
        // Execute listeners
        $responses = new ResponseCollection();
        foreach ($listOfListenersByPriority as $listOfListeners) {
            foreach ($listOfListeners as $listeners) {
                foreach ($listeners as $listener) {
                    $response = $listener($event);
                    $responses->push($response);
 
                    // If the event was asked to stop propagating, do so
                    if ($event->propagationIsStopped()) {
                        $responses->setStopped(true);
                        return $responses;
                    }
 
                    // If the result causes our validation callback to return true,
                    // stop propagation
                    if ($callback && $callback($response)) {
                        $responses->setStopped(true);
                        return $responses;
                    }
                }
            }
        }
 
        return $responses;
    }
            $event->setParams($argv);
        }
 
        return $this->triggerListeners($event, $callback);
    }
 
    /**
     * @inheritDoc
     */
    public function triggerEvent(EventInterface $event)
    {
        return $this->triggerListeners($event);
    }
 
    /**
     * @inheritDoc
     */
    public function triggerEventUntil(callable $callback, EventInterface $event)
    {
        return $this->triggerListeners($event, $callback);
    }
 
    /**
     * @inheritDoc
     */
    public function attach($eventName, callable $listener, $priority = 1)
    {
        if (! is_string($eventName)) {
            throw new Exception\InvalidArgumentException(sprintf(
                '%s expects a string for the event; received %s',
                __METHOD__,
                (is_object($eventName) ? get_class($eventName) : gettype($eventName))
            ));
        }
 
        $this->events[$eventName][(int) $priority][0][] = $listener;
        return $listener;
    }
 
    /**
     * @param  null|Response $response
     * @return Response|mixed
     */
    public function dispatch(Request $request, Response $response = null)
    {
        $this->request = $request;
        if (! $response) {
            $response = new HttpResponse();
        }
        $this->response = $response;
 
        $e = $this->getEvent();
        $e->setName(MvcEvent::EVENT_DISPATCH);
        $e->setRequest($request);
        $e->setResponse($response);
        $e->setTarget($this);
 
        $result = $this->getEventManager()->triggerEventUntil(function ($test) {
            return ($test instanceof Response);
        }, $e);
 
        if ($result->stopped()) {
            return $result->last();
        }
 
        return $e->getResult();
    }
 
    /**
     * Get request object
     *
     * @return Request
     */
    public function getRequest()
    {
        if (! $this->request) {
            $this->request = new HttpRequest();
        }
 
        return $this->request;
            );
            return $this->complete($return, $e);
        } catch (\Throwable $exception) {
            $return = $this->marshalBadControllerEvent($controllerName, $e, $application, $exception);
            return $this->complete($return, $e);
        } catch (\Exception $exception) {  // @TODO clean up once PHP 7 requirement is enforced
            $return = $this->marshalBadControllerEvent($controllerName, $e, $application, $exception);
            return $this->complete($return, $e);
        }
 
        if ($controller instanceof InjectApplicationEventInterface) {
            $controller->setEvent($e);
        }
 
        $request  = $e->getRequest();
        $response = $application->getResponse();
        $caughtException = null;
 
        try {
            $return = $controller->dispatch($request, $response);
        } catch (\Throwable $ex) {
            $caughtException = $ex;
        } catch (\Exception $ex) {  // @TODO clean up once PHP 7 requirement is enforced
            $caughtException = $ex;
        }
 
        if ($caughtException !== null) {
            $e->setName(MvcEvent::EVENT_DISPATCH_ERROR);
            $e->setError($application::ERROR_EXCEPTION);
            $e->setController($controllerName);
            $e->setControllerClass(get_class($controller));
            $e->setParam('exception', $caughtException);
 
            $return = $application->getEventManager()->triggerEvent($e)->last();
            if (! $return) {
                $return = $e->getResult();
            }
        }
 
        return $this->complete($return, $e);
        }
 
        if ($this->sharedManager) {
            foreach ($this->sharedManager->getListeners($this->identifiers, $name) as $priority => $listeners) {
                $listOfListenersByPriority[$priority][] = $listeners;
            }
        }
 
        // Sort by priority in reverse order
        krsort($listOfListenersByPriority);
 
        // Initial value of stop propagation flag should be false
        $event->stopPropagation(false);
 
        // Execute listeners
        $responses = new ResponseCollection();
        foreach ($listOfListenersByPriority as $listOfListeners) {
            foreach ($listOfListeners as $listeners) {
                foreach ($listeners as $listener) {
                    $response = $listener($event);
                    $responses->push($response);
 
                    // If the event was asked to stop propagating, do so
                    if ($event->propagationIsStopped()) {
                        $responses->setStopped(true);
                        return $responses;
                    }
 
                    // If the result causes our validation callback to return true,
                    // stop propagation
                    if ($callback && $callback($response)) {
                        $responses->setStopped(true);
                        return $responses;
                    }
                }
            }
        }
 
        return $responses;
    }
            $event->setParams($argv);
        }
 
        return $this->triggerListeners($event, $callback);
    }
 
    /**
     * @inheritDoc
     */
    public function triggerEvent(EventInterface $event)
    {
        return $this->triggerListeners($event);
    }
 
    /**
     * @inheritDoc
     */
    public function triggerEventUntil(callable $callback, EventInterface $event)
    {
        return $this->triggerListeners($event, $callback);
    }
 
    /**
     * @inheritDoc
     */
    public function attach($eventName, callable $listener, $priority = 1)
    {
        if (! is_string($eventName)) {
            throw new Exception\InvalidArgumentException(sprintf(
                '%s expects a string for the event; received %s',
                __METHOD__,
                (is_object($eventName) ? get_class($eventName) : gettype($eventName))
            ));
        }
 
        $this->events[$eventName][(int) $priority][0][] = $listener;
        return $listener;
    }
 
    /**
            $response = $result->last();
            if ($response instanceof ResponseInterface) {
                $event->setName(MvcEvent::EVENT_FINISH);
                $event->setTarget($this);
                $event->setResponse($response);
                $event->stopPropagation(false); // Clear before triggering
                $events->triggerEvent($event);
                $this->response = $response;
                return $this;
            }
        }
 
        if ($event->getError()) {
            return $this->completeRequest($event);
        }
 
        // Trigger dispatch event
        $event->setName(MvcEvent::EVENT_DISPATCH);
        $event->stopPropagation(false); // Clear before triggering
        $result = $events->triggerEventUntil($shortCircuit, $event);
 
        // Complete response
        $response = $result->last();
        if ($response instanceof ResponseInterface) {
            $event->setName(MvcEvent::EVENT_FINISH);
            $event->setTarget($this);
            $event->setResponse($response);
            $event->stopPropagation(false); // Clear before triggering
            $events->triggerEvent($event);
            $this->response = $response;
            return $this;
        }
 
        $response = $this->response;
        $event->setResponse($response);
        return $this->completeRequest($event);
    }
 
    /**
     * Complete the request
$pathParts[] = APPLICATION_PATH . '/vendor';
$pathParts[] = get_include_path();
set_include_path(implode(PATH_SEPARATOR, $pathParts));
 
// Composer autoloading
if (file_exists('vendor/autoload.php')) {
    $loader = include 'vendor/autoload.php';
}
 
if (!class_exists('Laminas\Loader\AutoloaderFactory')) {
    throw new RuntimeException('Unable to load Laminas autoloader.');
}
 
// Run the application!
$app = Laminas\Mvc\Application::init(require 'config/application.config.php');
if (PHP_SAPI === 'cli') {
    return $app->getServiceManager()
        ->get(\VuFindConsole\ConsoleRunner::class)->run();
} else {
    $app->run();
}
 

Environment & details:

Key Value
author "Confederacion Nacional del Trabajo"
type Author
view rss
empty
empty
empty
Key Value
__Laminas Array ( [_REQUEST_ACCESS_TIME] => 1711653640.2245 [_VALID] => Array ( [Laminas\Session\Validator\Id] => g9ct26ub47sdff6feosvlol78m ) )
SessionState Laminas\Stdlib\ArrayObject Object ( [storage:protected] => Array ( [cookiePath] => / ) [flag:protected] => 2 [iteratorClass:protected] => ArrayIterator [protectedProperties:protected] => Array ( [0] => storage [1] => flag [2] => iteratorClass [3] => protectedProperties ) )
Search Laminas\Stdlib\ArrayObject Object ( [storage:protected] => Array ( [last] => /vufind/Author/Home?sort=last_indexed+desc&limit=50&view=rss&author=%22Confederacion+Nacional+del+Trabajo%22&type=Author [params|SolrAuthor|hiddenFilters] => Array ( ) [params|SolrAuthor|limit] => 50 [params|SolrAuthor|sort] => last_indexed desc ) [flag:protected] => 2 [iteratorClass:protected] => ArrayIterator [protectedProperties:protected] => Array ( [0] => storage [1] => flag [2] => iteratorClass [3] => protectedProperties ) )
Key Value
USER www-data
HOME /var/www
SCRIPT_NAME /vufind/index.php
REQUEST_URI /vufind/Author/Home?author=%22Confederacion+Nacional+del+Trabajo%22&type=Author&view=rss
QUERY_STRING author=%22Confederacion+Nacional+del+Trabajo%22&type=Author&view=rss
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/1.1
GATEWAY_INTERFACE CGI/1.1
REDIRECT_QUERY_STRING author=%22Confederacion+Nacional+del+Trabajo%22&type=Author&view=rss
REDIRECT_URL /vufind/Author/Home
REMOTE_PORT 42652
SCRIPT_FILENAME /usr/local/vufind/public/index.php
SERVER_ADMIN [no address given]
CONTEXT_DOCUMENT_ROOT /usr/local/vufind/public
CONTEXT_PREFIX /vufind
REQUEST_SCHEME https
DOCUMENT_ROOT /var/www/vufind
REMOTE_ADDR 44.204.24.82
SERVER_PORT 443
SERVER_ADDR 46.226.109.80
SERVER_NAME www.rebal.info
SERVER_SOFTWARE Apache/2.4.25 (Debian)
SERVER_SIGNATURE <address>Apache/2.4.25 (Debian) Server at www.rebal.info Port 443</address>
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HTTP_HOST www.rebal.info
HTTP_REFERER http://www.rebal.info/vufind/Author/Home?author=%22Confederacion+Nacional+del+Trabajo%22&type=Author&view=rss
HTTP_USER_AGENT claudebot
HTTP_ACCEPT */*
proxy-nokeepalive 1
SSL_TLS_SNI www.rebal.info
HTTPS on
VUFIND_LOCAL_MODULES rebal
VUFIND_LOCAL_DIR /usr/local/vufind/local
VUFIND_ENV development
SCRIPT_URI https://www.rebal.info/vufind/Author/Home
SCRIPT_URL /vufind/Author/Home
REDIRECT_STATUS 200
REDIRECT_SSL_TLS_SNI www.rebal.info
REDIRECT_HTTPS on
REDIRECT_VUFIND_LOCAL_MODULES rebal
REDIRECT_VUFIND_LOCAL_DIR /usr/local/vufind/local
REDIRECT_VUFIND_ENV development
REDIRECT_SCRIPT_URI https://www.rebal.info/vufind/Author/Home
REDIRECT_SCRIPT_URL /vufind/Author/Home
FCGI_ROLE RESPONDER
PHP_SELF /vufind/index.php
REQUEST_TIME_FLOAT 1711653640.202
REQUEST_TIME 1711653640
empty
0. Whoops\Handler\PrettyPageHandler