Skip to content

Commit

Permalink
Merge branch 'checksTranslatorSubmitter-726' into 'main'
Browse files Browse the repository at this point in the history
Adiciona verificações sobre tradutor e submissor

See merge request softwares-pkp/plugins_ojs/scieloTranslationsFields!4
  • Loading branch information
JhonathanLepidus committed Dec 11, 2024
2 parents 1305f57 + d4eb469 commit fbf0e83
Show file tree
Hide file tree
Showing 13 changed files with 581 additions and 46 deletions.
37 changes: 32 additions & 5 deletions ScieloTranslationsFieldsPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use APP\pages\submission\SubmissionHandler;
use APP\plugins\generic\scieloTranslationsFields\api\v1\translationsFields\TranslationsFieldsHandler;
use APP\plugins\generic\scieloTranslationsFields\classes\components\forms\TranslationDataForm;
use APP\plugins\generic\scieloTranslationsFields\classes\DoiValidator;
use APP\plugins\generic\scieloTranslationsFields\classes\FieldsValidator;

class ScieloTranslationsFieldsPlugin extends GenericPlugin
{
Expand Down Expand Up @@ -177,15 +177,42 @@ public function validateSubmissionFields($hookName, $params)
$submission = $params[1];
$publication = $submission->getCurrentPublication();

$fieldsValidator = new FieldsValidator();
$originalDocumentDoi = $publication->getData('originalDocumentDoi');

if (empty($originalDocumentDoi)) {
$errors['originalDocumentDoi'] = [__('plugins.generic.scieloTranslationsFields.error.originalDocumentDoi.required')];
return Hook::CONTINUE;
} elseif (!$fieldsValidator->validateDoi($originalDocumentDoi)) {
$errors['originalDocumentDoi'] = [__('plugins.generic.scieloTranslationsFields.error.originalDocumentDoi.invalidDoi')];
}

$doiValidator = new DoiValidator();
if (!$doiValidator->validate($originalDocumentDoi)) {
$errors['originalDocumentDoi'] = [__('plugins.generic.scieloTranslationsFields.error.originalDocumentDoi.invalidDoi')];
$contextId = $submission->getData('contextId');
$translatorsUserGroup = $fieldsValidator->getTranslatorsUserGroup($contextId);
if (!is_null($translatorsUserGroup)) {
$submissionHasTranslator = $fieldsValidator->submissionHasTranslator($submission, $translatorsUserGroup->getId());
$contributorsErrors = $errors['contributors'] ?? [];

if (!$submissionHasTranslator) {
$contributorsErrors[] = __('plugins.generic.scieloTranslationsFields.error.contributors.oneTranslator');
} elseif (!$fieldsValidator->translatorsHaveOrcid($submission, $translatorsUserGroup->getId())) {
$contributorsErrors[] = __('plugins.generic.scieloTranslationsFields.error.contributors.translatorOrcid');
}
}

$submitter = $fieldsValidator->getSubmitterUser($submission->getId());
if ($submitter) {
$contributor = $fieldsValidator->getContributorForUser($submission, $submitter);
if ($contributor) {
if (empty($contributor->getData('orcid'))) {
$contributorsErrors[] = __('plugins.generic.scieloTranslationsFields.error.contributors.submitterOrcid');
}
} elseif (empty($submitter->getData('orcid'))) {
$contributorsErrors[] = __('plugins.generic.scieloTranslationsFields.error.contributors.submitterUserOrcid');
}
}

if (!empty($contributorsErrors)) {
$errors['contributors'] = $contributorsErrors;
}

return Hook::CONTINUE;
Expand Down
6 changes: 3 additions & 3 deletions api/v1/translationsFields/TranslationsFieldsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
use PKP\db\DAORegistry;
use APP\facades\Repo;
use APP\plugins\generic\scieloTranslationsFields\classes\clients\DoiClient;
use APP\plugins\generic\scieloTranslationsFields\classes\DoiValidator;
use APP\plugins\generic\scieloTranslationsFields\classes\FieldsValidator;

class TranslationsFieldsHandler extends APIHandler
{
Expand Down Expand Up @@ -51,8 +51,8 @@ private function getSubmission($slimRequest)

private function validateOriginalDoi($originalDocumentDoi)
{
$doiValidator = new DoiValidator();
return $doiValidator->validate($originalDocumentDoi);
$fieldsValidator = new FieldsValidator();
return $fieldsValidator->validateDoi($originalDocumentDoi);
}

public function saveTranslationFields($slimRequest, $response, $args)
Expand Down
11 changes: 0 additions & 11 deletions classes/DoiValidator.php

This file was deleted.

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

namespace APP\plugins\generic\scieloTranslationsFields\classes;

use PKP\userGroup\UserGroup;
use APP\submission\Submission;
use APP\author\Author;
use PKP\user\User;
use APP\facades\Repo;
use APP\plugins\generic\scieloTranslationsFields\classes\TranslationsFieldsDAO;

class FieldsValidator
{
public function validateDoi(string $doi): bool
{
return (preg_match('/^10\.\d{4,9}\/[-._;()\/:A-Z0-9]+$/i', $doi) === 1);
}

public function getTranslatorsUserGroup(int $contextId): ?UserGroup
{
$contextUserGroups = Repo::userGroup()->getCollector()
->filterByContextIds([$contextId])
->getMany();

foreach ($contextUserGroups as $userGroup) {
$userGroupAbbrev = strtolower($userGroup->getData('abbrev', 'en'));

if ($userGroupAbbrev === 'tr') {
return $userGroup;
}
}

return null;
}

public function submissionHasTranslator(Submission $submission, int $translatorsUserGroupId): bool
{
$publication = $submission->getCurrentPublication();
$authors = $publication->getData('authors');

foreach ($authors as $author) {
$authorUserGroupId = $author->getData('userGroupId');

if ($authorUserGroupId == $translatorsUserGroupId) {
return true;
}
}

return false;
}

public function translatorsHaveOrcid(Submission $submission, int $translatorsUserGroupId): bool
{
$publication = $submission->getCurrentPublication();
$authors = $publication->getData('authors');

foreach ($authors as $author) {
$authorUserGroupId = $author->getData('userGroupId');

if ($authorUserGroupId == $translatorsUserGroupId) {
$authorOrcid = $author->getData('orcid');

if (empty($authorOrcid)) {
return false;
}
}
}

return true;
}

public function getSubmitterUser(int $submissionId): ?User
{
$translationsFieldsDao = new TranslationsFieldsDAO();
$submitterId = $translationsFieldsDao->getSubmitterId($submissionId);

if (is_null($submitterId)) {
return null;
}

return Repo::user()->get($submitterId);
}

public function getContributorForUser(Submission $submission, User $user): ?Author
{
$publication = $submission->getCurrentPublication();
$userEmail = $user->getData('email');

foreach ($publication->getData('authors') as $author) {
if ($author->getData('email') == $userEmail) {
return $author;
}
}

return null;
}
}
26 changes: 26 additions & 0 deletions classes/TranslationsFieldsDAO.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace APP\plugins\generic\scieloTranslationsFields\classes;

use PKP\db\DAO;
use Illuminate\Support\Facades\DB;
use PKP\security\Role;

class TranslationsFieldsDAO extends DAO
{
public function getSubmitterId($submissionId)
{
$result = DB::table('stage_assignments AS sa')
->leftJoin('user_groups AS ug', 'sa.user_group_id', '=', 'ug.user_group_id')
->where('sa.submission_id', $submissionId)
->where('ug.role_id', Role::ROLE_ID_AUTHOR)
->select('sa.user_id')
->first();

if (!$result) {
return null;
}

return get_object_vars($result)['user_id'];
}
}
9 changes: 9 additions & 0 deletions cypress/tests/Test0_pluginSetup.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,13 @@ describe('Plugin configuration', function () {
cy.get('input[id^=select-cell-scielotranslationsfieldsplugin]').check();
cy.get('input[id^=select-cell-scielotranslationsfieldsplugin]').should('be.checked');
});
it('Adds ORCID to user profile', function () {
cy.login('ckwantes', null, 'publicknowledge');
cy.get('.app__headerActions button').eq(1).click();
cy.contains('a', 'Edit Profile').click();

cy.get('a[name="publicProfile"]').click();
cy.get('input[name="orcid"]').type('https://orcid.org/0000-0002-1825-0097', {delay: 0});
cy.get('.submitFormButton:visible').click();
});
});
Loading

0 comments on commit fbf0e83

Please sign in to comment.