/** * @param $assignments * @param array $index * @param $id * @param $arguments * @return mixed */ protected function getRecordsWithUnderlyingQuery($assignments, $index, $id, $arguments) { $connection = $this->getConnection(); try { /** @var \Solarium\Core\Query\Result\ResultInterface $selectResults */ $selectResults = $connection->execute($this->query); if (count($selectResults) > 0) { $assignments['results'] = $selectResults; $resultSet = $selectResults->getDocuments(); // the actual result is at position 0 (for the first document) or 1 (otherwise). $document = $resultSet[$index['resultIndexOffset']]; if ($document['id'] === $id) { $assignments['document'] = $document; if ($index['resultIndexOffset'] !== 0) { $assignments['document-previous'] = $resultSet[0]; $assignments['document-previous-number'] = $index['previousIndex'] + 1; } $nextResultIndex = 1 + $index['resultIndexOffset']; if (count($resultSet) > $nextResultIndex) { $assignments['document-next'] = $resultSet[$nextResultIndex]; $assignments['document-next-number'] = $index['nextIndex'] + 1; } } else { $message = sprintf('find: »detail« action query with underlying query could not retrieve record id »%d«.', $id); LoggerUtility::logError($message, ['arguments' => $arguments]); } } else { $message = 'find: »detail« action query with underlying query returned no results.'; LoggerUtility::logError($message, ['arguments' => $arguments]); } } catch (HttpException $exception) { $message = 'find: Solr Exception (Timeout?)'; LoggerUtility::logError($message, ['arguments' => $arguments, 'exception' => LoggerUtility::exceptionToArray($exception)]); } return $assignments; }
/** * Single Item View action. */ public function detailAction() { $arguments = $this->searchProvider->getRequestArguments(); if (array_key_exists('id', $arguments) && !empty($arguments['id'])) { $detail = $this->searchProvider->getDetail(); if ($this->request->hasArgument('underlyingQuery')) { $underlyingQueryInfo = $this->request->getArgument('underlyingQuery'); $this->response->addAdditionalHeaderData(FrontendUtility::addQueryInformationAsJavaScript($underlyingQueryInfo['q'], (int) $underlyingQueryInfo['position'], $arguments, $this->settings)); } $this->addStandardAssignments(); $this->view->assignMultiple($detail); $this->view->assign('arguments', $arguments); } else { // id argument missing or empty LoggerUtility::logError('find: Non-empty argument »id« is required for action »detail«.', ['arguments' => $arguments]); $this->forward('index'); } }