93 lines
2.4 KiB
PHP
93 lines
2.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/doi/RegistrationAgencySettings.php
|
|
*
|
|
* Copyright (c) 2014-2023 Simon Fraser University
|
|
* Copyright (c) 2000-2023 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class RegistrationAgencySettings
|
|
*
|
|
* @ingroup doi
|
|
*
|
|
* @brief Base class for registration agency plugin settings management
|
|
*/
|
|
|
|
namespace PKP\doi;
|
|
|
|
use APP\core\Services;
|
|
use APP\plugins\IDoiRegistrationAgency;
|
|
use Illuminate\Validation\Validator;
|
|
use PKP\components\forms\Field;
|
|
use PKP\context\Context;
|
|
use PKP\plugins\Hook;
|
|
use PKP\plugins\Plugin;
|
|
use PKP\services\interfaces\EntityWriteInterface;
|
|
use PKP\services\PKPSchemaService;
|
|
use PKP\validation\ValidatorFactory;
|
|
|
|
abstract class RegistrationAgencySettings
|
|
{
|
|
protected IDoiRegistrationAgency|Plugin $agencyPlugin;
|
|
|
|
public function __construct(IDoiRegistrationAgency $agencyPlugin)
|
|
{
|
|
$this->agencyPlugin = $agencyPlugin;
|
|
Hook::add('Schema::get::' . $this::class, [$this, 'addToSchema']);
|
|
}
|
|
|
|
public function validate(array $props): array
|
|
{
|
|
/** @var PKPSchemaService $schemaService */
|
|
$schemaService = Services::get('schema');
|
|
|
|
$validator = ValidatorFactory::make(
|
|
$props,
|
|
$schemaService->getValidationRules($this::class, []),
|
|
);
|
|
|
|
// Check required
|
|
ValidatorFactory::required(
|
|
$validator,
|
|
EntityWriteInterface::VALIDATE_ACTION_EDIT,
|
|
$schemaService->getRequiredProps($this::class),
|
|
$schemaService->getMultilingualProps($this::class),
|
|
[],
|
|
'',
|
|
);
|
|
|
|
$this->addValidationChecks($validator, $props);
|
|
|
|
if ($validator->fails()) {
|
|
$errors = $schemaService->formatValidationErrors($validator->errors());
|
|
}
|
|
|
|
return $errors ?? [];
|
|
}
|
|
|
|
abstract public function getSchema(): \stdClass;
|
|
|
|
public function addToSchema($hookname, $args): bool
|
|
{
|
|
$schema = &$args[0];
|
|
$schema = $this->getSchema();
|
|
|
|
return Hook::CONTINUE;
|
|
}
|
|
|
|
/**
|
|
* Gets plugin-specific settings field to inject into DOI registration settings form.
|
|
*
|
|
* @return Field[]
|
|
*/
|
|
abstract public function getFields(Context $context): array;
|
|
|
|
/**
|
|
* Overwrite to add additional, plugin-specific validation checks
|
|
*/
|
|
protected function addValidationChecks(Validator &$validator, array $props): void
|
|
{
|
|
}
|
|
}
|