195 lines
8.0 KiB
PHP
195 lines
8.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/template/TemplateManager.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class TemplateManager
|
|
*
|
|
* @ingroup template
|
|
*
|
|
* @brief Class for accessing the underlying template engine.
|
|
* Currently integrated with Smarty (from http://smarty.php.net/).
|
|
*
|
|
*/
|
|
|
|
namespace APP\template;
|
|
|
|
use APP\core\Application;
|
|
use APP\core\PageRouter;
|
|
use APP\file\PublicFileManager;
|
|
use PKP\facades\Locale;
|
|
use PKP\i18n\LocaleMetadata;
|
|
use PKP\security\Role;
|
|
use PKP\session\SessionManager;
|
|
use PKP\site\Site;
|
|
use PKP\template\PKPTemplateManager;
|
|
|
|
class TemplateManager extends PKPTemplateManager
|
|
{
|
|
/**
|
|
* Initialize template engine and assign basic template variables.
|
|
*
|
|
* @param \APP\core\Request $request
|
|
*/
|
|
public function initialize($request)
|
|
{
|
|
parent::initialize($request);
|
|
|
|
// Pass app-specific details to template
|
|
$this->assign([
|
|
'brandImage' => 'templates/images/ojs_brand.png',
|
|
]);
|
|
|
|
if (!SessionManager::isDisabled()) {
|
|
/**
|
|
* Kludge to make sure no code that tries to connect to
|
|
* the database is executed (e.g., when loading
|
|
* installer pages).
|
|
*/
|
|
|
|
$context = $request->getContext();
|
|
$site = $request->getSite(); /** @var Site $site */
|
|
|
|
$publicFileManager = new PublicFileManager();
|
|
$siteFilesDir = $request->getBaseUrl() . '/' . $publicFileManager->getSiteFilesPath();
|
|
$this->assign('sitePublicFilesDir', $siteFilesDir);
|
|
$this->assign('publicFilesDir', $siteFilesDir); // May be overridden by journal
|
|
|
|
if ($site->getData('styleSheet')) {
|
|
$this->addStyleSheet(
|
|
'siteStylesheet',
|
|
$request->getBaseUrl() . '/' . $publicFileManager->getSiteFilesPath() . '/' . $site->getData('styleSheet')['uploadName'],
|
|
['priority' => self::STYLE_SEQUENCE_LATE]
|
|
);
|
|
}
|
|
if (isset($context)) {
|
|
$this->assign([
|
|
'currentJournal' => $context,
|
|
'siteTitle' => $context->getLocalizedName(),
|
|
'publicFilesDir' => $request->getBaseUrl() . '/' . $publicFileManager->getContextFilesPath($context->getId()),
|
|
'primaryLocale' => $context->getPrimaryLocale(),
|
|
'supportedLocales' => $context->getSupportedLocaleNames(LocaleMetadata::LANGUAGE_LOCALE_ONLY),
|
|
'numPageLinks' => $context->getData('numPageLinks'),
|
|
'itemsPerPage' => $context->getData('itemsPerPage'),
|
|
'enableAnnouncements' => $context->getData('enableAnnouncements'),
|
|
'disableUserReg' => $context->getData('disableUserReg'),
|
|
'pageFooter' => $context->getLocalizedData('pageFooter'),
|
|
]);
|
|
} else {
|
|
// Check if registration is open for any contexts
|
|
$contextDao = Application::getContextDAO();
|
|
$contexts = $contextDao->getAll(true)->toArray();
|
|
$contextsForRegistration = [];
|
|
foreach ($contexts as $context) {
|
|
if (!$context->getData('disableUserReg')) {
|
|
$contextsForRegistration[] = $context;
|
|
}
|
|
}
|
|
|
|
$this->assign([
|
|
'contexts' => $contextsForRegistration,
|
|
'disableUserReg' => empty($contextsForRegistration),
|
|
'siteTitle' => $site->getLocalizedTitle(),
|
|
'primaryLocale' => $site->getPrimaryLocale(),
|
|
'supportedLocales' => Locale::getFormattedDisplayNames(
|
|
$site->getSupportedLocales(),
|
|
Locale::getLocales(),
|
|
LocaleMetadata::LANGUAGE_LOCALE_ONLY
|
|
),
|
|
'pageFooter' => $site->getLocalizedData('pageFooter'),
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @copydoc PKPTemplateManager::setupBackendPage()
|
|
*/
|
|
public function setupBackendPage()
|
|
{
|
|
parent::setupBackendPage();
|
|
|
|
$request = Application::get()->getRequest();
|
|
if (SessionManager::isDisabled()
|
|
|| !$request->getContext()
|
|
|| !$request->getUser()) {
|
|
return;
|
|
}
|
|
|
|
/** @var PageRouter */
|
|
$router = $request->getRouter();
|
|
$handler = $router->getHandler();
|
|
$userRoles = (array) $handler->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
|
|
|
|
$menu = (array) $this->getState('menu');
|
|
|
|
// Add issues after submissions items
|
|
if (count(array_intersect([Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN], $userRoles))) {
|
|
$issuesLink = [
|
|
'name' => __('editor.navigation.issues'),
|
|
'url' => $router->url($request, null, 'manageIssues'),
|
|
'isCurrent' => $request->getRequestedPage() === 'manageIssues',
|
|
];
|
|
$index = array_search('submissions', array_keys($menu));
|
|
if ($index === false || count($menu) <= $index + 1) {
|
|
$menu['issues'] = $issuesLink;
|
|
} else {
|
|
$menu = array_slice($menu, 0, $index + 1, true)
|
|
+ ['issues' => $issuesLink]
|
|
+ array_slice($menu, $index + 1, null, true);
|
|
}
|
|
}
|
|
|
|
if (count(array_intersect([Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUB_EDITOR], $userRoles))) {
|
|
$statsIssuesLink = [
|
|
'name' => __('editor.navigation.issues'),
|
|
'url' => $router->url($request, null, 'stats', 'issues', 'issues'),
|
|
'isCurrent' => $router->getRequestedPage($request) === 'stats' && $router->getRequestedOp($request) === 'issues',
|
|
];
|
|
$statsPublicationsIndex = array_search('publications', array_keys($menu['statistics']));
|
|
$menu['statistics']['submenu'] = array_slice($menu['statistics']['submenu'], 0, $statsPublicationsIndex + 1, true) +
|
|
['issues' => $statsIssuesLink] +
|
|
array_slice($menu['statistics']['submenu'], $statsPublicationsIndex + 1, null, true);
|
|
}
|
|
|
|
// Add payments link before settings
|
|
if ($request->getContext()->getData('paymentsEnabled') && array_intersect([Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUBSCRIPTION_MANAGER], $userRoles)) {
|
|
$paymentsLink = [
|
|
'name' => __('common.payments'),
|
|
'url' => $router->url($request, null, 'payments'),
|
|
'isCurrent' => $request->getRequestedPage() === 'payments',
|
|
];
|
|
|
|
$index = array_search('settings', array_keys($menu));
|
|
if ($index === false || count($menu) === $index) {
|
|
$menu['payments'] = $paymentsLink;
|
|
} else {
|
|
$menu = array_slice($menu, 0, $index, true) +
|
|
['payments' => $paymentsLink] +
|
|
array_slice($menu, $index, null, true);
|
|
}
|
|
|
|
// add institutions menu if needed
|
|
$institutionsLink = [
|
|
'name' => __('institution.institutions'),
|
|
'url' => $router->url($request, null, 'management', 'settings', 'institutions'),
|
|
'isCurrent' => $request->getRequestedPage() === 'management' && in_array('institutions', (array) $request->getRequestedArgs()),
|
|
];
|
|
$paymentsIndex = array_search('payments', array_keys($menu));
|
|
$menu = array_slice($menu, 0, $paymentsIndex, true) +
|
|
['institutions' => $institutionsLink] +
|
|
array_slice($menu, $paymentsIndex, null, true);
|
|
}
|
|
|
|
$this->setState(['menu' => $menu]);
|
|
}
|
|
}
|
|
|
|
if (!PKP_STRICT_MODE) {
|
|
class_alias('\APP\template\TemplateManager', '\TemplateManager');
|
|
}
|