/** * Display an RT search context * @param $args array * @param $request Request */ function context($args, &$request) { $router =& $request->getRouter(); $this->setupTemplate(); $articleId = isset($args[0]) ? $args[0] : 0; $galleyId = isset($args[1]) ? (int) $args[1] : 0; $contextId = isset($args[2]) ? (int) $args[2] : 0; $this->validate($request, $articleId, $galleyId); $journal =& $router->getContext($request); $article =& $this->article; $rtDao =& DAORegistry::getDAO('RTDAO'); $journalRt =& $rtDao->getJournalRTByJournal($journal); $context =& $rtDao->getContext($contextId); if ($context) { $version =& $rtDao->getVersion($context->getVersionId(), $journal->getId()); } if (!$context || !$version || !$journalRt || $journalRt->getVersion() == null || $journalRt->getVersion() != $context->getVersionId()) { $request->redirect(null, 'article', 'view', array($articleId, $galleyId)); } // Deal with the post and URL parameters for each search // so that the client browser can properly submit the forms // with a minimum of client-side processing. $searches = array(); // Some searches use parameters other than the "default" for // the search (i.e. keywords, author name, etc). If additional // parameters are used, they should be displayed as part of the // form for ALL searches in that context. $searchParams = array(); foreach ($context->getSearches() as $search) { $params = array(); $searchParams += RTHandler::_getParameterNames($search->getSearchUrl()); if ($search->getSearchPost()) { $searchParams += RTHandler::_getParameterNames($search->getSearchPost()); $postParams = explode('&', $search->getSearchPost()); foreach ($postParams as $param) { // Split name and value from each parameter $nameValue = explode('=', $param); if (!isset($nameValue[0])) { break; } $name = $nameValue[0]; $value = trim(isset($nameValue[1]) ? $nameValue[1] : ''); if (!empty($name)) { $params[] = array('name' => $name, 'value' => $value); } } } $search->postParams = $params; $searches[] = $search; } // Remove duplicate extra form elements and get their values $searchParams = array_unique($searchParams); $searchValues = array(); foreach ($searchParams as $key => $param) { switch ($param) { case 'author': $searchValues[$param] = $article->getAuthorString(); break; case 'coverageGeo': $searchValues[$param] = $article->getLocalizedCoverageGeo(); break; case 'title': $searchValues[$param] = $article->getLocalizedTitle(); break; default: // UNKNOWN parameter! Remove it from the list. unset($searchParams[$key]); break; } } $templateMgr =& TemplateManager::getManager(); $templateMgr->assign('articleId', $articleId); $templateMgr->assign('galleyId', $galleyId); $templateMgr->assign_by_ref('article', $article); $templateMgr->assign_by_ref('version', $version); $templateMgr->assign_by_ref('context', $context); $templateMgr->assign_by_ref('searches', $searches); $templateMgr->assign('searchParams', $searchParams); $templateMgr->assign('searchValues', $searchValues); $templateMgr->assign('defineTerm', $request->getUserVar('defineTerm')); $templateMgr->assign('keywords', explode(';', $article->getLocalizedSubject())); $templateMgr->assign('coverageGeo', $article->getLocalizedCoverageGeo()); $templateMgr->assign_by_ref('journalSettings', $journal->getSettings()); $templateMgr->display('rt/context.tpl'); }