<?php
/**
* @file classes/core/Application.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 Application
*
* @ingroup core
*
* @see PKPApplication
*
* @brief Class describing this application.
*
*/
namespace APP\core;
use APP\facades\Repo;
use APP\journal\JournalDAO;
use APP\payment\ojs\OJSPaymentManager;
use PKP\context\Context;
use PKP\core\PKPApplication;
use PKP\db\DAORegistry;
use PKP\facades\Locale;
use PKP\security\Role;
use PKP\submission\RepresentationDAOInterface;
class Application extends PKPApplication
{
public const ASSOC_TYPE_ARTICLE = self::ASSOC_TYPE_SUBMISSION; // DEPRECATED but needed by filter framework;
public const ASSOC_TYPE_GALLEY = self::ASSOC_TYPE_REPRESENTATION;
public const ASSOC_TYPE_JOURNAL = 0x0000100;
public const ASSOC_TYPE_ISSUE = 0x0000103;
public const ASSOC_TYPE_ISSUE_GALLEY = 0x0000105;
public const CONTEXT_JOURNAL = 1; // not used?
public const REQUIRES_XSL = false;
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
if (!PKP_STRICT_MODE) {
foreach ([
'REQUIRES_XSL',
'ASSOC_TYPE_ARTICLE',
'ASSOC_TYPE_GALLEY',
'ASSOC_TYPE_JOURNAL',
'ASSOC_TYPE_ISSUE',
'ASSOC_TYPE_ISSUE_GALLEY',
'CONTEXT_JOURNAL',
] as $constantName) {
if (!defined($constantName)) {
define($constantName, constant('self::' . $constantName));
}
}
if (!class_exists('\Application')) {
class_alias('\APP\core\Application', '\Application');
}
}
// Add application locales
Locale::registerPath(BASE_SYS_DIR . '/locale');
}
/**
* Get the name of the application context.
*/
public function getContextName(): string
{
return 'journal';
}
/**
* Get the symbolic name of this application
*
* @return string
*/
public static function getName()
{
return 'ojs2';
}
/**
* Get the locale key for the name of this application.
*
* @return string
*/
public function getNameKey()
{
return('common.software');
}
/**
* Get the URL to the XML descriptor for the current version of this
* application.
*
* @return string
*/
public function getVersionDescriptorUrl()
{
return 'https://pkp.sfu.ca/ojs/xml/ojs-version.xml';
}
/**
* Get the map of DAOName => full.class.Path for this application.
*
* @return array
*/
public function getDAOMap()
{
return array_merge(parent::getDAOMap(), [
'ArticleSearchDAO' => 'APP\search\ArticleSearchDAO',
'IndividualSubscriptionDAO' => 'APP\subscription\IndividualSubscriptionDAO',
'InstitutionalSubscriptionDAO' => 'APP\subscription\InstitutionalSubscriptionDAO',
'IssueGalleyDAO' => 'APP\issue\IssueGalleyDAO',
'IssueFileDAO' => 'APP\issue\IssueFileDAO',
'JournalDAO' => 'APP\journal\JournalDAO',
'MetricsDAO' => 'APP\statistics\MetricsDAO',
'OAIDAO' => 'APP\oai\ojs\OAIDAO',
'OJSCompletedPaymentDAO' => 'APP\payment\ojs\OJSCompletedPaymentDAO',
'SubscriptionDAO' => 'APP\subscription\SubscriptionDAO',
'SubscriptionTypeDAO' => 'APP\subscription\SubscriptionTypeDAO',
'TemporaryTotalsDAO' => 'APP\statistics\TemporaryTotalsDAO',
'TemporaryItemInvestigationsDAO' => 'APP\statistics\TemporaryItemInvestigationsDAO',
'TemporaryItemRequestsDAO' => 'APP\statistics\TemporaryItemRequestsDAO',
]);
}
/**
* Get the list of plugin categories for this application.
*
* @return array
*/
public function getPluginCategories()
{
return [
// NB: Meta-data plug-ins are first in the list as this
// will make them load (and install) first.
// This is necessary as several other plug-in categories
// depend on meta-data. This is a very rudimentary type of
// dependency management for plug-ins.
'metadata',
'blocks',
'gateways',
'generic',
'importexport',
'oaiMetadataFormats',
'paymethod',
'pubIds',
'reports',
'themes'
];
}
/**
* Get the top-level context DAO.
*
* @return JournalDAO
*/
public static function getContextDAO()
{
/** @var JournalDAO */
$dao = DAORegistry::getDAO('JournalDAO');
return $dao;
}
/**
* Get the representation DAO.
*
* @return \PKP\galley\DAO&RepresentationDAOInterface
*/
public static function getRepresentationDAO(): RepresentationDAOInterface
{
return Repo::galley()->dao;
}
/**
* Get a SubmissionSearchIndex instance.
*/
public static function getSubmissionSearchIndex()
{
return new \APP\search\ArticleSearchIndex();
}
/**
* Get a SubmissionSearchDAO instance.
*/
public static function getSubmissionSearchDAO()
{
return DAORegistry::getDAO('ArticleSearchDAO');
}
/**
* Get the stages used by the application.
*
* @return array
*/
public static function getApplicationStages()
{
// We leave out WORKFLOW_STAGE_ID_PUBLISHED since it technically is not a 'stage'.
return [
WORKFLOW_STAGE_ID_SUBMISSION,
WORKFLOW_STAGE_ID_EXTERNAL_REVIEW,
WORKFLOW_STAGE_ID_EDITING,
WORKFLOW_STAGE_ID_PRODUCTION
];
}
/**
* Returns the context type for this application.
*
* @return int Application::ASSOC_TYPE_...
*/
public static function getContextAssocType()
{
return self::ASSOC_TYPE_JOURNAL;
}
/**
* Get the file directory array map used by the application.
*/
public static function getFileDirectories()
{
return ['context' => '/journals/', 'submission' => '/articles/'];
}
/**
* @copydoc PKPApplication::getRoleNames()
*
* @param null|mixed $roleIds
*/
public static function getRoleNames($contextOnly = false, $roleIds = null)
{
$roleNames = parent::getRoleNames($contextOnly, $roleIds);
if (!$roleIds || in_array(Role::ROLE_ID_SUBSCRIPTION_MANAGER, $roleIds)) {
$roleNames[Role::ROLE_ID_SUBSCRIPTION_MANAGER] = 'user.role.subscriptionManager';
}
return $roleNames;
}
/**
* Get the payment manager.
*
* @param \APP\journal\Journal $context
*
* @return OJSPaymentManager
*/
public static function getPaymentManager($context)
{
return new OJSPaymentManager($context);
}
}
|