Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to Version 3.4 #236

Merged
merged 9 commits into from
Feb 16, 2023
200 changes: 112 additions & 88 deletions pages/OrcidHandler.inc.php → OrcidProfileHandler.php

Large diffs are not rendered by default.

977 changes: 631 additions & 346 deletions OrcidProfilePlugin.inc.php → OrcidProfilePlugin.php

Large diffs are not rendered by default.

130 changes: 0 additions & 130 deletions OrcidProfileSettingsForm.inc.php

This file was deleted.

39 changes: 39 additions & 0 deletions classes/OrcidValidator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace APP\plugins\generic\orcidProfile\classes;

class OrcidValidator {

/**
* OrcidValidator constructor.
* @param $plugin
*/
function __construct(&$plugin) {
$this->plugin =& $plugin;
}

/**
* @param $str
* @return bool
*/
public function validateClientId($str) {
$valid = false;
if (preg_match('/^APP-[\da-zA-Z]{16}|(\d{4}-){3,}\d{3}[\dX]/', $str) == 1) {
$valid = true;
}
return $valid;
}

/**
* @param $str
* @return bool
*/
public function validateClientSecret($str) {
$valid = false;
if (preg_match('/^(\d|-|[a-f]){36,64}/', $str) == 1) {
$valid = true;
}
return $valid;
}

}
142 changes: 142 additions & 0 deletions classes/form/OrcidProfileSettingsForm.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
<?php

/**
* @file OrcidProfileSettingsForm.inc.php
*
* Copyright (c) 2015-2019 University of Pittsburgh
* 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 OrcidProfileSettingsForm
* @ingroup plugins_generic_orcidProfile
*
* @brief Form for site admins to modify ORCID Profile plugin settings
*/

namespace APP\plugins\generic\orcidProfile\classes\form;

use APP\core\Application;
use PKP\form\Form;
use APP\plugins\generic\orcidProfile\classes\OrcidValidator;
use APP\template\TemplateManager;


class OrcidProfileSettingsForm extends Form {

const CONFIG_VARS = array(
'orcidProfileAPIPath' => 'string',
'orcidClientId' => 'string',
'orcidClientSecret' => 'string',
'sendMailToAuthorsOnPublication' => 'bool',
'logLevel' => 'string',
'isSandBox' => 'bool',
'country' => 'string',
'city' => 'string'

);
/** @var $contextId int */
var $contextId;

/** @var $plugin object */
var $plugin;

var $validator;

/**
* Constructor
* @param $plugin object
* @param $contextId int
*/
function __construct($plugin, $contextId) {
$this->contextId = $contextId;
$this->plugin = $plugin;
$orcidValidator = new OrcidValidator($plugin);
$this->validator = $orcidValidator;
parent::__construct($plugin->getTemplateResource('settingsForm.tpl'));
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));

if (!$this->plugin->isGloballyConfigured()) {
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'orcidProfileAPIPath', 'required', 'plugins.generic.orcidProfile.manager.settings.orcidAPIPathRequired'));
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'orcidClientId', 'required', 'plugins.generic.orcidProfile.manager.settings.orcidClientId.error', function ($clientId) {
return $this->validator->validateClientId($clientId);
}));
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'orcidClientSecret', 'required', 'plugins.generic.orcidProfile.manager.settings.orcidClientSecret.error', function ($clientSecret) {
return $this->validator->validateClientSecret($clientSecret);
}));
}

}

/**
* Initialize form data.
*/
function initData() {
$contextId = $this->contextId;
$plugin =& $this->plugin;
$this->_data = array();
foreach (self::CONFIG_VARS as $configVar => $type) {
$this->_data[$configVar] = $plugin->getSetting($contextId, $configVar);
}
}

/**
* Assign form data to user-submitted data.
*/
function readInputData() {
$this->readUserVars(array_keys(self::CONFIG_VARS));
}

/**
* Fetch the form.
* @copydoc Form::fetch()
*/
function fetch($request, $template = null, $display = false) {
$templateMgr = TemplateManager::getManager($request);
$templateMgr->assign('globallyConfigured', $this->plugin->isGloballyConfigured());
$templateMgr->assign('pluginName', $this->plugin->getName());
$templateMgr->assign('applicationName', Application::get()->getName());
return parent::fetch($request, $template, $display);
}

/**
* @copydoc Form::execute()
*/
function execute(...$functionArgs) {
$plugin =& $this->plugin;
$contextId = $this->contextId;
foreach (self::CONFIG_VARS as $configVar => $type) {
if ($configVar === 'orcidProfileAPIPath') {
$plugin->updateSetting($contextId, $configVar, trim($this->getData($configVar), "\"\';"), $type);
} else {
$plugin->updateSetting($contextId, $configVar, $this->getData($configVar), $type);
}
}
if (strpos($this->getData("orcidProfileAPIPath"), "sandbox.orcid.org") == true) {
$plugin->updateSetting($contextId, "isSandBox", true, "bool");
}

parent::execute(...$functionArgs);
}

public function _checkPrerequisites() {
$messages = array();

$clientId = $this->getData('orcidClientId');
if (!$this->validator->validateClientId($clientId)) {
$messages[] = __('plugins.generic.orcidProfile.manager.settings.orcidClientId.error');
}
$clientSecret = $this->getData('orcidClientSecret');
if (!$this->validator->validateClientSecret($clientSecret)) {
$messages[] = __('plugins.generic.orcidProfile.manager.settings.orcidClientSecret.error');
}
if (strlen($clientId) == 0 or strlen($clientSecret) == 0) {
$this->plugin->setEnabled(false);
}
return $messages;
}


}

Loading