175 lines
6.3 KiB
PHP
175 lines
6.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/services/NavigationMenuService.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2000-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class NavigationMenuService
|
|
*
|
|
* @ingroup services
|
|
*
|
|
* @brief Helper class that encapsulates NavigationMenu business logic
|
|
*/
|
|
|
|
namespace APP\services;
|
|
|
|
use APP\core\Application;
|
|
use APP\template\TemplateManager;
|
|
use PKP\plugins\Hook;
|
|
use PKP\security\Validation;
|
|
|
|
class NavigationMenuService extends \PKP\services\PKPNavigationMenuService
|
|
{
|
|
// Types for all ojs default navigationMenuItems
|
|
public const NMI_TYPE_SUBSCRIPTIONS = 'NMI_TYPE_SUBSCRIPTIONS';
|
|
public const NMI_TYPE_MY_SUBSCRIPTIONS = 'NMI_TYPE_MY_SUBSCRIPTIONS';
|
|
public const NMI_TYPE_CURRENT = 'NMI_TYPE_CURRENT';
|
|
public const NMI_TYPE_ARCHIVES = 'NMI_TYPE_ARCHIVES';
|
|
|
|
/**
|
|
* Initialize hooks for extending PKPNavigationMenuService
|
|
*/
|
|
public function __construct()
|
|
{
|
|
Hook::add('NavigationMenus::itemTypes', [$this, 'getMenuItemTypesCallback']);
|
|
Hook::add('NavigationMenus::displaySettings', [$this, 'getDisplayStatusCallback']);
|
|
}
|
|
|
|
/**
|
|
* Return all default navigationMenuItemTypes.
|
|
*
|
|
* @param string $hookName
|
|
* @param array $args of arguments passed
|
|
*/
|
|
public function getMenuItemTypesCallback($hookName, $args)
|
|
{
|
|
$types = & $args[0];
|
|
|
|
$ojsTypes = [
|
|
self::NMI_TYPE_CURRENT => [
|
|
'title' => __('editor.issues.currentIssue'),
|
|
'description' => __('manager.navigationMenus.current.description'),
|
|
],
|
|
self::NMI_TYPE_ARCHIVES => [
|
|
'title' => __('navigation.archives'),
|
|
'description' => __('manager.navigationMenus.archives.description'),
|
|
],
|
|
self::NMI_TYPE_SUBSCRIPTIONS => [
|
|
'title' => __('navigation.subscriptions'),
|
|
'description' => __('manager.navigationMenus.subscriptions.description'),
|
|
'conditionalWarning' => __('manager.navigationMenus.subscriptions.conditionalWarning'),
|
|
],
|
|
self::NMI_TYPE_MY_SUBSCRIPTIONS => [
|
|
'title' => __('user.subscriptions.mySubscriptions'),
|
|
'description' => __('manager.navigationMenus.mySubscriptions.description'),
|
|
'conditionalWarning' => __('manager.navigationMenus.mySubscriptions.conditionalWarning'),
|
|
],
|
|
];
|
|
|
|
$types = array_merge($types, $ojsTypes);
|
|
}
|
|
|
|
/**
|
|
* Callback for display menu item functionality
|
|
*
|
|
* @param string $hookName
|
|
* @param array $args of arguments passed
|
|
*/
|
|
public function getDisplayStatusCallback($hookName, $args)
|
|
{
|
|
$navigationMenuItem = & $args[0];
|
|
|
|
$request = Application::get()->getRequest();
|
|
$dispatcher = $request->getDispatcher();
|
|
$templateMgr = TemplateManager::getManager(Application::get()->getRequest());
|
|
|
|
$isUserLoggedIn = Validation::isLoggedIn();
|
|
$isUserLoggedInAs = Validation::loggedInAs();
|
|
$context = $request->getContext();
|
|
|
|
$this->transformNavMenuItemTitle($templateMgr, $navigationMenuItem);
|
|
|
|
$menuItemType = $navigationMenuItem->getType();
|
|
|
|
// Conditionally hide some items
|
|
switch ($menuItemType) {
|
|
case self::NMI_TYPE_CURRENT:
|
|
case self::NMI_TYPE_ARCHIVES:
|
|
$navigationMenuItem->setIsDisplayed($context && $context->getData('publishingMode') != \APP\journal\Journal::PUBLISHING_MODE_NONE);
|
|
break;
|
|
case self::NMI_TYPE_SUBSCRIPTIONS:
|
|
if ($context) {
|
|
$paymentManager = Application::getPaymentManager($context);
|
|
$navigationMenuItem->setIsDisplayed($context->getData('paymentsEnabled') && $paymentManager->isConfigured());
|
|
}
|
|
break;
|
|
case self::NMI_TYPE_MY_SUBSCRIPTIONS:
|
|
if ($context) {
|
|
$paymentManager = Application::getPaymentManager($context);
|
|
$navigationMenuItem->setIsDisplayed(Validation::isLoggedIn() && $context->getData('paymentsEnabled') && $paymentManager->isConfigured() && $context->getData('publishingMode') == \APP\journal\Journal::PUBLISHING_MODE_SUBSCRIPTION);
|
|
}
|
|
break;
|
|
}
|
|
|
|
if ($navigationMenuItem->getIsDisplayed()) {
|
|
// Set the URL
|
|
switch ($menuItemType) {
|
|
case self::NMI_TYPE_CURRENT:
|
|
$navigationMenuItem->setUrl($dispatcher->url(
|
|
$request,
|
|
Application::ROUTE_PAGE,
|
|
null,
|
|
'issue',
|
|
'current',
|
|
null
|
|
));
|
|
break;
|
|
case self::NMI_TYPE_ARCHIVES:
|
|
$navigationMenuItem->setUrl($dispatcher->url(
|
|
$request,
|
|
Application::ROUTE_PAGE,
|
|
null,
|
|
'issue',
|
|
'archive',
|
|
null
|
|
));
|
|
break;
|
|
case self::NMI_TYPE_SUBSCRIPTIONS:
|
|
$navigationMenuItem->setUrl($dispatcher->url(
|
|
$request,
|
|
Application::ROUTE_PAGE,
|
|
null,
|
|
'about',
|
|
'subscriptions',
|
|
null
|
|
));
|
|
break;
|
|
case self::NMI_TYPE_MY_SUBSCRIPTIONS:
|
|
$navigationMenuItem->setUrl($dispatcher->url(
|
|
$request,
|
|
Application::ROUTE_PAGE,
|
|
null,
|
|
'user',
|
|
'subscriptions',
|
|
null
|
|
));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!PKP_STRICT_MODE) {
|
|
foreach ([
|
|
'NMI_TYPE_SUBSCRIPTIONS',
|
|
'NMI_TYPE_MY_SUBSCRIPTIONS',
|
|
'NMI_TYPE_CURRENT',
|
|
'NMI_TYPE_ARCHIVES',
|
|
] as $constantName) {
|
|
define($constantName, constant('\APP\services\NavigationMenuService::' . $constantName));
|
|
}
|
|
}
|