From cac59048aad43b2d797c70b92c77accb0f12692a Mon Sep 17 00:00:00 2001 From: Alec Smecher Date: Mon, 8 Sep 2025 13:57:57 -0700 Subject: [PATCH] pkp/pkp-lib#11796 Fix validation of author competing interest statement --- classes/author/Repository.php | 10 +++++++++- .../components/forms/publication/ContributorForm.php | 1 + schemas/author.json | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/classes/author/Repository.php b/classes/author/Repository.php index eb1401e3936..f7478f365cd 100644 --- a/classes/author/Repository.php +++ b/classes/author/Repository.php @@ -131,7 +131,7 @@ public function validate($author, $props, Submission $submission, Context $conte // Check for input from disallowed locales ValidatorFactory::allowedLocales($validator, $schemaService->getMultilingualProps(PKPSchemaService::SCHEMA_AUTHOR), $allowedLocales); - $validator->after(function ($validator) use ($props, $submission) { + $validator->after(function ($validator) use ($props, $submission, $context, $primaryLocale) { // publicationId must match an existing publication that is not yet published if (isset($props['publicationId']) && !$validator->errors()->get('publicationId')) { $publication = Repo::publication()->get($props['publicationId']); @@ -157,6 +157,14 @@ public function validate($author, $props, Submission $submission, Context $conte ); } } + + // Author CI statement required? + if ($context->getSetting('requireAuthorCompetingInterests') && empty($props['competingInterests'][$primaryLocale])) { + $validator->errors()->add( + "competingInterests.{$primaryLocale}", + __('author.competingInterests.required') + ); + } }); $errors = []; diff --git a/classes/components/forms/publication/ContributorForm.php b/classes/components/forms/publication/ContributorForm.php index 88b48b54c57..e399f646d81 100644 --- a/classes/components/forms/publication/ContributorForm.php +++ b/classes/components/forms/publication/ContributorForm.php @@ -109,6 +109,7 @@ public function __construct(string $action, array $locales, ?Submission $submiss 'label' => __('author.competingInterests'), 'description' => __('author.competingInterests.description'), 'isMultilingual' => true, + 'isRequired' => true, ])); } $this->addField(new FieldRichTextarea('biography', [ diff --git a/schemas/author.json b/schemas/author.json index 44603f59080..83412593658 100644 --- a/schemas/author.json +++ b/schemas/author.json @@ -28,7 +28,10 @@ "competingInterests": { "type": "string", "description": "A declaration of potential competing interests.", - "multilingual": "true" + "multilingual": "true", + "validation": [ + "nullable" + ] }, "country": { "type": "string",