Identify similarity terms for a given submission.
public getSimilarityTerms ( $submissionId ) : null | array | ||
$submissionId | integer | |
return | null | array | An array of string keywords or null if some kind of error occurred. |
/** * @see templates/article/footer.tpl */ function callbackTemplateArticlePageFooter($hookName, $params) { $smarty =& $params[1]; $output =& $params[2]; // Identify similarity terms for the given article. $displayedArticle = $smarty->get_template_vars('article'); $articleId = $displayedArticle->getId(); import('classes.search.ArticleSearch'); $articleSearch = new ArticleSearch(); $searchTerms = $articleSearch->getSimilarityTerms($articleId); if (empty($searchTerms)) { return false; } // If we got similarity terms then execute a search with... // ... request, journal and error messages, ... $request = PKPApplication::getRequest(); $router = $request->getRouter(); $journal = $router->getContext($request); $error = null; // ... search keywords ... $query = implode(' ', $searchTerms); $keywords = array(null => $query); // ... and pagination. $rangeInfo = Handler::getRangeInfo($request, 'articlesBySimilarity'); $rangeInfo->setCount(RECOMMEND_BY_SIMILARITY_PLUGIN_COUNT); $results = $articleSearch->retrieveResults($request, $journal, $keywords, $error, null, null, $rangeInfo, array($articleId)); $smarty->assign('articlesBySimilarity', $results); $smarty->assign('articlesBySimilarityQuery', $query); $output .= $smarty->fetch($this->getTemplatePath() . 'articleFooter.tpl'); return false; }
/** * Redirect to a search query that shows documents * similar to the one identified by an article id in the * request. * @param $args array * @param $request Request */ function similarDocuments($args, &$request) { $this->validate(null, $request); // Retrieve the (mandatory) ID of the article that // we want similar documents for. $articleId = $request->getUserVar('articleId'); if (!is_numeric($articleId)) { $request->redirect(null, 'search'); } // Check whether a search plugin provides terms for a similarity search. $articleSearch = new ArticleSearch(); $searchTerms = $articleSearch->getSimilarityTerms($articleId); // Redirect to a search query with the identified search terms (if any). if (empty($searchTerms)) { $searchParams = null; } else { $searchParams = array('query' => implode(' ', $searchTerms)); } $request->redirect(null, 'search', 'search', null, $searchParams); }