17 import(
'lib.pkp.classes.navigationMenu.NavigationMenuItemAssignment');
18 import(
'lib.pkp.classes.navigationMenu.NavigationMenuItem');
29 NMI_TYPE_CUSTOM => array(
30 'title' => __(
'manager.navigationMenus.customPage'),
31 'description' => __(
'manager.navigationMenus.customPage.description'),
33 NMI_TYPE_REMOTE_URL => array(
34 'title' => __(
'manager.navigationMenus.remoteUrl'),
35 'description' => __(
'manager.navigationMenus.remoteUrl.description'),
37 NMI_TYPE_ABOUT => array(
38 'title' => __(
'navigation.about'),
39 'description' => __(
'manager.navigationMenus.about.description'),
40 'conditionalWarning' => __(
'manager.navigationMenus.about.conditionalWarning'),
42 NMI_TYPE_EDITORIAL_TEAM => array(
43 'title' => __(
'about.editorialTeam'),
44 'description' => __(
'manager.navigationMenus.editorialTeam.description'),
45 'conditionalWarning' => __(
'manager.navigationMenus.editorialTeam.conditionalWarning'),
47 NMI_TYPE_SUBMISSIONS => array(
48 'title' => __(
'about.submissions'),
49 'description' => __(
'manager.navigationMenus.submissions.description'),
51 NMI_TYPE_ANNOUNCEMENTS => array(
52 'title' => __(
'announcement.announcements'),
53 'description' => __(
'manager.navigationMenus.announcements.description'),
54 'conditionalWarning' => __(
'manager.navigationMenus.announcements.conditionalWarning'),
56 NMI_TYPE_USER_LOGIN => array(
57 'title' => __(
'navigation.login'),
58 'description' => __(
'manager.navigationMenus.login.description'),
59 'conditionalWarning' => __(
'manager.navigationMenus.loggedIn.conditionalWarning'),
61 NMI_TYPE_USER_REGISTER => array(
62 'title' => __(
'navigation.register'),
63 'description' => __(
'manager.navigationMenus.register.description'),
64 'conditionalWarning' => __(
'manager.navigationMenus.loggedIn.conditionalWarning'),
66 NMI_TYPE_USER_DASHBOARD => array(
67 'title' => __(
'navigation.dashboard'),
68 'description' => __(
'manager.navigationMenus.dashboard.description'),
69 'conditionalWarning' => __(
'manager.navigationMenus.loggedOut.conditionalWarning'),
71 NMI_TYPE_USER_PROFILE => array(
72 'title' => __(
'common.viewProfile'),
73 'description' => __(
'manager.navigationMenus.profile.description'),
74 'conditionalWarning' => __(
'manager.navigationMenus.loggedOut.conditionalWarning'),
76 NMI_TYPE_ADMINISTRATION => array(
77 'title' => __(
'navigation.admin'),
78 'description' => __(
'manager.navigationMenus.administration.description'),
79 'conditionalWarning' => __(
'manager.navigationMenus.loggedOut.conditionalWarning'),
81 NMI_TYPE_USER_LOGOUT => array(
82 'title' => __(
'user.logOut'),
83 'description' => __(
'manager.navigationMenus.logOut.description'),
84 'conditionalWarning' => __(
'manager.navigationMenus.loggedOut.conditionalWarning'),
86 NMI_TYPE_CONTACT => array(
87 'title' => __(
'about.contact'),
88 'description' => __(
'manager.navigationMenus.contact.description'),
89 'conditionalWarning' => __(
'manager.navigationMenus.contact.conditionalWarning'),
91 NMI_TYPE_SEARCH => array(
92 'title' => __(
'common.search'),
93 'description' => __(
'manager.navigationMenus.search.description'),
95 NMI_TYPE_PRIVACY => array(
96 'title' => __(
'manager.setup.privacyStatement'),
97 'description' => __(
'manager.navigationMenus.privacyStatement.description'),
98 'conditionalWarning' => __(
'manager.navigationMenus.privacyStatement.conditionalWarning'),
113 NMI_TYPE_CUSTOM => array(
114 'template' =>
'core:controllers/grid/navigationMenus/customNMIType.tpl',
116 NMI_TYPE_REMOTE_URL => array(
117 'template' =>
'core:controllers/grid/navigationMenus/remoteUrlNMIType.tpl',
131 $dispatcher = $request->getDispatcher();
136 $context = $request->getContext();
137 $currentUser = $request->getUser();
139 $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
144 $menuItemType = $navigationMenuItem->getType();
147 switch ($menuItemType) {
148 case NMI_TYPE_ANNOUNCEMENTS:
149 $navigationMenuItem->setIsDisplayed($context && $context->getData(
'enableAnnouncements'));
151 case NMI_TYPE_EDITORIAL_TEAM:
152 $navigationMenuItem->setIsDisplayed($context && $context->getLocalizedData(
'editorialTeam'));
154 case NMI_TYPE_CONTACT:
155 $navigationMenuItem->setIsDisplayed($context && ($context->getData(
'mailingAddress') || $context->getData(
'contactName')));
157 case NMI_TYPE_USER_REGISTER:
158 $navigationMenuItem->setIsDisplayed(!$isUserLoggedIn && !($context && $context->getData(
'disableUserReg')));
160 case NMI_TYPE_USER_LOGIN:
161 $navigationMenuItem->setIsDisplayed(!$isUserLoggedIn);
163 case NMI_TYPE_USER_LOGOUT:
164 case NMI_TYPE_USER_PROFILE:
165 case NMI_TYPE_USER_DASHBOARD:
166 $navigationMenuItem->setIsDisplayed($isUserLoggedIn);
168 case NMI_TYPE_ADMINISTRATION:
169 $navigationMenuItem->setIsDisplayed($isUserLoggedIn && $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE));
171 case NMI_TYPE_SEARCH:
172 $navigationMenuItem->setIsDisplayed($context);
174 case NMI_TYPE_PRIVACY:
175 $navigationMenuItem->setIsDisplayed($context && $context->getLocalizedData(
'privacyStatement'));
179 if ($navigationMenuItem->getIsDisplayed()) {
181 switch ($menuItemType) {
182 case NMI_TYPE_USER_LOGOUT:
183 if ($isUserLoggedInAs) {
184 $userName = $request->getUser() ?
' ' . $request->getUser()->getUserName() :
'';
188 case NMI_TYPE_USER_DASHBOARD:
189 $templateMgr->assign(
'navigationMenuItem', $navigationMenuItem);
190 if ($currentUser->hasRole(array(ROLE_ID_MANAGER, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR), $contextId) || $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE)) {
191 $displayTitle = $templateMgr->fetch(
'frontend/components/navigationMenus/dashboardMenuItem.tpl');
198 switch ($menuItemType) {
199 case NMI_TYPE_ANNOUNCEMENTS:
200 $navigationMenuItem->setUrl($dispatcher->url(
210 $navigationMenuItem->setUrl($dispatcher->url(
219 case NMI_TYPE_SUBMISSIONS:
220 $navigationMenuItem->setUrl($dispatcher->url(
229 case NMI_TYPE_EDITORIAL_TEAM:
230 $navigationMenuItem->setUrl($dispatcher->url(
239 case NMI_TYPE_CONTACT:
240 $navigationMenuItem->setUrl($dispatcher->url(
249 case NMI_TYPE_USER_LOGOUT:
250 $navigationMenuItem->setUrl($dispatcher->url(
255 $isUserLoggedInAs ?
'signOutAsUser' :
'signOut',
259 case NMI_TYPE_USER_PROFILE:
260 $navigationMenuItem->setUrl($dispatcher->url(
269 case NMI_TYPE_ADMINISTRATION:
270 $contextPath =
'index';
271 $user = $request->getUser();
273 $workingContexts = $contextDao->getAvailable($user?$user->getId():
null);
274 if ($workingContexts && $workingContexts->getCount() == 1) {
275 $workingContext = $workingContexts->next();
276 $contextPath = $workingContext->getPath();
278 $navigationMenuItem->setUrl($dispatcher->url(
287 case NMI_TYPE_USER_DASHBOARD:
288 if ($currentUser->hasRole(array(ROLE_ID_MANAGER, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR), $contextId) || $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE)) {
289 $navigationMenuItem->setUrl($dispatcher->url(
298 $navigationMenuItem->setUrl($dispatcher->url(
309 case NMI_TYPE_USER_REGISTER:
310 $navigationMenuItem->setUrl($dispatcher->url(
319 case NMI_TYPE_USER_LOGIN:
320 $navigationMenuItem->setUrl($dispatcher->url(
329 case NMI_TYPE_CUSTOM:
330 if ($navigationMenuItem->getPath()) {
331 $path = explode(
"/", $navigationMenuItem->getPath());
332 $page = array_shift($path);
333 $op = array_shift($path);
334 $navigationMenuItem->setUrl($dispatcher->url(
344 case NMI_TYPE_SEARCH:
345 $navigationMenuItem->setUrl($dispatcher->url(
354 case NMI_TYPE_PRIVACY:
355 $navigationMenuItem->setUrl($dispatcher->url(
364 case NMI_TYPE_REMOTE_URL:
365 $navigationMenuItem->setUrl($navigationMenuItem->getLocalizedRemoteUrl());
370 \HookRegistry::call(
'NavigationMenus::displaySettings', array($navigationMenuItem, $navigationMenu));
372 $templateMgr->assign(
'navigationMenuItem', $navigationMenuItem);
377 $items = $navigationMenuItemDao->getByMenuId($navigationMenu->getId())->toArray();
380 $assignments = $navigationMenuItemAssignmentDao->getByMenuId($navigationMenu->getId())
383 foreach ($assignments as $assignment) {
384 foreach($items as $item) {
385 if ($item->getId() === $assignment->getMenuItemId()) {
386 $assignment->setMenuItem($item);
394 $navigationMenu->menuTree = array();
396 foreach ($assignments as $assignment) {
397 if (!$assignment->getParentId()) {
398 $navigationMenu->menuTree[] = $assignment;
400 if (!isset($children[$assignment->getParentId()])) {
401 $children[$assignment->getParentId()] = array();
404 $children[$assignment->getParentId()][] = $assignment;
409 for ($i = 0; $i < count($navigationMenu->menuTree); $i++) {
410 $assignmentId = $navigationMenu->menuTree[$i]->getMenuItemId();
411 if (isset($children[$assignmentId])) {
412 $navigationMenu->menuTree[$i]->children = $children[$assignmentId];
417 $cache = $navigationMenuDao->getCache($navigationMenu->getId());
418 $json = json_encode($navigationMenu);
419 $cache->setEntireCache($json);
429 $cache = $navigationMenuDao->getCache($navigationMenu->getId());
431 $navigationMenu = json_decode($cache->cache,
true);
432 $navigationMenu = $this->
arrayToObject(
'NavigationMenu', $navigationMenu);
433 $this->loadMenuTreeDisplayState($navigationMenu);
437 $this->loadMenuTreeDisplayState($navigationMenu);
440 private function loadMenuTreeDisplayState(&$navigationMenu) {
441 foreach ($navigationMenu->menuTree as $assignment) {
442 $nmi = $assignment->getMenuItem();
443 if ($assignment->children) {
444 foreach($assignment->children as $childAssignment) {
445 $childNmi = $childAssignment->getMenuItem();
448 if ($childNmi->getIsDisplayed()) {
449 $nmi->setIsChildVisible(
true);
465 if ($class ==
'NavigationMenu') {
466 $obj = new \NavigationMenu();
467 }
else if ($class ==
'NavigationMenuItem') {
468 $obj = new \NavigationMenuItem();
469 }
else if ($class ==
'NavigationMenuItemAssignment') {
470 $obj = new \NavigationMenuItemAssignment();
472 foreach($array as $k => $v) {
474 if(is_array($v) && $k ==
'menuTree') {
475 $treeChildren = array();
476 foreach($v as $treeChild) {
477 array_push($treeChildren, $this->
arrayToObject(
'NavigationMenuItemAssignment', $treeChild));
479 $obj->{$k} = $treeChildren;
480 }
else if(is_array($v) && $k ==
'navigationMenuItem') {
482 }
else if(is_array($v) && $k ==
'children') {
483 $treeChildren = array();
484 foreach($v as $treeChild) {
485 array_push($treeChildren, $this->
arrayToObject(
'NavigationMenuItemAssignment', $treeChild));
487 $obj->{$k} = $treeChildren;
496 if ($class ==
'NavigationMenuItem') {
498 $this->transformNavMenuItemTitle($templateMgr, $obj);
510 $this->setNMITitleLocalized($navigationMenuItem);
512 $title = $navigationMenuItem->getLocalizedTitle();
516 $prefixPos = strpos($title, $prefix);
517 $postfixPos = strpos($title, $postfix);
519 if ($prefixPos !==
false && $postfixPos !==
false && ($postfixPos - $prefixPos) > 0){
520 $titleRepl = substr($title, $prefixPos + strlen($prefix), $postfixPos - $prefixPos - strlen($prefix));
522 $templateReplaceTitle = $templateMgr->getTemplateVars($titleRepl);
523 if ($templateReplaceTitle) {
536 $nmiAssignment->setMenuItem($navigationMenuItemDao->getById($nmiAssignment->getMenuItemId()));
540 $nmiAssignment->children = $navigationMenuItemAssignmentDao->getByMenuIdAndParentId($nmiAssignment->getMenuId(), $nmiAssignment->getId())
544 foreach ($nmiAssignment->children as $assignmentChild) {
545 $this->populateNMIAssignmentContainedObjects($assignmentChild);
557 private function _hasNMTreeNMIAssignmentWithChildOfNMIType($navigationMenu, $navigationMenuItem, $nmiType, $isDisplayed =
true) {
558 foreach($navigationMenu->menuTree as $nmiAssignment) {
559 $nmi = $nmiAssignment->getMenuItem();
560 if(isset($nmi) && $nmi->getId() == $navigationMenuItem->getId()) {
561 foreach($nmiAssignment->children as $childNmiAssignment){
562 $childNmi = $childNmiAssignment->getMenuItem();
563 if (isset($nmi) && $childNmi->getType() == $nmiType) {
565 return $childNmi->getIsDisplayed();
583 \AppLocale::requireComponents(LOCALE_COMPONENT_PKP_COMMON, LOCALE_COMPONENT_PKP_MANAGER, LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_PKP_USER);
584 if ($localisedTitle = $nmi->getLocalizedTitle()) {
586 } elseif ($nmi->getTitleLocaleKey() ===
'{$loggedInUsername}') {
602 foreach ($supportedFormLocales as $supportedFormLocale => $supportedFormLocaleValue) {
604 LOCALE_COMPONENT_PKP_COMMON,
605 LOCALE_COMPONENT_PKP_MANAGER,
606 LOCALE_COMPONENT_APP_COMMON,
607 LOCALE_COMPONENT_PKP_USER,
611 if ($localisedTitle = $nmi->getTitle($supportedFormLocale)) {
612 $nmi->setTitle($localisedTitle, $supportedFormLocale);
614 $nmi->setTitle(__($nmi->getTitleLocaleKey(), array(), $supportedFormLocale), $supportedFormLocale);
635 if (
$op !==
'index') $path .=
"/$op";
636 if ($arguments = $request->getRequestedArgs()) $path .=
'/' . implode(
'/', $arguments);
641 $context = $request->getContext();
642 $contextId = $context?$context->getId():CONTEXT_ID_NONE;
643 $customNMI = $navigationMenuItemDao->getByPath($contextId, $path);
653 define(
'HANDLER_CLASS',
'NavigationMenuItemHandler');
654 import(
'lib.pkp.pages.navigationMenu.NavigationMenuItemHandler');