| Server IP : 127.0.1.1 / Your IP : 216.73.216.83 Web Server : Apache/2.4.58 (Ubuntu) System : Linux nepub 6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.2.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/public_html/plugins/generic/sword/ |
Upload File : |
<?php
/**
* @file SwordHandler.inc.php
*
* Copyright (c) 2003-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file LICENSE.
*
* @class SwordHandler
* @brief Handles request for sword plugin.
*/
import('classes.handler.Handler');
class SwordHandler extends Handler {
/** @var SwordPlugin Sword plugin */
protected $_parentPlugin = null;
/**
* Constructor
*/
public function __construct() {
parent::__construct();
// set reference to markup plugin
$this->_parentPlugin = PluginRegistry::getPlugin('generic', 'swordplugin');
$this->addRoleAssignment(
[ROLE_ID_MANAGER],
['performManagerOnlyDeposit']
);
$this->addRoleAssignment(
[ROLE_ID_MANAGER, ROLE_ID_AUTHOR],
['index', 'depositPoints']
);
}
/**
* @copydoc PKPHandler::authorize()
*/
function authorize($request, &$args, $roleAssignments) {
import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
$this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
return parent::authorize($request, $args, $roleAssignments);
}
/**
* Get reference to the sword plugin
* @return SwordPlugin
*/
public function getSwordPlugin() {
return $this->_parentPlugin;
}
/**
* Returns deposit point details
* @param $args array
* @param $request PKPRequest
*
* @return JSONMessage
*/
public function depositPoints($args, $request) {
$context = $request->getContext();
$depositPointId = $request->getUserVar('depositPointId');
$this->getSwordPlugin()->import('classes.DepositPoint');
$depositPointDao = DAORegistry::getDAO('DepositPointDAO');
$depositPoint = $depositPointDao->getById($depositPointId, $context->getId());
if (!$depositPoint) {
return new JSONMessage(false);
}
$isManager = Validation::isAuthorized(ROLE_ID_MANAGER, $context->getId());
if (!$isManager && $depositPoint->getType() != SWORD_DEPOSIT_TYPE_OPTIONAL_SELECTION) {
return new JSONMessage(false);
}
$this->getSwordPlugin()->import('classes.DepositPointsHelper');
$collections = DepositPointsHelper::loadCollectionsFromServer(
$depositPoint->getSwordUrl(),
$depositPoint->getSwordUsername() ?: $request->getUserVar('username'),
$depositPoint->getSwordPassword() ?: $request->getUserVar('password'),
$depositPoint->getSwordApikey()
);
return new JSONMessage(true, [
'username' => $isManager ? $depositPoint->getSwordUsername() : null,
'password' => SWORD_PASSWORD_SLUG,
'apikey' => $isManager ? $depositPoint->getSwordApikey() : null,
'depositPoints' => $collections,
]);
}
/**
* Returns author deposit points page
* @param $args array
* @param $request PKPRequest
*
* @return JSONMessage
*/
public function index($args, $request) {
$context = $request->getContext();
$user = $request->getUser();
$submissionId = (int) array_shift($args);
$save = array_shift($args) == 'save';
$submissionDao = DAORegistry::getDAO('SubmissionDAO');
$submission = $submissionDao->getById($submissionId);
if (!$submission || !$user || !$context ||
($submission->getContextId() != $context->getId())) {
$request->redirect(null, 'index');
}
$userCanDeposit = false;
$stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO');
$daoResult = $stageAssignmentDao->getBySubmissionAndRoleId($submission->getId(), ROLE_ID_AUTHOR);
while ($record = $daoResult->next()) {
if($user->getId() == $record->getData('userId')) {
$userCanDeposit = true;
break;
}
}
if (!$userCanDeposit) {
$request->redirect(null, 'index');
}
$swordPlugin = $this->getSwordPlugin();
$swordPlugin->import('AuthorDepositForm');
$authorDepositForm = new AuthorDepositForm($swordPlugin, $context, $submission);
if ($save) {
$authorDepositForm->readInputData();
if ($authorDepositForm->validate()) {
try {
$responses = $authorDepositForm->execute($request);
$templateMgr = TemplateManager::getManager($request);
$results = [];
$depositPointDao = DAORegistry::getDAO('DepositPointDAO');
$this->getSwordPlugin()->import('classes.DepositPointsHelper');
$depositPoints = iterator_to_array($depositPointDao->getByContextId($context->getId()));
foreach ($responses as $url => $response) {
// Identify the deposit point this result relates to
$depositPoint = null;
foreach ($depositPoints as $candidateDepositPoint) {
if ($candidateDepositPoint->getSwordUrl() == $url) $depositPoint = $candidateDepositPoint;
}
// Add the result to the list
$results[] = [
'url' => $url,
'depositPoint' => $depositPoint,
'itemTitle' => $response->sac_title,
'treatment' => $response->sac_treatment,
'alternateLink' => $this->_parentPlugin->getAlternateLink($response->sac_xml),
];
}
$templateMgr->assign('results', $results);
$templateMgr->display($this->_parentPlugin->getTemplateResource('results.tpl'));
return;
} catch (Exception $e) {
$notificationManager = new NotificationManager();
$notificationManager->createTrivialNotification(
$user->getId(),
NOTIFICATION_TYPE_ERROR,
['contents' => __('plugins.importexport.sword.depositFailed') . ': ' . $e->getMessage()]
);
error_log($e->getTraceAsString());
}
}
} else {
$authorDepositForm->initData();
}
$authorDepositForm->display($request);
}
}