-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCspBrowseBySupplementPlugin.php
More file actions
118 lines (97 loc) · 3.67 KB
/
Copy pathCspBrowseBySupplementPlugin.php
File metadata and controls
118 lines (97 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
namespace APP\plugins\generic\cspBrowseBySupplement;
use APP\core\Application;
use APP\facades\Repo;
use APP\issue\Collector as IssueCollector;
use PKP\config\Config;
use PKP\core\PKPApplication;
use PKP\navigationMenu\NavigationMenuItem;
use PKP\navigationMenu\NavigationMenuItemAssignment;
use PKP\plugins\GenericPlugin;
use PKP\plugins\Hook;
define('CSP_SUPPLEMENT_NMI_TYPE', 'CSP_SUPPLEMENT_NMI_');
class CspBrowseBySupplementPlugin extends GenericPlugin
{
public function register($category, $path, $mainContextId = null)
{
$success = parent::register($category, $path);
if (!Config::getVar('general', 'installed') || defined('RUNNING_UPGRADE')) {
return $success;
}
if ($success && $this->getEnabled()) {
Hook::add('NavigationMenus::itemTypes', [$this, 'addMenuItemTypes']);
Hook::add('NavigationMenus::displaySettings', [$this, 'setMenuItemDisplayDetails']);
}
return $success;
}
public function getDisplayName()
{
return __('plugins.generic.cspBrowseBySupplement.name');
}
public function getDescription()
{
return __('plugins.generic.cspBrowseBySupplement.description');
}
public function addMenuItemTypes($hookName, $args)
{
$types = & $args[0];
$types[CSP_SUPPLEMENT_NMI_TYPE] = [
'title' => __('plugins.generic.cspBrowseBySupplement.navMenuItem'),
'description' => __('plugins.generic.cspBrowseBySupplement.navMenuItem.description'),
];
}
public function setMenuItemDisplayDetails($hookName, $args)
{
$navigationMenuItem = & $args[0];
$navigationMenu = & $args[1];
if ($navigationMenuItem->getType() !== CSP_SUPPLEMENT_NMI_TYPE) {
return false;
}
$request = Application::get()->getRequest();
$context = $request->getContext();
if (!$context) {
return false;
}
$issues = Repo::issue()->getCollector()
->filterByContextIds([$context->getId()])
->filterByPublished(true)
->orderBy(IssueCollector::ORDERBY_DATE_PUBLISHED)
->getMany();
$dispatcher = $request->getDispatcher();
$children = [];
foreach ($issues as $issue) {
if (stripos($issue->getTitle('en') ?? '', 'Supplement') === false) {
continue;
}
$volume = $issue->getVolume();
$localizedTitle = $issue->getLocalizedTitle();
$label = $volume ? "v.{$volume} {$localizedTitle}" : $localizedTitle;
$childNmi = new NavigationMenuItem();
$childNmi->setTitle($label, $context->getPrimaryLocale());
$childNmi->setUrl($dispatcher->url(
$request,
PKPApplication::ROUTE_PAGE,
null,
'issue',
'view',
$issue->getBestIssueId()
));
$childNmi->setIsDisplayed(true);
$childAssignment = new NavigationMenuItemAssignment();
$childAssignment->setMenuItem($childNmi);
$children[] = $childAssignment;
}
if (!empty($children) && isset($navigationMenu->menuTree)) {
foreach ($navigationMenu->menuTree as $assignment) {
if ($assignment->getMenuItem()?->getType() === CSP_SUPPLEMENT_NMI_TYPE) {
$assignment->children = $children;
break;
}
}
}
$navigationMenuItem->setUrl('');
$navigationMenuItem->setIsDisplayed(true);
$navigationMenuItem->setIsChildVisible(!empty($children));
return false;
}
}