16 import(
'classes.search.ArticleSearch');
17 import(
'classes.handler.Handler');
24 function authorize($request, &$args, $roleAssignments) {
25 import(
'classes.security.authorization.OjsJournalMustPublishPolicy');
28 return parent::authorize($request, $args, $roleAssignments);
36 function index($args, $request) {
38 $this->
search($args, $request);
50 $journal =& $searchFilters[
'searchJournal'];
51 $journalId = ($journal ? $journal->getId() :
null);
52 $searchFilters[
'searchJournal'] = $journalId;
55 $templateSearchFilters = array();
56 foreach($searchFilters as $filterName => $filterValue) {
57 if (in_array($filterName, array(
'fromDate',
'toDate')))
continue;
58 $templateSearchFilters[$filterName] = $filterValue;
62 $templateMgr->assign($templateSearchFilters);
65 foreach(array(
'From',
'To') as $fromTo) {
66 $month = $request->getUserVar(
"date${fromTo}Month");
67 $day = $request->getUserVar(
"date${fromTo}Day");
68 $year = $request->getUserVar(
"date${fromTo}Year");
71 $hasEmptyFilters =
true;
73 $defaultMonth = ($fromTo ==
'From' ? 1 : 12);
74 $defaultDay = ($fromTo ==
'From' ? 1 : 31);
78 0, 0, 0, empty($month) ? $defaultMonth : $month,
79 empty($day) ? $defaultDay : $day, $year
82 $hasActiveFilters =
true;
84 $templateMgr->assign(array(
85 "date${fromTo}Month" => $month,
86 "date${fromTo}Day" => $day,
87 "date${fromTo}Year" => $year,
88 "date${fromTo}" => $date
93 $yearRange =
Services::get(
'publication')->getDateBoundaries([
'contextIds' => $journalId]);
94 $yearStart = substr($yearRange[1], 0, 4);
95 $yearEnd = substr($yearRange[0], 0, 4);
96 $templateMgr->assign(array(
97 'yearStart' => $yearStart,
98 'yearEnd' => $yearEnd,
112 $searchFilters = $articleSearch->getSearchFilters($request);
113 $keywords = $articleSearch->getKeywordsFromSearchFilters($searchFilters);
120 $results = $articleSearch->retrieveResults(
121 $request, $searchFilters[
'searchJournal'], $keywords, $error,
122 $searchFilters[
'fromDate'], $searchFilters[
'toDate'],
129 $templateMgr->setCacheability(CACHEABILITY_NO_STORE);
132 $orderByOptions = $articleSearch->getResultSetOrderingOptions($request);
133 $templateMgr->assign(
'searchResultOrderOptions', $orderByOptions);
134 $orderDirOptions = $articleSearch->getResultSetOrderingDirectionOptions();
135 $templateMgr->assign(
'searchResultOrderDirOptions', $orderDirOptions);
138 list($orderBy, $orderDir) = $articleSearch->getResultSetOrdering($request);
139 $templateMgr->assign(
'orderBy', $orderBy);
140 $templateMgr->assign(
'orderDir', $orderDir);
143 $templateMgr->assign(
'simDocsEnabled',
true);
147 $templateMgr->assign(
'results', $results);
148 $templateMgr->assign(
'error', $error);
149 $templateMgr->display(
'frontend/pages/search.tpl');
164 $articleId = $request->getUserVar(
'articleId');
165 if (!is_numeric($articleId)) {
166 $request->redirect(
null,
'search');
171 $searchTerms = $articleSearch->getSimilarityTerms($articleId);
174 if (empty($searchTerms)) {
175 $searchParams =
null;
177 $searchParams = array(
'query' => implode(
' ', $searchTerms));
179 $request->redirect(
null,
'search',
'search',
null, $searchParams);
191 $journal = $request->getJournal();
192 $user = $request->getUser();
196 if (isset($args[0]) && $args[0] ==
'view') {
198 $authorName = $request->getUserVar(
'authorName');
199 $givenName = $request->getUserVar(
'givenName');
200 $familyName = $request->getUserVar(
'familyName');
201 $affiliation = $request->getUserVar(
'affiliation');
202 $country = $request->getUserVar(
'country');
204 $authorRecords = iterator_to_array(
Services::get(
'author')->getMany([
205 'contextIds' => $journal?[$journal->getId()]:[],
206 'givenName' => $givenName,
207 'familyName' => $familyName,
208 'affiliation' => $affiliation,
209 'country' => $country,
211 $publicationIds = array_map(
function($author) {
212 return $author->getData(
'publicationId');
214 $submissionIds = array_filter(array_map(
function($publicationId) {
215 $publication =
Services::get(
'publication')->get($publicationId);
216 return $publication->getData(
'status') == STATUS_PUBLISHED ? $publication->getData(
'submissionId') :
null;
217 }, array_unique($publicationIds)));
218 $submissions = array_map(
function($submissionId) {
220 }, array_unique($submissionIds));
226 $issuesUnavailable = array();
232 foreach ($submissions as $article) {
233 $articleId = $article->getId();
234 $issueId = $article->getCurrentPublication()->getData(
'issueId');
235 $sectionId = $article->getSectionId();
236 $journalId = $article->getData(
'contextId');
238 if (!isset($journals[$journalId])) {
239 $journals[$journalId] = $journalDao->getById($journalId);
241 if (!isset($issues[$issueId])) {
242 import(
'classes.issue.IssueAction');
243 $issue = $issueDao->getById($issueId);
244 $issues[$issueId] = $issue;
246 $issuesUnavailable[$issueId] = $issueAction->subscriptionRequired($issue, $journals[$journalId]) && (!$issueAction->subscribedUser($user, $journals[$journalId], $issueId, $articleId) && !$issueAction->subscribedDomain($request, $journals[$journalId], $issueId, $articleId));
248 if (!isset($sections[$sectionId])) {
249 $sections[$sectionId] = $sectionDao->getById($sectionId, $journalId,
true);
253 if (empty($submissions)) {
254 $request->redirect(
null, $request->getRequestedPage());
258 $templateMgr->assign(array(
259 'submissions' => $submissions,
261 'issuesUnavailable' => $issuesUnavailable,
262 'sections' => $sections,
263 'journals' => $journals,
264 'givenName' => $givenName,
265 'familyName' => $familyName,
266 'affiliation' => $affiliation,
267 'authorName' => $authorName
270 $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory();
271 $countries = $countries = $isoCodes->getCountries();
272 $country = $countries->getByAlpha2($country);
273 $templateMgr->assign(
'country', $country?$country->getLocalName():
'');
275 $templateMgr->display(
'frontend/pages/searchAuthorDetails.tpl');
278 $searchInitial = $request->getUserVar(
'searchInitial');
281 $authors = $authorDao->getAuthorsAlphabetizedByJournal(
282 isset($journal)?$journal->getId():
null,
288 $templateMgr->assign(array(
289 'searchInitial' => $request->getUserVar(
'searchInitial'),
290 'alphaList' => array_merge(array(
'-'), explode(
' ', __(
'common.alphaList'))),
291 'authors' => $authors,
293 $templateMgr->display(
'frontend/pages/searchAuthorIndex.tpl');
302 parent::setupTemplate($request);
304 $journal = $request->getJournal();
305 if (!$journal || !$journal->getData(
'restrictSiteAccess')) {
306 $templateMgr->setCacheability(CACHEABILITY_PUBLIC);