16 import(
'classes.search.ArticleSearch');
17 import(
'classes.handler.Handler');
24 function authorize($request, &$args, $roleAssignments) {
25 import(
'classes.security.authorization.OpsServerMustPublishPolicy');
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_map(
function($publicationId) {
215 return Services::get(
'publication')->get($publicationId)->getData(
'submissionId');
216 }, array_unique($publicationIds));
217 $submissions = array_map(
function($submissionId) {
219 }, array_unique($submissionIds));
228 foreach ($submissions as $article) {
229 $articleId = $article->getId();
230 $sectionId = $article->getSectionId();
231 $journalId = $article->getData(
'contextId');
233 if (!isset($journals[$journalId])) {
234 $journals[$journalId] = $journalDao->getById($journalId);
236 if (!isset($sections[$sectionId])) {
237 $sections[$sectionId] = $sectionDao->getById($sectionId, $journalId,
true);
241 if (empty($submissions)) {
242 $request->redirect(
null, $request->getRequestedPage());
246 $templateMgr->assign(array(
247 'submissions' => $submissions,
248 'sections' => $sections,
249 'journals' => $journals,
250 'givenName' => $givenName,
251 'familyName' => $familyName,
252 'affiliation' => $affiliation,
253 'authorName' => $authorName
256 $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory();
257 $countries = $countries = $isoCodes->getCountries();
258 $country = $countries->getByAlpha2($country);
259 $templateMgr->assign(
'country', $country?$country->getLocalName():
'');
261 $templateMgr->display(
'frontend/pages/searchAuthorDetails.tpl');
264 $searchInitial = $request->getUserVar(
'searchInitial');
267 $authors = $authorDao->getAuthorsAlphabetizedByJournal(
268 isset($journal)?$journal->getId():
null,
274 $templateMgr->assign(array(
275 'searchInitial' => $request->getUserVar(
'searchInitial'),
276 'alphaList' => array_merge(array(
'-'), explode(
' ', __(
'common.alphaList'))),
277 'authors' => $authors,
279 $templateMgr->display(
'frontend/pages/searchAuthorIndex.tpl');
288 parent::setupTemplate($request);
290 $journal = $request->getJournal();
291 if (!$journal || !$journal->getData(
'restrictSiteAccess')) {
292 $templateMgr->setCacheability(CACHEABILITY_PUBLIC);