Пример #1
0
 /**
  *
  * @param $request
  * @return array
  */
 public function createQueryBuilderInputFromRequest($request)
 {
     if (is_null($request->getParams())) {
         throw new Application_Util_QueryBuilderException('Unable to read request data. Search cannot be performed.');
     }
     if (is_null($request->getParam('searchtype'))) {
         throw new Application_Util_QueryBuilderException('Unspecified search type: unable to create query.');
     }
     if (!Application_Util_Searchtypes::isSupported($request->getParam('searchtype'))) {
         throw new Application_Util_QueryBuilderException('Unsupported search type ' . $request->getParam('searchtype') . ' : unable to create query.');
     }
     $this->validateParamsType($request);
     if ($request->getParam('sortfield')) {
         $sorting = array($request->getParam('sortfield'), 'asc');
     } else {
         $sorting = Opus_Search_Query::getDefaultSorting();
     }
     $input = array('searchtype' => $request->getParam('searchtype'), 'start' => $request->getParam('start', Opus_Search_Query::getDefaultStart()), 'rows' => $request->getParam('rows', Opus_Search_Query::getDefaultRows()), 'sortField' => $sorting[0], 'sortOrder' => $request->getParam('sortorder', $sorting[1]), 'docId' => $request->getParam('docId'), 'query' => $request->getParam('query', '*:*'));
     if ($this->_export) {
         $maxRows = self::MAX_ROWS;
         // pagination within export was introduced in OPUS 4.2.2
         $startParam = $request->getParam('start', 0);
         $rowsParam = $request->getParam('rows', $maxRows);
         $start = intval($startParam);
         $rows = intval($rowsParam);
         $input['start'] = $start > 0 ? $start : 0;
         $input['rows'] = $rows > 0 || $rows == 0 && $rowsParam == '0' ? $rows : $maxRows;
         if ($input['start'] > $maxRows) {
             $input['start'] = $maxRows;
         }
         if ($input['rows'] + $input['start'] > $maxRows) {
             $input['rows'] = $maxRows - $start;
         }
     }
     foreach ($this->_searchFields as $searchField) {
         $input[$searchField] = $request->getParam($searchField, '');
         $input[$searchField . 'modifier'] = $request->getParam($searchField . 'modifier', self::SEARCH_MODIFIER_CONTAINS_ALL);
     }
     foreach ($this->_filterFields as $filterField) {
         $param = $filterField . 'fq';
         $input[$param] = $request->getParam($param, '');
     }
     if ($request->getParam('searchtype') === Application_Util_Searchtypes::COLLECTION_SEARCH || $request->getParam('searchtype') === Application_Util_Searchtypes::SERIES_SEARCH) {
         $searchParams = new Application_Util_BrowsingParams($request, $this->_logger);
         switch ($request->getParam('searchtype')) {
             case Application_Util_Searchtypes::COLLECTION_SEARCH:
                 $input['collectionId'] = $searchParams->getCollectionId();
                 break;
             case Application_Util_Searchtypes::SERIES_SEARCH:
                 $input['seriesId'] = $searchParams->getSeriesId();
                 break;
         }
     }
     return $input;
 }