Пример #1
0
 /**
  * @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;
 }
Пример #2
0
 /**
  * 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');
     }
 }