2026-01-19T05:11:20-05:00 DEBUG: Query: Array
(
    [s.q] => (( coding AND decoding technickaaaern ) OR ( coding AND decoding (technical OR technika) ))
    [s.ps] => 20
    [s.pn] => 1
    [s.ho] => true
    [s.dym] => true
    [s.l] => sk
    [s.ff] => Array
        (
            [0] => Library,and,1,30
            [1] => ContentType,and,1,30
            [2] => Discipline,and,1,30
            [3] => SubjectTerms,and,1,30
            [4] => Language,and,1,30
        )

    [s.rec.topic.max] => 1
    [s.hl] => true
    [s.hs] => {{{{START_HILITE}}}}
    [s.he] => {{{{END_HILITE}}}}
    [s.role] => none
)

2026-01-19T05:11:20-05:00 DEBUG: GET: http://api.summon.serialssolutions.com/2.0.0/search?s.dym=true&s.ff=ContentType%2Cand%2C1%2C30&s.ff=Discipline%2Cand%2C1%2C30&s.ff=Language%2Cand%2C1%2C30&s.ff=Library%2Cand%2C1%2C30&s.ff=SubjectTerms%2Cand%2C1%2C30&s.he=%7B%7B%7B%7BEND_HILITE%7D%7D%7D%7D&s.hl=true&s.ho=true&s.hs=%7B%7B%7B%7BSTART_HILITE%7D%7D%7D%7D&s.l=sk&s.pn=1&s.ps=20&s.q=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29&s.rec.topic.max=1&s.role=none
2026-01-19T05:11:20-05:00 CRIT: VuFindSearch\Backend\Exception\BackendException : HTTP Status 401 – Unauthorized

HTTP Status 401 – Unauthorized


Type Status Report

Message Invalid ID, secret key or client hash

Description The request has not been applied because it lacks valid authentication credentials for the target resource.


Apache Tomcat/9.0.48

; SerialsSolutions_Summon_Exception : HTTP Status 401 – Unauthorized

HTTP Status 401 – Unauthorized


Type Status Report

Message Invalid ID, secret key or client hash

Description The request has not been applied because it lacks valid authentication credentials for the target resource.


Apache Tomcat/9.0.48

Server Context: Array ( [REDIRECT_SCRIPT_URL] => /vufind/Summon/Search [REDIRECT_SCRIPT_URI] => https://ersearch2.cvtisr.sk/vufind/Summon/Search [REDIRECT_VUFIND_ENV] => development [REDIRECT_VUFIND_LOCAL_DIR] => /usr/local/vufind/local [REDIRECT_VUFIND_LOCAL_MODULES] => cvti [REDIRECT_Shib-Handler] => https://ersearch2.cvtisr.sk/Shibboleth.sso [REDIRECT_HTTPS] => on [REDIRECT_STATUS] => 200 [SCRIPT_URL] => /vufind/Summon/Search [SCRIPT_URI] => https://ersearch2.cvtisr.sk/vufind/Summon/Search [VUFIND_ENV] => development [VUFIND_LOCAL_DIR] => /usr/local/vufind/local [VUFIND_LOCAL_MODULES] => cvti [Shib-Handler] => https://ersearch2.cvtisr.sk/Shibboleth.sso [HTTPS] => on [SSL_SERVER_S_DN_C] => SK [SSL_SERVER_S_DN_ST] => SK [SSL_SERVER_S_DN_L] => Bratislava [SSL_SERVER_S_DN_O] => CVTISR [SSL_SERVER_S_DN_OU] => OIT [SSL_SERVER_S_DN_CN] => ersearch2.cvtisr.sk [SSL_SERVER_S_DN_Email] => dctech@cvtisr.sk [SSL_SERVER_I_DN_C] => SK [SSL_SERVER_I_DN_ST] => SK [SSL_SERVER_I_DN_L] => Bratislava [SSL_SERVER_I_DN_O] => CVTISR [SSL_SERVER_I_DN_OU] => OIT [SSL_SERVER_I_DN_CN] => ersearch2.cvtisr.sk [SSL_SERVER_I_DN_Email] => dctech@cvtisr.sk [SSL_VERSION_INTERFACE] => mod_ssl/2.4.58 [SSL_VERSION_LIBRARY] => OpenSSL/3.0.13 [SSL_PROTOCOL] => TLSv1.2 [SSL_SECURE_RENEG] => true [SSL_COMPRESS_METHOD] => NULL [SSL_CIPHER] => ECDHE-RSA-AES128-SHA [SSL_CIPHER_EXPORT] => false [SSL_CIPHER_USEKEYSIZE] => 128 [SSL_CIPHER_ALGKEYSIZE] => 128 [SSL_CLIENT_VERIFY] => NONE [SSL_SERVER_M_VERSION] => 3 [SSL_SERVER_M_SERIAL] => 03644DBC2D568C50CB99DFD4469EA780EF2DECC3 [SSL_SERVER_V_START] => Jan 31 13:41:57 2025 GMT [SSL_SERVER_V_END] => Jan 31 13:41:57 2026 GMT [SSL_SERVER_S_DN] => emailAddress=dctech@cvtisr.sk,CN=ersearch2.cvtisr.sk,OU=OIT,O=CVTISR,L=Bratislava,ST=SK,C=SK [SSL_SERVER_I_DN] => emailAddress=dctech@cvtisr.sk,CN=ersearch2.cvtisr.sk,OU=OIT,O=CVTISR,L=Bratislava,ST=SK,C=SK [SSL_SERVER_A_KEY] => rsaEncryption [SSL_SERVER_A_SIG] => sha256WithRSAEncryption [SSL_SESSION_ID] => d40e85294276208ecf4e7edbcaebb214bb5cd9a900c76850a7add2e79b5035cf [SSL_SESSION_RESUMED] => Initial [HTTP_ACCEPT] => */* [HTTP_USER_AGENT] => Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) [HTTP_COOKIE] => ui=standard; VUFIND_SESSION=6e1t3b3t71uj75h1s2lkvoilia; language=cs [HTTP_ACCEPT_ENCODING] => gzip, br, zstd, deflate [HTTP_HOST] => ersearch2.cvtisr.sk [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/snap/bin [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache [SERVER_NAME] => ersearch2.cvtisr.sk [SERVER_ADDR] => 10.21.154.12 [SERVER_PORT] => 443 [REMOTE_ADDR] => 10.23.50.154 [DOCUMENT_ROOT] => /var/www/html [REQUEST_SCHEME] => https [CONTEXT_PREFIX] => /vufind [CONTEXT_DOCUMENT_ROOT] => /usr/local/vufind/public [SERVER_ADMIN] => webmaster@localhost [SCRIPT_FILENAME] => /usr/local/vufind/public/index.php [REMOTE_PORT] => 30944 [REMOTE_USER] => [REDIRECT_URL] => /vufind/Summon/Search [REDIRECT_QUERY_STRING] => lng=sk&lookfor=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => lng=sk&lookfor=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29 [REQUEST_URI] => /vufind/Summon/Search?lng=sk&lookfor=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29 [SCRIPT_NAME] => /vufind/index.php [PHP_SELF] => /vufind/index.php [PHP_AUTH_USER] => [REQUEST_TIME_FLOAT] => 1768817480.3181 [REQUEST_TIME] => 1768817480 ) Backtrace: unlisted file line unlisted - class = VuFindSearch\Backend\Summon\Backend, function = search, args: none. /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Command/CallMethodCommand.php line 137 - function = call_user_func, args: none. /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Service.php line 106 - class = VuFindSearch\Command\CallMethodCommand, function = execute, args: none. /usr/local/vufind/module/VuFind/src/VuFind/Search/Summon/Results.php line 103 - class = VuFindSearch\Service, function = invoke, args: none. /usr/local/vufind/module/VuFind/src/VuFind/Search/Base/Results.php line 320 - class = VuFind\Search\Summon\Results, function = performSearch, args: none. /usr/local/vufind/module/VuFind/src/VuFind/Search/SearchRunner.php line 153 - class = VuFind\Search\Base\Results, function = performAndProcessSearch, args: none. /usr/local/vufind/module/VuFind/src/VuFind/Controller/AbstractSearch.php line 378 - class = VuFind\Search\SearchRunner, function = run, args: none. /usr/local/vufind/module/VuFind/src/VuFind/Controller/AbstractSearch.php line 306 - class = VuFind\Controller\AbstractSearch, function = getSearchResultsView, args: none. /usr/local/vufind/module/VuFind/src/VuFind/Controller/SummonController.php line 136 - class = VuFind\Controller\AbstractSearch, function = resultsAction, args: none. /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php line 72 - class = VuFind\Controller\SummonController, function = searchAction, args: none. /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php line 319 - class = Laminas\Mvc\Controller\AbstractActionController, function = onDispatch, args: none. /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php line 177 - class = Laminas\EventManager\EventManager, function = triggerListeners, args: none. /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractController.php line 105 - class = Laminas\EventManager\EventManager, function = triggerEventUntil, args: none. /usr/local/vufind/vendor/laminas/laminas-mvc/src/DispatchListener.php line 117 - class = Laminas\Mvc\Controller\AbstractController, function = dispatch, args: none. /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php line 319 - class = Laminas\Mvc\DispatchListener, function = onDispatch, args: none. /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php line 177 - class = Laminas\EventManager\EventManager, function = triggerListeners, args: none. /usr/local/vufind/vendor/laminas/laminas-mvc/src/Application.php line 319 - class = Laminas\EventManager\EventManager, function = triggerEventUntil, args: none. /usr/local/vufind/public/index.php line 23 - class = Laminas\Mvc\Application, function = run, args: none.
Whoops! There was an error.
VuFindSearch \ Backend \ Exception \ BackendException
<!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid ID, secret key or client hash</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.48</h3></body></html>
Previous exceptions
  • <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid ID, secret key or client hash</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.48</h3></body></html> (0)
VuFindSearch\Backend\Exception\BackendException thrown with message "<!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid ID, secret key or client hash</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.48</h3></body></html>" Stacktrace: #22 VuFindSearch\Backend\Exception\BackendException in /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php:120 #21 SerialsSolutions_Summon_Exception in /usr/local/vufind/vendor/serialssolutions/summon/SerialsSolutions/Summon/Laminas.php:155 #20 SerialsSolutions\Summon\Laminas:httpRequest in /usr/local/vufind/vendor/serialssolutions/summon/SerialsSolutions/Summon/Base.php:261 #19 SerialsSolutions_Summon_Base:call in /usr/local/vufind/vendor/serialssolutions/summon/SerialsSolutions/Summon/Base.php:198 #18 SerialsSolutions_Summon_Base:query in /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php:118 #17 VuFindSearch\Backend\Summon\Backend:search in /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Command/CallMethodCommand.php:137 #16 call_user_func in /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Command/CallMethodCommand.php:137 #15 VuFindSearch\Command\CallMethodCommand:execute in /usr/local/vufind/module/VuFindSearch/src/VuFindSearch/Service.php:106 #14 VuFindSearch\Service:invoke in /usr/local/vufind/module/VuFind/src/VuFind/Search/Summon/Results.php:103 #13 VuFind\Search\Summon\Results:performSearch in /usr/local/vufind/module/VuFind/src/VuFind/Search/Base/Results.php:320 #12 VuFind\Search\Base\Results:performAndProcessSearch in /usr/local/vufind/module/VuFind/src/VuFind/Search/SearchRunner.php:153 #11 VuFind\Search\SearchRunner:run in /usr/local/vufind/module/VuFind/src/VuFind/Controller/AbstractSearch.php:378 #10 VuFind\Controller\AbstractSearch:getSearchResultsView in /usr/local/vufind/module/VuFind/src/VuFind/Controller/AbstractSearch.php:306 #9 VuFind\Controller\AbstractSearch:resultsAction in /usr/local/vufind/module/VuFind/src/VuFind/Controller/SummonController.php:136 #8 VuFind\Controller\SummonController:searchAction in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php:72 #7 Laminas\Mvc\Controller\AbstractActionController:onDispatch in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:319 #6 Laminas\EventManager\EventManager:triggerListeners in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:177 #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:117 #3 Laminas\Mvc\DispatchListener:onDispatch in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:319 #2 Laminas\EventManager\EventManager:triggerListeners in /usr/local/vufind/vendor/laminas/laminas-eventmanager/src/EventManager.php:177 #1 Laminas\EventManager\EventManager:triggerEventUntil in /usr/local/vufind/vendor/laminas/laminas-mvc/src/Application.php:319 #0 Laminas\Mvc\Application:run in /usr/local/vufind/public/index.php:23
22
VuFindSearch\Backend\Exception\BackendException
/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php120
21
SerialsSolutions_Summon_Exception
/vendor/serialssolutions/summon/SerialsSolutions/Summon/Laminas.php155
20
SerialsSolutions\Summon\Laminas httpRequest
/vendor/serialssolutions/summon/SerialsSolutions/Summon/Base.php261
19
SerialsSolutions_Summon_Base call
/vendor/serialssolutions/summon/SerialsSolutions/Summon/Base.php198
18
SerialsSolutions_Summon_Base query
/module/VuFindSearch/src/VuFindSearch/Backend/Summon/Backend.php118
17
VuFindSearch\Backend\Summon\Backend search
/module/VuFindSearch/src/VuFindSearch/Command/CallMethodCommand.php137
16
call_user_func
/module/VuFindSearch/src/VuFindSearch/Command/CallMethodCommand.php137
15
VuFindSearch\Command\CallMethodCommand execute
/module/VuFindSearch/src/VuFindSearch/Service.php106
14
VuFindSearch\Service invoke
/module/VuFind/src/VuFind/Search/Summon/Results.php103
13
VuFind\Search\Summon\Results performSearch
/module/VuFind/src/VuFind/Search/Base/Results.php320
12
VuFind\Search\Base\Results performAndProcessSearch
/module/VuFind/src/VuFind/Search/SearchRunner.php153
11
VuFind\Search\SearchRunner run
/module/VuFind/src/VuFind/Controller/AbstractSearch.php378
10
VuFind\Controller\AbstractSearch getSearchResultsView
/module/VuFind/src/VuFind/Controller/AbstractSearch.php306
9
VuFind\Controller\AbstractSearch resultsAction
/module/VuFind/src/VuFind/Controller/SummonController.php136
8
VuFind\Controller\SummonController searchAction
/vendor/laminas/laminas-mvc/src/Controller/AbstractActionController.php72
7
Laminas\Mvc\Controller\AbstractActionController onDispatch
/vendor/laminas/laminas-eventmanager/src/EventManager.php319
6
Laminas\EventManager\EventManager triggerListeners
/vendor/laminas/laminas-eventmanager/src/EventManager.php177
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.php117
3
Laminas\Mvc\DispatchListener onDispatch
/vendor/laminas/laminas-eventmanager/src/EventManager.php319
2
Laminas\EventManager\EventManager triggerListeners
/vendor/laminas/laminas-eventmanager/src/EventManager.php177
1
Laminas\EventManager\EventManager triggerEventUntil
/vendor/laminas/laminas-mvc/src/Application.php319
0
Laminas\Mvc\Application run
/public/index.php23
     */
    public function search(
        AbstractQuery $query,
        $offset,
        $limit,
        ParamBag $params = null
    ) {
        $baseParams = $this->getQueryBuilder()->build($query);
        if (null !== $params) {
            $baseParams->mergeWith($params);
        }
        $baseParams->set('pageSize', $limit);
        $page = $limit > 0 ? floor($offset / $limit) + 1 : 1;
        $baseParams->set('pageNumber', $page);
 
        $summonQuery = $this->paramBagToSummonQuery($baseParams);
        try {
            $response = $this->connector->query($summonQuery);
        } catch (SummonException $e) {
            throw new BackendException(
                $e->getMessage(),
                $e->getCode(),
                $e
            );
        }
        $collection = $this->createRecordCollection($response);
        $this->injectSourceIdentifier($collection);
        return $collection;
    }
 
    /**
     * Retrieve a single document.
     *
     * @param string   $id     Document identifier
     * @param ParamBag $params Search backend parameters
     *
     * @return RecordCollectionInterface
     * @throws RecordMissingException
     */
    public function retrieve($id, ParamBag $params = null)
Arguments
  1. "<!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid ID, secret key or client hash</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.48</h3></body></html>"
    
        $this->debugPrint(
            "{$method}: {$baseUrl}?{$queryString}"
        );
 
        $this->client->resetParameters();
        if ($method == 'GET') {
            $baseUrl .= '?' . $queryString;
        } elseif ($method == 'POST') {
            $this->client->setRawBody(
                $queryString, 'application/x-www-form-urlencoded'
            );
        }
 
        $this->client->setHeaders($headers);
 
        // Send Request
        $this->client->setUri($baseUrl);
        $result = $this->client->setMethod($method)->send();
        if (!$result->isSuccess()) {
            throw new SerialsSolutions_Summon_Exception($result->getBody());
        }
        return $result->getBody();
    }
}
 
Arguments
  1. "<!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid ID, secret key or client hash</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.48</h3></body></html>"
    
Exception message: <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid ID, secret key or client hash</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.48</h3></body></html>
        }
        asort($query);
        $queryString = implode('&', $query);
 
        // Build Authorization Headers
        $headers = array(
            'Accept' => 'application/'.$this->responseType,
            'x-summon-date' => gmdate('D, d M Y H:i:s T'),
            'Host' => 'api.summon.serialssolutions.com'
        );
        $data = implode("\n", $headers) . "\n/$this->version/$service\n" .
            urldecode($queryString) . "\n";
        $hmacHash = $this->hmacsha1($this->apiKey, $data);
        $headers['Authorization'] = "Summon $this->apiId;$hmacHash";
        if ($this->sessionId) {
            $headers['x-summon-session-id'] = $this->sessionId;
        }
 
        // Send request
        $result = $this->httpRequest($baseUrl, $method, $queryString, $headers);
        if (!$raw) {
            // Process response
            $result = $this->process($result); 
        }
        return $result;
    }
 
    /**
     * Perform normalization and analysis of Summon return value.
     *
     * @param array $input The raw response from Summon
     *
     * @throws SerialsSolutions_Summon_Exception
     * @return array       The processed response from Summon
     */
    protected function process($input)
    {
        if ($this->responseType !== "json") {
            return $input;
        }
        // Query String Parameters
        $options = $query->getOptionsArray();
        $options['s.role'] = $this->authedUser ? 'authenticated' : 'none';
 
        // Special case -- if user filtered down to newspapers AND excluded them,
        // we can't possibly have any results:
        if (isset($options['s.fvf']) && is_array($options['s.fvf'])
            && in_array('ContentType,Newspaper Article,true', $options['s.fvf'])
            && in_array('ContentType,Newspaper Article', $options['s.fvf'])
        ) {
            return array(
                'recordCount' => 0,
                'documents' => array()
            );
        }
 
        $this->debugPrint('Query: ' . print_r($options, true));
 
        try {
            $result = $this->call($options, 'search', 'GET', $raw);
        } catch (SerialsSolutions_Summon_Exception $e) {
            if ($returnErr) {
                return array(
                    'recordCount' => 0,
                    'documents' => array(),
                    'errors' => $e->getMessage()
                );
            } else {
                $this->handleFatalError($e);
            }
        }
 
        return $result;
    }
 
    /**
     * Submit REST Request
     *
     * @param array  $params  An array of parameters for the request
     * @param string $service The API Service to call
     *
     * @return RecordCollectionInterface
     */
    public function search(
        AbstractQuery $query,
        $offset,
        $limit,
        ParamBag $params = null
    ) {
        $baseParams = $this->getQueryBuilder()->build($query);
        if (null !== $params) {
            $baseParams->mergeWith($params);
        }
        $baseParams->set('pageSize', $limit);
        $page = $limit > 0 ? floor($offset / $limit) + 1 : 1;
        $baseParams->set('pageNumber', $page);
 
        $summonQuery = $this->paramBagToSummonQuery($baseParams);
        try {
            $response = $this->connector->query($summonQuery);
        } catch (SummonException $e) {
            throw new BackendException(
                $e->getMessage(),
                $e->getCode(),
                $e
            );
        }
        $collection = $this->createRecordCollection($response);
        $this->injectSourceIdentifier($collection);
        return $collection;
    }
 
    /**
     * Retrieve a single document.
     *
     * @param string   $id     Document identifier
     * @param ParamBag $params Search backend parameters
     *
     * @return RecordCollectionInterface
     * @throws RecordMissingException
     *
     * @return CommandInterface Command instance for method chaining
     */
    public function execute(BackendInterface $backend): CommandInterface
    {
        $this->validateBackend($backend);
        if (
            !($backend instanceof $this->interface)
            || !method_exists($this->interface, $this->method)
        ) {
            throw new BackendException(
                "$this->backendId does not support $this->method()"
            );
        }
        $args = $this->getArguments();
        if ($backend instanceof ExtraRequestDetailsInterface) {
            $backend->resetExtraRequestDetails();
        }
        $this->finalizeExecution(
            call_user_func([$backend, $this->method], ...$args)
        );
        if ($backend instanceof ExtraRequestDetailsInterface) {
            $this->extraRequestDetails = $backend->getExtraRequestDetails();
        }
        return $this;
    }
}
 
     *
     * @return CommandInterface Command instance for method chaining
     */
    public function execute(BackendInterface $backend): CommandInterface
    {
        $this->validateBackend($backend);
        if (
            !($backend instanceof $this->interface)
            || !method_exists($this->interface, $this->method)
        ) {
            throw new BackendException(
                "$this->backendId does not support $this->method()"
            );
        }
        $args = $this->getArguments();
        if ($backend instanceof ExtraRequestDetailsInterface) {
            $backend->resetExtraRequestDetails();
        }
        $this->finalizeExecution(
            call_user_func([$backend, $this->method], ...$args)
        );
        if ($backend instanceof ExtraRequestDetailsInterface) {
            $this->extraRequestDetails = $backend->getExtraRequestDetails();
        }
        return $this;
    }
}
 
    }
 
    /**
     * Invoke a command.
     *
     * @param CommandInterface $command Command
     *
     * @return CommandInterface
     */
    public function invoke(CommandInterface $command)
    {
        // The backend instance is no longer added as an event parameter.
        // All other legacy event parameters are accessible via the command object.
        $args = ['command' => $command];
 
        $backend = $this->resolve($command->getTargetIdentifier(), $args);
 
        $this->triggerPre($this, $args);
        try {
            $command->execute($backend);
        } catch (BackendException $e) {
            $args['error'] = $e;
            $this->triggerError($this, $args);
            throw $e;
        }
        $this->triggerPost($this, $args);
 
        return $command;
    }
 
    /**
     * Resolve a backend.
     *
     * @param string            $backendId Backend name
     * @param array|ArrayAccess $args      Service function arguments
     *
     * @return BackendInterface
     *
     * @throws Exception\RuntimeException Unable to resolve backend
     */
     * Support method for performAndProcessSearch -- perform a search based on the
     * parameters passed to the object.
     *
     * @return void
     */
    protected function performSearch()
    {
        $query  = $this->getParams()->getQuery();
        $limit  = $this->getParams()->getLimit();
        $offset = $this->getStartRecord() - 1;
        $params = $this->getParams()->getBackendParameters();
        $command = new SearchCommand(
            $this->backendId,
            $query,
            $offset,
            $limit,
            $params
        );
        $collection = $this->getSearchService()
            ->invoke($command)->getResult();
        $this->responseFacets = $collection->getFacets();
        $this->resultTotal = $collection->getTotal();
 
        // Process spelling suggestions if enabled (note that we need this
        // check here because sometimes the Summon API returns suggestions
        // even when the spelling parameter is set to false).
        if ($this->getOptions()->spellcheckEnabled()) {
            $spellcheck = $collection->getSpellcheck();
            $this->processSpelling($spellcheck);
        }
 
        // Get best bets and database recommendations.
        $this->bestBets = $collection->getBestBets();
        $this->databaseRecommendations = $collection->getDatabaseRecommendations();
        $this->topicRecommendations = $collection->getTopicRecommendations();
 
        // Add fake date facets if flagged earlier; this is necessary in order
        // to display the date range facet control in the interface.
        $dateFacets = $this->getParams()->getDateFacetSettings();
        if (!empty($dateFacets)) {
    }
 
    /**
     * Actually execute the search.
     *
     * @return void
     */
    public function performAndProcessSearch()
    {
        // Initialize variables to defaults (to ensure they don't stay null
        // and cause unnecessary repeat processing):
        // The value of -1 indicates that resultTotal is not available.
        $this->resultTotal = -1;
        $this->results = [];
        $this->suggestions = [];
        $this->errors = [];
 
        // Run the search:
        $this->startQueryTimer();
        $this->performSearch();
        $this->stopQueryTimer();
    }
 
    /**
     * Returns the stored list of facets for the last search
     *
     * @param array $filter Array of field => on-screen description listing
     * all of the desired facet fields; set to null to get all configured values.
     *
     * @return array        Facets data arrays
     */
    abstract public function getFacetList($filter = null);
 
    /**
     * Abstract support method for performAndProcessSearch -- perform a search based
     * on the parameters passed to the object. This method is responsible for
     * filling in all of the key class properties: results, resultTotal, etc.
     *
     * @return void
     */
        $params->setLastView($lastView);
        $params->initFromRequest($request);
 
        if (is_callable($setupCallback)) {
            $setupCallback($this, $params, $runningSearchId);
        }
 
        // Trigger the "configuration done" event.
        $this->getEventManager()->trigger(
            self::EVENT_CONFIGURED,
            $this,
            compact('params', 'request', 'runningSearchId')
        );
 
        // Attempt to perform the search; if there is a problem, inspect any Solr
        // exceptions to see if we should communicate to the user about them.
        try {
            // Explicitly execute search within controller -- this allows us to
            // catch exceptions more reliably:
            $results->performAndProcessSearch();
        } catch (\VuFindSearch\Backend\Exception\BackendException $e) {
            if ($e->hasTag(ErrorListener::TAG_PARSER_ERROR)) {
                // We need to create and process an "empty results" object to
                // ensure that recommendation modules and templates behave
                // properly when displaying the error message.
                $results = $this->resultsManager->get('EmptySet');
                $results->setParams($params);
                $results->performAndProcessSearch();
            } else {
                throw $e;
            }
        }
 
        // Trigger the "search completed" event.
        $this->getEventManager()->trigger(
            self::EVENT_COMPLETE,
            $this,
            compact('results', 'runningSearchId')
        );
 
        $view->multiFacetsSelection = (bool)($config->Results_Settings->multiFacetsSelection ?? false);
        $extraErrors = [];
 
        // Handle saved search requests:
        $savedId = $this->params()->fromQuery('saved', false);
        if ($savedId !== false) {
            return $this->redirectToSavedSearch($savedId);
        }
 
        $runner = $this->getService(\VuFind\Search\SearchRunner::class);
 
        // Send both GET and POST variables to search class:
        $request = $this->getRequest()->getQuery()->toArray()
            + $this->getRequest()->getPost()->toArray();
        $view->request = $request;
 
        $lastView = $this->getSearchMemory()
            ->retrieveLastSetting($this->searchClassId, 'view');
        try {
            $view->results = $results = $runner->run(
                $request,
                $this->searchClassId,
                $setupCallback ?: $this->getSearchSetupCallback(),
                $lastView
            );
        } catch (\VuFindSearch\Backend\Exception\DeepPagingException $e) {
            return $this->redirectToLegalSearchPage($request, $e->getLegalPage());
        }
        $view->params = $params = $results->getParams();
 
        // For page parameter being out of results list, we want to redirect to correct page
        $page = $params->getPage();
        $totalResults = $results->getResultTotal();
        $limit = $params->getLimit();
        $lastPage = $limit ? ceil($totalResults / $limit) : 1;
        if ($totalResults > 0 && $page > $lastPage) {
            $queryParams = $request;
            $queryParams['page'] = $lastPage;
            return $this->redirect()->toRoute('search-results', [], [ 'query' => $queryParams ]);
        }
            throw new \Exception('Unrecoverable deep paging error.');
        }
        $request['page'] = $page;
        $this->flashMessenger()->addErrorMessage(
            [
                'msg' => 'deep_paging_failure',
                'tokens' => ['%%page%%' => $page],
            ]
        );
        return $this->redirect()->toUrl('?' . http_build_query($request));
    }
 
    /**
     * Send search results to results view
     *
     * @return Response|ViewModel
     */
    public function resultsAction()
    {
        return $this->getSearchResultsView();
    }
 
    /**
     * Support method for getSearchResultsView() -- return the search results
     * reformatted as an RSS feed.
     *
     * @param $view ViewModel View model
     *
     * @return Response
     */
    protected function getRssSearchResponse(ViewModel $view): Response
    {
        // Build the RSS feed:
        $feedHelper = $this->getViewRenderer()->plugin('resultfeed');
        $feed = $feedHelper($view->results);
        $writer = new \Laminas\Feed\Writer\Renderer\Feed\Rss($feed);
        $writer->render();
 
        // Apply XSLT if we can find a relevant file:
        $themeInfo = $this->getService(\VuFindTheme\ThemeInfo::class);
        if (isset($specialFacets['checkboxes'])) {
            $view->checkboxFacets = $this->processAdvancedCheckboxes(
                $specialFacets['checkboxes'],
                $view->saved
            );
        }
        $view->ranges = $this
            ->getAllRangeSettings($specialFacets, $view->saved, 'Summon');
 
        return $view;
    }
 
    /**
     * Search action -- call standard results action
     *
     * @return mixed
     */
    public function searchAction()
    {
        return $this->resultsAction();
    }
 
    /**
     * Process the facets to be used as limits on the Advanced Search screen.
     *
     * @param array  $facetList    The advanced facet values
     * @param object $searchObject Saved search object (false if none)
     *
     * @return array               Sorted facets, with selected values flagged.
     */
    protected function processAdvancedFacets($facetList, $searchObject = false)
    {
        // Process the facets, assuming they came back
        foreach ($facetList as $facet => $list) {
            foreach ($list['list'] as $key => $value) {
                // Build the filter string for the URL:
                $fullFilter = ($value['operator'] == 'OR' ? '~' : '')
                    . $facet . ':"' . $value['value'] . '"';
 
                // If we haven't already found a selected facet and the current
     */
    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 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__,
                get_debug_type($eventName),
            ));
        }
 
        $this->events[$eventName][(int) $priority][0][] = $listener;
        return $listener;
    }
 
    /**
     * @events dispatch.pre, dispatch.post
     * @param  Request $request
     * @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(static fn($test): bool => $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($controller::class);
            $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__,
                get_debug_type($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
$vufindProfiler = getenv('VUFIND_PROFILER_XHPROF');
if (!empty($vufindProfiler)) {
    include __DIR__ . '/../module/VuFind/functions/profiler.php';
    enableVuFindProfiling($vufindProfiler);
}
 
// Run the application!
$app = include __DIR__ . '/../config/application.php';
if (PHP_SAPI === 'cli') {
    return $app->getServiceManager()
        ->get(\VuFindConsole\ConsoleRunner::class)->run();
} else {
    // Setup remote code coverage if enabled:
    if (getenv('VUFIND_CODE_COVERAGE')) {
        $modules = $app->getServiceManager()
            ->get(\Laminas\ModuleManager\ModuleManager::class)->getModules();
        include __DIR__ . '/../module/VuFind/functions/codecoverage.php';
        setupVuFindRemoteCodeCoverage($modules);
    }
    $app->run();
}
 

Environment & details:

Key Value
lng
"sk"
lookfor
"(( coding AND decoding technickaaaern ) OR ( coding AND decoding (technical OR technika) ))"
empty
empty
Key Value
ui
"standard"
VUFIND_SESSION
"6e1t3b3t71uj75h1s2lkvoilia"
language
"cs"
Key Value
__Laminas
array:3 [
  "_REQUEST_ACCESS_TIME" => 1768817480.3344
  "_VALID" => array:1 [
    "Laminas\Session\Validator\Id" => "6e1t3b3t71uj75h1s2lkvoilia"
  ]
  "FlashMessenger" => array:1 [
    "EXPIRE_HOPS" => array:2 [
      "hops" => 0
      "ts" => 1768817475.3302
    ]
  ]
]
SessionState
Laminas\Stdlib\ArrayObject {#935}
Search
Laminas\Stdlib\ArrayObject {#936}
ResultScroller
Laminas\Stdlib\ArrayObject {#937}
FlashMessenger
Laminas\Stdlib\ArrayObject {#939}
SessionHelper
Laminas\Stdlib\ArrayObject {#940}
Key Value
REDIRECT_SCRIPT_URL
"/vufind/Summon/Search"
REDIRECT_SCRIPT_URI
"https://ersearch2.cvtisr.sk/vufind/Summon/Search"
REDIRECT_VUFIND_ENV
"development"
REDIRECT_VUFIND_LOCAL_DIR
"/usr/local/vufind/local"
REDIRECT_VUFIND_LOCAL_MODULES
"cvti"
REDIRECT_Shib-Handler
"https://ersearch2.cvtisr.sk/Shibboleth.sso"
REDIRECT_HTTPS
"on"
REDIRECT_STATUS
"200"
SCRIPT_URL
"/vufind/Summon/Search"
SCRIPT_URI
"https://ersearch2.cvtisr.sk/vufind/Summon/Search"
VUFIND_ENV
"development"
VUFIND_LOCAL_DIR
"/usr/local/vufind/local"
VUFIND_LOCAL_MODULES
"cvti"
Shib-Handler
"https://ersearch2.cvtisr.sk/Shibboleth.sso"
HTTPS
"on"
SSL_SERVER_S_DN_C
"SK"
SSL_SERVER_S_DN_ST
"SK"
SSL_SERVER_S_DN_L
"Bratislava"
SSL_SERVER_S_DN_O
"CVTISR"
SSL_SERVER_S_DN_OU
"OIT"
SSL_SERVER_S_DN_CN
"ersearch2.cvtisr.sk"
SSL_SERVER_S_DN_Email
"dctech@cvtisr.sk"
SSL_SERVER_I_DN_C
"SK"
SSL_SERVER_I_DN_ST
"SK"
SSL_SERVER_I_DN_L
"Bratislava"
SSL_SERVER_I_DN_O
"CVTISR"
SSL_SERVER_I_DN_OU
"OIT"
SSL_SERVER_I_DN_CN
"ersearch2.cvtisr.sk"
SSL_SERVER_I_DN_Email
"dctech@cvtisr.sk"
SSL_VERSION_INTERFACE
"mod_ssl/2.4.58"
SSL_VERSION_LIBRARY
"OpenSSL/3.0.13"
SSL_PROTOCOL
"TLSv1.2"
SSL_SECURE_RENEG
"true"
SSL_COMPRESS_METHOD
"NULL"
SSL_CIPHER
"ECDHE-RSA-AES128-SHA"
SSL_CIPHER_EXPORT
"false"
SSL_CIPHER_USEKEYSIZE
"128"
SSL_CIPHER_ALGKEYSIZE
"128"
SSL_CLIENT_VERIFY
"NONE"
SSL_SERVER_M_VERSION
"3"
SSL_SERVER_M_SERIAL
"03644DBC2D568C50CB99DFD4469EA780EF2DECC3"
SSL_SERVER_V_START
"Jan 31 13:41:57 2025 GMT"
SSL_SERVER_V_END
"Jan 31 13:41:57 2026 GMT"
SSL_SERVER_S_DN
"emailAddress=dctech@cvtisr.sk,CN=ersearch2.cvtisr.sk,OU=OIT,O=CVTISR,L=Bratislava,ST=SK,C=SK"
SSL_SERVER_I_DN
"emailAddress=dctech@cvtisr.sk,CN=ersearch2.cvtisr.sk,OU=OIT,O=CVTISR,L=Bratislava,ST=SK,C=SK"
SSL_SERVER_A_KEY
"rsaEncryption"
SSL_SERVER_A_SIG
"sha256WithRSAEncryption"
SSL_SESSION_ID
"d40e85294276208ecf4e7edbcaebb214bb5cd9a900c76850a7add2e79b5035cf"
SSL_SESSION_RESUMED
"Initial"
HTTP_ACCEPT
"*/*"
HTTP_USER_AGENT
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
HTTP_COOKIE
"ui=standard; VUFIND_SESSION=6e1t3b3t71uj75h1s2lkvoilia; language=cs"
HTTP_ACCEPT_ENCODING
"gzip, br, zstd, deflate"
HTTP_HOST
"ersearch2.cvtisr.sk"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/snap/bin"
SERVER_SIGNATURE
""
SERVER_SOFTWARE
"Apache"
SERVER_NAME
"ersearch2.cvtisr.sk"
SERVER_ADDR
"10.21.154.12"
SERVER_PORT
"443"
REMOTE_ADDR
"10.23.50.154"
DOCUMENT_ROOT
"/var/www/html"
REQUEST_SCHEME
"https"
CONTEXT_PREFIX
"/vufind"
CONTEXT_DOCUMENT_ROOT
"/usr/local/vufind/public"
SERVER_ADMIN
"webmaster@localhost"
SCRIPT_FILENAME
"/usr/local/vufind/public/index.php"
REMOTE_PORT
"30944"
REMOTE_USER
""
REDIRECT_URL
"/vufind/Summon/Search"
REDIRECT_QUERY_STRING
"lng=sk&lookfor=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29"
GATEWAY_INTERFACE
"CGI/1.1"
SERVER_PROTOCOL
"HTTP/1.1"
REQUEST_METHOD
"GET"
QUERY_STRING
"lng=sk&lookfor=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29"
REQUEST_URI
"/vufind/Summon/Search?lng=sk&lookfor=%28%28+coding+AND+decoding+technickaaaern+%29+OR+%28+coding+AND+decoding+%28technical+OR+technika%29+%29%29"
SCRIPT_NAME
"/vufind/index.php"
PHP_SELF
"/vufind/index.php"
PHP_AUTH_USER
""
REQUEST_TIME_FLOAT
1768817480.3181
REQUEST_TIME
1768817480
empty
0. Whoops\Handler\PrettyPageHandler