Open Journal Systems  3.3.0
RecommendBySimilarityPlugin.inc.php
1 <?php
2 
17 import('lib.pkp.classes.plugins.GenericPlugin');
18 
19 define('RECOMMEND_BY_SIMILARITY_PLUGIN_COUNT', 10);
20 
22 
23  //
24  // Implement template methods from Plugin.
25  //
29  function register($category, $path, $mainContextId = null) {
30  $success = parent::register($category, $path, $mainContextId);
31  if (!Config::getVar('general', 'installed') || defined('RUNNING_UPGRADE')) return $success;
32 
33  if ($success && $this->getEnabled($mainContextId)) {
34  HookRegistry::register('Templates::Article::Footer::PageFooter', array($this, 'callbackTemplateArticlePageFooter'));
35  }
36  return $success;
37  }
38 
42  function getDisplayName() {
43  return __('plugins.generic.recommendBySimilarity.displayName');
44  }
45 
49  function getDescription() {
50  return __('plugins.generic.recommendBySimilarity.description');
51  }
52 
53 
54  //
55  // View level hook implementations.
56  //
60  function callbackTemplateArticlePageFooter($hookName, $params) {
61  $smarty =& $params[1];
62  $output =& $params[2];
63 
64  // Identify similarity terms for the given article.
65  $displayedArticle = $smarty->getTemplateVars('article');
66  $articleId = $displayedArticle->getId();
67  import('classes.search.ArticleSearch');
68  $articleSearch = new ArticleSearch();
69  $searchTerms = $articleSearch->getSimilarityTerms($articleId);
70  if (empty($searchTerms)) return false;
71 
72  // If we got similarity terms then execute a search with...
73  // ... request, journal and error messages, ...
74  $request = Application::get()->getRequest();
75  $router = $request->getRouter();
76  $journal = $router->getContext($request);
77  $error = null;
78  // ... search keywords ...
79  $query = implode(' ', $searchTerms);
80  $keywords = array(null => $query);
81  // ... and pagination.
82  $rangeInfo = Handler::getRangeInfo($request, 'articlesBySimilarity');
83  $rangeInfo->setCount(RECOMMEND_BY_SIMILARITY_PLUGIN_COUNT);
84  $smarty->assign(array(
85  'articlesBySimilarity' => $articleSearch->retrieveResults(
86  $request,
87  $journal,
88  $keywords,
89  $error,
90  null, null,
91  $rangeInfo,
92  array($articleId)
93  ),
94  'articlesBySimilarityQuery' => $query,
95  ));
96  $output .= $smarty->fetch($this->getTemplateResource('articleFooter.tpl'));
97  return false;
98  }
99 }
100 
RecommendBySimilarityPlugin
Plugin to recommend similar articles.
Definition: RecommendBySimilarityPlugin.inc.php:21
RecommendBySimilarityPlugin\callbackTemplateArticlePageFooter
callbackTemplateArticlePageFooter($hookName, $params)
Definition: RecommendBySimilarityPlugin.inc.php:60
PKPHandler\getRangeInfo
static getRangeInfo($request, $rangeName, $contextData=null)
Definition: PKPHandler.inc.php:417
RecommendBySimilarityPlugin\getDisplayName
getDisplayName()
Definition: RecommendBySimilarityPlugin.inc.php:42
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
RecommendBySimilarityPlugin\getDescription
getDescription()
Definition: RecommendBySimilarityPlugin.inc.php:49
Plugin\getTemplateResource
getTemplateResource($template=null, $inCore=false)
Definition: Plugin.inc.php:349
Plugin\$request
$request
Definition: Plugin.inc.php:68
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
ArticleSearch
Class for retrieving article search results.
Definition: ArticleSearch.inc.php:20
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18