18 import(
'lib.pkp.classes.search.SubmissionSearch');
26 $resultCount = count($unorderedResults);
28 foreach ($unorderedResults as $submissionId => &$data) {
30 $data[
'score'] = ($resultCount * $data[
'count']) + $i++;
42 $orderedResults = array();
46 $contextTitles = array();
47 if ($orderBy ==
'popularityAll' || $orderBy ==
'popularityMonth') {
50 if (is_null($metricType)) {
55 $column = STATISTICS_DIMENSION_SUBMISSION_ID;
57 STATISTICS_DIMENSION_ASSOC_TYPE => array(ASSOC_TYPE_GALLEY, ASSOC_TYPE_SUBMISSION),
58 STATISTICS_DIMENSION_SUBMISSION_ID => array(array_keys($unorderedResults))
60 if ($orderBy ==
'popularityMonth') {
61 $oneMonthAgo = date(
'Ymd', strtotime(
'-1 month'));
63 $filter[STATISTICS_DIMENSION_DAY] = array(
'from' => $oneMonthAgo,
'to' => $today);
65 $rawReport =
$application->getMetrics($metricType, $column, $filter);
66 foreach ($rawReport as $row) {
67 $unorderedResults[$row[
'submission_id']][
'metric'] = (int)$row[
'metric'];
73 foreach ($unorderedResults as $submissionId => $data) {
75 if (in_array($submissionId, $exclude))
continue;
79 $submission = $submissionDao->getById($submissionId);
80 $orderKey = $submission->getAuthorString();
84 $submission = $submissionDao->getById($submissionId);
86 if (!empty($submission->getCurrentPublication())) {
87 $orderKey = $submission->getCurrentPublication()->getLocalizedData(
'title');
92 if (!isset($contextTitles[$data[
'press_id']])) {
93 $press = $contextDao->getById($data[
'press_id']);
94 $contextTitles[$data[
'press_id']] = $press->getLocalizedName();
96 $orderKey = $contextTitles[$data[
'press_id']];
99 case 'publicationDate':
100 $orderKey = $data[$orderBy];
103 case 'popularityAll':
104 case 'popularityMonth':
105 $orderKey = (isset($data[
'metric']) ? $data[
'metric'] : 0);
109 $orderKey = $data[
'score'];
111 if (!isset($orderedResults[$orderKey])) {
112 $orderedResults[$orderKey] = array();
114 $orderedResults[$orderKey][$data[
'score'] + $i++] = $submissionId;
118 if (strtolower($orderDir) ==
'asc') {
119 ksort($orderedResults);
121 krsort($orderedResults);
125 $finalOrder = array();
126 foreach($orderedResults as $orderKey => $submissionIds) {
127 if (count($submissionIds) == 1) {
128 $finalOrder[] = array_pop($submissionIds);
130 if (strtolower($orderDir) ==
'asc') {
131 ksort($submissionIds);
133 krsort($submissionIds);
135 $finalOrder = array_merge($finalOrder, array_values($submissionIds));
147 $searchFilters = array(
148 'query' => $request->getUserVar(
'query'),
149 'searchPress' => $request->getUserVar(
'searchPress'),
150 'abstract' => $request->getUserVar(
'abstract'),
151 'authors' => $request->getUserVar(
'authors'),
152 'title' => $request->getUserVar(
'title'),
153 'galleyFullText' => $request->getUserVar(
'galleyFullText'),
154 'suppFiles' => $request->getUserVar(
'suppFiles'),
155 'discipline' => $request->getUserVar(
'discipline'),
156 'subject' => $request->getUserVar(
'subject'),
157 'type' => $request->getUserVar(
'type'),
158 'coverage' => $request->getUserVar(
'coverage'),
159 'indexTerms' => $request->getUserVar(
'indexTerms')
164 $simpleQuery = $request->getUserVar(
'simpleQuery');
165 if (!empty($simpleQuery)) {
168 $searchType = $request->getUserVar(
'searchField');
169 if (array_key_exists($searchType, $searchFilters)) {
170 $searchFilters[$searchType] = $simpleQuery;
175 $fromDate = $request->getUserDateVar(
'dateFrom', 1, 1);
176 $searchFilters[
'fromDate'] = (is_null($fromDate) ? null : date(
'Y-m-d H:i:s', $fromDate));
177 $toDate = $request->getUserDateVar(
'dateTo', 32, 12,
null, 23, 59, 59);
178 $searchFilters[
'toDate'] = (is_null($toDate) ? null : date(
'Y-m-d H:i:s', $toDate));
181 $context = $request->getContext();
182 $siteSearch = !((boolean)$context);
185 if (!empty($searchFilters[
'searchPress'])) {
186 $context = $contextDao->getById($searchFilters[
'searchPress']);
187 } elseif (array_key_exists(
'pressTitle', $request->getUserVars())) {
188 $contexts = $contextDao->getAll(
true);
189 while ($context = $contexts->next()) {
191 $request->getUserVar(
'pressTitle'),
192 (array) $context->getTitle(
null)
197 $searchFilters[
'searchPress'] = $context;
198 $searchFilters[
'siteSearch'] = $siteSearch;
200 return $searchFilters;
211 $indexFieldMap[SUBMISSION_SEARCH_INDEX_TERMS] =
'indexTerms';
213 if (isset($searchFilters[
'query'])) {
214 $keywords[
null] = $searchFilters[
'query'];
216 foreach($indexFieldMap as $bitmap => $searchField) {
217 if (isset($searchFilters[$searchField]) && !empty($searchFilters[$searchField])) {
218 $keywords[$bitmap] = $searchFilters[$searchField];
231 $publishedSubmissionCache = array();
232 $monographCache = array();
233 $contextCache = array();
234 $seriesCache = array();
237 foreach ($results as $monographId) {
239 if (!isset($monographCache[$monographId])) {
240 $submission =
Services::get(
'submission')->get($monographId);
241 $monographCache[$monographId] = $submission;
242 $publishedSubmissionCache[$monographId] = $submission;
244 unset($monograph, $publishedSubmission);
245 $monograph = $monographCache[$monographId];
246 $publishedSubmission = $publishedSubmissionCache[$monographId];
249 $seriesId = $monograph->getSeriesId();
250 if (!isset($seriesCache[$seriesId])) {
251 $seriesCache[$seriesId] = $seriesDao->getById($seriesId);
255 $contextId = $monograph->getData(
'contextId');
256 if (!isset($contextCache[$contextId])) {
257 $contextCache[$contextId] = $contextDao->getById($contextId);
262 'press' => $contextCache[$contextId],
263 'monograph' => $monograph,
264 'publishedSubmission' => $publishedSubmission,
265 'seriesArrangment' => $seriesCache[$seriesId]
274 SUBMISSION_SEARCH_AUTHOR =>
'authors',
275 SUBMISSION_SEARCH_TITLE =>
'title',
276 SUBMISSION_SEARCH_ABSTRACT =>
'abstract',
277 SUBMISSION_SEARCH_GALLEY_FILE =>
'galleyFullText',
278 SUBMISSION_SEARCH_SUPPLEMENTARY_FILE =>
'suppFiles',
279 SUBMISSION_SEARCH_DISCIPLINE =>
'discipline',
280 SUBMISSION_SEARCH_SUBJECT =>
'subject',
281 SUBMISSION_SEARCH_TYPE =>
'type',
282 SUBMISSION_SEARCH_COVERAGE =>
'coverage'
290 $resultSetOrderingOptions = array(
291 'score' => __(
'search.results.orderBy.relevance'),
292 'authors' => __(
'search.results.orderBy.author'),
293 'publicationDate' => __(
'search.results.orderBy.date'),
294 'title' => __(
'search.results.orderBy.monograph')
300 if (!is_null($metricType)) {
301 $resultSetOrderingOptions[
'popularityAll'] = __(
'search.results.orderBy.popularityAll');
302 $resultSetOrderingOptions[
'popularityMonth'] = __(
'search.results.orderBy.popularityMonth');
306 $context = $request->getContext();
307 if (!is_a($context,
'Context')) {
308 $resultSetOrderingOptions[
'pressTitle'] = __(
'search.results.orderBy.press');
313 'SubmissionSearch::getResultSetOrderingOptions',
314 array($context, &$resultSetOrderingOptions)
317 return $resultSetOrderingOptions;
325 if (in_array($orderBy, array(
'score',
'publicationDate',
'popularityAll',
'popularityMonth'))) {