17 import(
'lib.pkp.classes.plugins.GenericPlugin');
19 define(
'RECOMMEND_BY_AUTHOR_PLUGIN_COUNT', 10);
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;
33 if ($success && $this->
getEnabled($mainContextId)) {
34 HookRegistry::register(
'Templates::Article::Footer::PageFooter', array($this,
'callbackTemplateArticlePageFooter'));
43 return __(
'plugins.generic.recommendByAuthor.displayName');
50 return __(
'plugins.generic.recommendByAuthor.description');
61 $smarty =& $params[1];
62 $output =& $params[2];
65 $displayedArticle = $smarty->getTemplateVars(
'article');
66 $authors = $displayedArticle->getAuthors();
67 $foundArticles = array();
68 foreach($authors as $author) {
75 'contextIds' => $displayedArticle->getData(
'contextId'),
76 'givenName' => $author->getLocalizedGivenName(),
77 'familyName' => $author->getLocalizedFamilyName(),
80 foreach ($authorsIterator as $thisAuthor) {
81 $publicationIds[] = $thisAuthor->getData(
'publicationId');
83 $submissionIds = array_map(
function($publicationId) {
84 $publication =
Services::get(
'publication')->get($publicationId);
85 return $publication->getData(
'status') == STATUS_PUBLISHED ? $publication->getData(
'submissionId') :
null;
86 }, array_unique($publicationIds));
87 $foundArticles = array_unique(array_merge($foundArticles, $submissionIds));
90 $results = array_filter($foundArticles,
function($value) use ($displayedArticle) {
91 if ($value !== $displayedArticle->getId())
return $value;
98 if (empty($metricType)) $smarty->assign(
'noMetricSelected',
true);
99 $column = STATISTICS_DIMENSION_SUBMISSION_ID;
101 STATISTICS_DIMENSION_ASSOC_TYPE => array(ASSOC_TYPE_GALLEY, ASSOC_TYPE_SUBMISSION),
102 STATISTICS_DIMENSION_SUBMISSION_ID => array($results)
104 $orderBy = array(STATISTICS_METRIC => STATISTICS_ORDER_DESC);
105 $statsReport =
$application->getMetrics($metricType, $column, $filter, $orderBy);
106 $orderedResults = array();
107 foreach ((array) $statsReport as $reportRow) {
108 $orderedResults[] = $reportRow[
'submission_id'];
112 $remainingResults = array_diff($results, $orderedResults);
113 sort($remainingResults);
114 $orderedResults = array_merge($orderedResults, $remainingResults);
119 if ($rangeInfo && $rangeInfo->isValid()) {
120 $page = $rangeInfo->getPage();
124 $totalResults = count($orderedResults);
125 $itemsPerPage = RECOMMEND_BY_AUTHOR_PLUGIN_COUNT;
126 $offset = $itemsPerPage * ($page-1);
127 $length = max($totalResults - $offset, 0);
128 $length = min($itemsPerPage, $length);
130 $pagedResults = array();
132 $pagedResults = array_slice(
140 import(
'classes.search.ArticleSearch');
142 $pagedResults = $articleSearch->formatResults($pagedResults);
143 import(
'lib.pkp.classes.core.VirtualArrayIterator');
145 $smarty->assign(
'articlesBySameAuthor', $returner);