140 lines
5.4 KiB
PHP
140 lines
5.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file plugins/generic/datacite/classes/DataciteSetting.php
|
|
*
|
|
* Copyright (c) 2014-2023 Simon Fraser University
|
|
* Copyright (c) 2003-2023 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class DataciteSettings
|
|
*
|
|
* @ingroup plugins_generic_datacite_classes
|
|
*
|
|
* @brief Setting management class to handle schema, fields, validation, etc. for Datacite plugin
|
|
*/
|
|
|
|
namespace APP\plugins\generic\datacite\classes;
|
|
|
|
use Illuminate\Validation\Validator;
|
|
use PKP\components\forms\FieldHTML;
|
|
use PKP\components\forms\FieldOptions;
|
|
use PKP\components\forms\FieldText;
|
|
use PKP\context\Context;
|
|
|
|
class DataciteSettings extends \PKP\doi\RegistrationAgencySettings
|
|
{
|
|
public function getSchema(): \stdClass
|
|
{
|
|
return (object) [
|
|
'title' => 'Datacite Plugin',
|
|
'description' => 'Registration agency plugin for Datacite',
|
|
'type' => 'object',
|
|
'required' => [],
|
|
'properties' => (object) [
|
|
|
|
'username' => (object) [
|
|
'type' => 'string',
|
|
'validation' => ['nullable', 'max:50']
|
|
],
|
|
'password' => (object) [
|
|
'type' => 'string',
|
|
'validation' => ['nullable', 'max:50']
|
|
],
|
|
'testMode' => (object) [
|
|
'type' => 'boolean',
|
|
'validation' => ['nullable']
|
|
],
|
|
'testUsername' => (object) [
|
|
'type' => 'string',
|
|
'validation' => ['nullable', 'max:50']
|
|
],
|
|
'testPassword' => (object) [
|
|
'type' => 'string',
|
|
'validation' => ['nullable', 'max:50']
|
|
],
|
|
'testDOIPrefix' => (object) [
|
|
'type' => 'string',
|
|
'validation' => ['nullable', 'max:50']
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function getFields(Context $context): array
|
|
{
|
|
return [
|
|
new FieldHTML('preamble', [
|
|
'label' => __('plugins.importexport.datacite.settings.label'),
|
|
'description' => $this->_getPreambleText(),
|
|
]),
|
|
new FieldText('username', [
|
|
'label' => __('plugins.importexport.datacite.settings.form.username'),
|
|
'value' => $this->agencyPlugin->getSetting($context->getId(), 'username'),
|
|
]),
|
|
new FieldText('password', [
|
|
'label' => __('plugins.importexport.common.settings.form.password'),
|
|
'description' => __('plugins.importexport.common.settings.form.password.description'),
|
|
'inputType' => 'password',
|
|
'value' => $this->agencyPlugin->getSetting($context->getId(), 'password'),
|
|
]),
|
|
new FieldOptions('testMode', [
|
|
'label' => __('plugins.importexport.common.settings.form.testMode.label'),
|
|
'options' => [
|
|
['value' => true, 'label' => __('plugins.importexport.datacite.settings.form.testMode.description')],
|
|
],
|
|
'value' => $this->agencyPlugin->getSetting($context->getId(), 'testMode'),
|
|
]),
|
|
new FieldText('testUsername', [
|
|
'label' => __('plugins.importexport.datacite.settings.form.testUsername'),
|
|
'value' => $this->agencyPlugin->getSetting($context->getId(), 'testUsername'),
|
|
]),
|
|
new FieldText('testPassword', [
|
|
'label' => __('plugins.importexport.datacite.settings.form.testPassword'),
|
|
'description' => __('plugins.importexport.common.settings.form.password.description'),
|
|
'inputType' => 'password',
|
|
'value' => $this->agencyPlugin->getSetting($context->getId(), 'testPassword'),
|
|
]),
|
|
new FieldText('testDOIPrefix', [
|
|
'label' => __('plugins.importexport.datacite.settings.form.testDOIPrefix'),
|
|
'value' => $this->agencyPlugin->getSetting($context->getId(), 'testDOIPrefix'),
|
|
]),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
protected function addValidationChecks(Validator &$validator, $props): void
|
|
{
|
|
// If in test mode, the test DOI prefix must be set
|
|
$validator->after(function (Validator $validator) use ($props) {
|
|
if ($props['testMode']) {
|
|
if (empty($props['testDOIPrefix'])) {
|
|
$validator->errors()->add('testDOIPrefix', __('plugins.importexport.datacite.settings.form.testDOIPrefixRequired'));
|
|
}
|
|
}
|
|
});
|
|
|
|
// If username exists, there will be the possibility to register from within OJS,
|
|
// so the test username must exist too
|
|
$validator->after(function (Validator $validator) use ($props) {
|
|
if (!empty($props['username']) && empty($props['testUsername'])) {
|
|
$validator->errors()->add('testUsername', __('plugins.importexport.datacite.settings.form.testUsernameRequired'));
|
|
}
|
|
});
|
|
}
|
|
|
|
protected function _getPreambleText(): string
|
|
{
|
|
$text = '';
|
|
$text .= '<p>' . __('plugins.importexport.datacite.settings.description') . '</p>';
|
|
$text .= '<p>' . __('plugins.importexport.datacite.intro') . '</p>';
|
|
|
|
return $text;
|
|
}
|
|
}
|