00001 <?php
00002
00015
00016
00017
00018 import('search.ArticleSearch');
00019
00020 class SearchHandler extends Handler {
00021
00025 function index() {
00026 parent::validate();
00027 SearchHandler::advanced();
00028 }
00029
00033 function search() {
00034 parent::validate();
00035 SearchHandler::advanced();
00036 }
00037
00041 function advanced() {
00042 parent::validate();
00043 SearchHandler::setupTemplate(false);
00044 $templateMgr = &TemplateManager::getManager();
00045
00046 if (Request::getJournal() == null) {
00047 $journalDao = &DAORegistry::getDAO('JournalDAO');
00048 $journals = &$journalDao->getEnabledJournalTitles();
00049 $templateMgr->assign('siteSearch', true);
00050 $templateMgr->assign('journalOptions', array('' => Locale::Translate('search.allJournals')) + $journals);
00051 $journalPath = Request::getRequestedJournalPath();
00052 }
00053
00054 SearchHandler::assignAdvancedSearchParameters($templateMgr);
00055
00056 $templateMgr->display('search/advancedSearch.tpl');
00057 }
00058
00062 function authors($args) {
00063 parent::validate();
00064 SearchHandler::setupTemplate(true);
00065
00066 $journal =& Request::getJournal();
00067
00068 $authorDao = &DAORegistry::getDAO('AuthorDAO');
00069
00070 if (isset($args[0]) && $args[0] == 'view') {
00071
00072 $firstName = Request::getUserVar('firstName');
00073 $middleName = Request::getUserVar('middleName');
00074 $lastName = Request::getUserVar('lastName');
00075 $affiliation = Request::getUserVar('affiliation');
00076 $country = Request::getUserVar('country');
00077
00078 $publishedArticles = $authorDao->getPublishedArticlesForAuthor($journal?$journal->getJournalId():null, $firstName, $middleName, $lastName, $affiliation, $country);
00079
00080
00081 $journals = array();
00082 $issues = array();
00083 $sections = array();
00084 $issuesUnavailable = array();
00085
00086 $issueDao =& DAORegistry::getDAO('IssueDAO');
00087 $sectionDao =& DAORegistry::getDAO('SectionDAO');
00088 $journalDao =& DAORegistry::getDAO('JournalDAO');
00089
00090 foreach ($publishedArticles as $article) {
00091 $articleId = $article->getArticleId();
00092 $issueId = $article->getIssueId();
00093 $sectionId = $article->getSectionId();
00094 $journalId = $article->getJournalId();
00095
00096 if (!isset($issues[$issueId])) {
00097 import('issue.IssueAction');
00098 $issue = &$issueDao->getIssueById($issueId);
00099 $issues[$issueId] = &$issue;
00100 $issuesUnavailable[$issueId] = IssueAction::subscriptionRequired($issue) && (!IssueAction::subscribedUser($journal, $issueId, $articleId) && !IssueAction::subscribedDomain($journal, $issueId, $articleId));
00101 }
00102 if (!isset($journals[$journalId])) {
00103 $journals[$journalId] =& $journalDao->getJournal($journalId);
00104 }
00105 if (!isset($sections[$sectionId])) {
00106 $sections[$sectionId] =& $sectionDao->getSection($sectionId);
00107 }
00108 }
00109
00110 if (empty($publishedArticles)) {
00111 Request::redirect(null, Request::getRequestedPage());
00112 }
00113
00114 $templateMgr = &TemplateManager::getManager();
00115 $templateMgr->assign_by_ref('publishedArticles', $publishedArticles);
00116 $templateMgr->assign_by_ref('issues', $issues);
00117 $templateMgr->assign('issuesUnavailable', $issuesUnavailable);
00118 $templateMgr->assign_by_ref('sections', $sections);
00119 $templateMgr->assign_by_ref('journals', $journals);
00120 $templateMgr->assign('firstName', $firstName);
00121 $templateMgr->assign('middleName', $middleName);
00122 $templateMgr->assign('lastName', $lastName);
00123 $templateMgr->assign('affiliation', $affiliation);
00124 $templateMgr->display('search/authorDetails.tpl');
00125 } else {
00126
00127 $searchInitial = Request::getUserVar('searchInitial');
00128 $rangeInfo = Handler::getRangeInfo('authors');
00129
00130 $authors = &$authorDao->getAuthorsAlphabetizedByJournal(
00131 isset($journal)?$journal->getJournalId():null,
00132 $searchInitial,
00133 $rangeInfo
00134 );
00135
00136 $templateMgr = &TemplateManager::getManager();
00137 $templateMgr->assign('searchInitial', Request::getUserVar('searchInitial'));
00138 $templateMgr->assign('alphaList', explode(' ', Locale::translate('common.alphaList')));
00139 $templateMgr->assign_by_ref('authors', $authors);
00140 $templateMgr->display('search/authorIndex.tpl');
00141 }
00142 }
00143
00147 function titles($args) {
00148 parent::validate();
00149 SearchHandler::setupTemplate(true);
00150
00151 $journal =& Request::getJournal();
00152
00153 $publishedArticleDao = &DAORegistry::getDAO('PublishedArticleDAO');
00154
00155 $rangeInfo = Handler::getRangeInfo('search');
00156
00157 $articleIds = &$publishedArticleDao->getPublishedArticleIdsAlphabetizedByJournal(isset($journal)?$journal->getJournalId():null);
00158 $totalResults = count($articleIds);
00159 $articleIds = array_slice($articleIds, $rangeInfo->getCount() * ($rangeInfo->getPage()-1), $rangeInfo->getCount());
00160 $results = &new VirtualArrayIterator(ArticleSearch::formatResults($articleIds), $totalResults, $rangeInfo->getPage(), $rangeInfo->getCount());
00161
00162 $templateMgr = &TemplateManager::getManager();
00163 $templateMgr->assign_by_ref('results', $results);
00164 $templateMgr->display('search/titleIndex.tpl');
00165 }
00166
00170 function results() {
00171 parent::validate();
00172 SearchHandler::setupTemplate(true);
00173
00174 $rangeInfo = Handler::getRangeInfo('search');
00175
00176 $searchJournalId = Request::getUserVar('searchJournal');
00177 if (!empty($searchJournalId)) {
00178 $journalDao = &DAORegistry::getDAO('JournalDAO');
00179 $journal = &$journalDao->getJournal($searchJournalId);
00180 } else {
00181 $journal =& Request::getJournal();
00182 }
00183
00184 $searchType = Request::getUserVar('searchField');
00185 if (!is_numeric($searchType)) $searchType = null;
00186
00187
00188 $keywords = array($searchType => ArticleSearch::parseQuery(Request::getUserVar('query')));
00189
00190 $results = &ArticleSearch::retrieveResults($journal, $keywords, null, null, $rangeInfo);
00191
00192 $templateMgr = &TemplateManager::getManager();
00193 $templateMgr->setCacheability(CACHEABILITY_NO_STORE);
00194 $templateMgr->assign_by_ref('results', $results);
00195 $templateMgr->assign('basicQuery', Request::getUserVar('query'));
00196 $templateMgr->assign('searchField', Request::getUserVar('searchField'));
00197 $templateMgr->display('search/searchResults.tpl');
00198 }
00199
00203 function advancedResults() {
00204 parent::validate();
00205 SearchHandler::setupTemplate(true);
00206
00207 $rangeInfo = Handler::getRangeInfo('search');
00208
00209 $searchJournalId = Request::getUserVar('searchJournal');
00210 if (!empty($searchJournalId)) {
00211 $journalDao = &DAORegistry::getDAO('JournalDAO');
00212 $journal = &$journalDao->getJournal($searchJournalId);
00213 } else {
00214 $journal =& Request::getJournal();
00215 }
00216
00217
00218 $keywords = array(null => ArticleSearch::parseQuery(Request::getUserVar('query')));
00219 $keywords[ARTICLE_SEARCH_AUTHOR] = ArticleSearch::parseQuery(Request::getUserVar('author'));
00220 $keywords[ARTICLE_SEARCH_TITLE] = ArticleSearch::parseQuery(Request::getUserVar('title'));
00221 $keywords[ARTICLE_SEARCH_DISCIPLINE] = ArticleSearch::parseQuery(Request::getUserVar('discipline'));
00222 $keywords[ARTICLE_SEARCH_SUBJECT] = ArticleSearch::parseQuery(Request::getUserVar('subject'));
00223 $keywords[ARTICLE_SEARCH_TYPE] = ArticleSearch::parseQuery(Request::getUserVar('type'));
00224 $keywords[ARTICLE_SEARCH_COVERAGE] = ArticleSearch::parseQuery(Request::getUserVar('coverage'));
00225 $keywords[ARTICLE_SEARCH_GALLEY_FILE] = ArticleSearch::parseQuery(Request::getUserVar('fullText'));
00226 $keywords[ARTICLE_SEARCH_SUPPLEMENTARY_FILE] = ArticleSearch::parseQuery(Request::getUserVar('supplementaryFiles'));
00227
00228 $fromDate = Request::getUserDateVar('dateFrom', 1, 1);
00229 if ($fromDate !== null) $fromDate = date('Y-m-d H:i:s', $fromDate);
00230 $toDate = Request::getUserDateVar('dateTo', 32, 12, null, 23, 59, 59);
00231 if ($toDate !== null) $toDate = date('Y-m-d H:i:s', $toDate);
00232
00233 $results = &ArticleSearch::retrieveResults($journal, $keywords, $fromDate, $toDate, $rangeInfo);
00234
00235 $templateMgr = &TemplateManager::getManager();
00236 $templateMgr->assign_by_ref('results', $results);
00237 SearchHandler::assignAdvancedSearchParameters($templateMgr);
00238
00239 $templateMgr->display('search/searchResults.tpl');
00240 }
00241
00246 function setupTemplate($subclass = false) {
00247 parent::validate();
00248 $templateMgr = &TemplateManager::getManager();
00249 $templateMgr->assign('helpTopicId', 'user.searchAndBrowse');
00250 $templateMgr->assign('pageHierarchy',
00251 $subclass ? array(array(Request::url(null, 'search'), 'navigation.search'))
00252 : array()
00253 );
00254
00255 $journal =& Request::getJournal();
00256 if (!$journal || !$journal->getSetting('restrictSiteAccess')) {
00257 $templateMgr->setCacheability(CACHEABILITY_PUBLIC);
00258 }
00259 }
00260
00261 function assignAdvancedSearchParameters(&$templateMgr) {
00262 $templateMgr->assign('query', Request::getUserVar('query'));
00263 $templateMgr->assign('searchJournal', Request::getUserVar('searchJournal'));
00264 $templateMgr->assign('author', Request::getUserVar('author'));
00265 $templateMgr->assign('title', Request::getUserVar('title'));
00266 $templateMgr->assign('fullText', Request::getUserVar('fullText'));
00267 $templateMgr->assign('supplementaryFiles', Request::getUserVar('supplementaryFiles'));
00268 $templateMgr->assign('discipline', Request::getUserVar('discipline'));
00269 $templateMgr->assign('subject', Request::getUserVar('subject'));
00270 $templateMgr->assign('type', Request::getUserVar('type'));
00271 $templateMgr->assign('coverage', Request::getUserVar('coverage'));
00272 $fromMonth = Request::getUserVar('dateFromMonth');
00273 $fromDay = Request::getUserVar('dateFromDay');
00274 $fromYear = Request::getUserVar('dateFromYear');
00275 $templateMgr->assign('dateFromMonth', $fromMonth);
00276 $templateMgr->assign('dateFromDay', $fromDay);
00277 $templateMgr->assign('dateFromYear', $fromYear);
00278 if (!empty($fromYear)) $templateMgr->assign('dateFrom', date('Y-m-d H:i:s',mktime(0,0,0,$fromMonth==null?12:$fromMonth,$fromDay==null?31:$fromDay,$fromYear)));
00279
00280 $toMonth = Request::getUserVar('dateToMonth');
00281 $toDay = Request::getUserVar('dateToDay');
00282 $toYear = Request::getUserVar('dateToYear');
00283 $templateMgr->assign('dateToMonth', $toMonth);
00284 $templateMgr->assign('dateToDay', $toDay);
00285 $templateMgr->assign('dateToYear', $toYear);
00286 if (!empty($toYear)) $templateMgr->assign('dateTo', date('Y-m-d H:i:s',mktime(0,0,0,$toMonth==null?12:$toMonth,$toDay==null?31:$toDay,$toYear)));
00287 }
00288 }
00289
00290 ?>