Пример #1
0
 /**
  * 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');
 }