Skip to content

Commit 7c334e1

Browse files
Merge branch 'removeScieloJournalAuthor340-884' into 'stable-3_4_0'
Remove papel "Periódico SciELO" automaticamente dos contribuidores See merge request softwares-pkp/plugins_ojs/doiscielo!38
2 parents 3d71a22 + 14ddf31 commit 7c334e1

9 files changed

Lines changed: 269 additions & 77 deletions

.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ variables:
33

44
include:
55
- project: 'documentacao-e-tarefas/modelosparaintegracaocontinua'
6-
ref: main
6+
ref: stable-3_4_0
77
file:
88
- 'templates/groups/pkp_plugin.yml'
99
- 'templates/groups/ops/unit_tests.yml'

ScieloScreeningPlugin.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
use APP\template\TemplateManager;
2323
use PKP\core\JSONMessage;
2424
use APP\pages\submission\SubmissionHandler;
25+
use Illuminate\Support\Facades\Event;
2526
use Illuminate\Database\Migrations\Migration;
2627
use APP\plugins\generic\scieloScreening\classes\components\forms\NumberContributorsForm;
2728
use APP\plugins\generic\scieloScreening\classes\ScreeningExecutor;
2829
use APP\plugins\generic\scieloScreening\classes\ScreeningChecker;
2930
use APP\plugins\generic\scieloScreening\classes\DocumentChecker;
3031
use APP\plugins\generic\scieloScreening\classes\OrcidClient;
3132
use APP\plugins\generic\scieloScreening\classes\migration\EncryptLegacyCredentials;
33+
use APP\plugins\generic\scieloScreening\classes\observers\listeners\FilterAuthorsOnSubmission;
3234
use APP\plugins\generic\scieloScreening\ScieloScreeningSettingsForm;
3335

3436
class ScieloScreeningPlugin extends GenericPlugin
@@ -53,6 +55,8 @@ public function register($category, $path, $mainContextId = null)
5355
Hook::add('Settings::Workflow::listScreeningPlugins', [$this, 'listPluginScreeningRules']);
5456

5557
$this->loadDispatcherClasses();
58+
59+
Event::subscribe(new FilterAuthorsOnSubmission());
5660
}
5761
return $success;
5862
}
@@ -317,16 +321,16 @@ public function addToWorkFlow($hookName, $params)
317321

318322
public function addPdfsWarningToGalleysTab($hookName, $params)
319323
{
320-
$smarty = & $params[1];
321-
$output = & $params[2];
324+
$smarty = &$params[1];
325+
$output = &$params[2];
322326

323327
$output .= sprintf('%s', $smarty->fetch($this->getTemplateResource('addGalleysWarning.tpl')));
324328
}
325329

326330
public function listPluginScreeningRules($hookName, $args)
327331
{
328-
$rules = & $args[0];
329-
$ourRulesSuffix = ['affiliation','orcidLeastOne', 'numberContributors', 'uppercaseContributors', 'numPdfs', 'metadataEnglish'];
332+
$rules = &$args[0];
333+
$ourRulesSuffix = ['affiliation', 'orcidLeastOne', 'numberContributors', 'uppercaseContributors', 'numPdfs', 'metadataEnglish'];
330334
$ourRulesString = "<p>" . $this->getDisplayName() . "<br><br>" . $this->getDescription() . "<ul>";
331335

332336
foreach ($ourRulesSuffix as $suffix) {

classes/ScieloScreeningDAO.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace APP\plugins\generic\scieloScreening\classes;
4+
5+
use PKP\db\DAO;
6+
use Illuminate\Support\Facades\DB;
7+
8+
class ScieloScreeningDAO extends DAO
9+
{
10+
private const SCIELO_JOURNAL_ABBREV = 'SciELO';
11+
private const SETTINGS_SEARCH_LOCALES = ['pt_BR', 'en'];
12+
13+
public function getScieloJournalUserGroupId(int $contextId): ?int
14+
{
15+
$result = DB::table('user_groups AS ug')
16+
->leftJoin('user_group_settings AS ugs', 'ug.user_group_id', '=', 'ugs.user_group_id')
17+
->where('ug.context_id', $contextId)
18+
->where('ugs.setting_name', 'abbrev')
19+
->where('ugs.setting_value', self::SCIELO_JOURNAL_ABBREV)
20+
->whereIn('ugs.locale', self::SETTINGS_SEARCH_LOCALES)
21+
->first();
22+
23+
if (is_null($result)) {
24+
return null;
25+
}
26+
27+
return get_object_vars($result)['user_group_id'];
28+
}
29+
30+
public function userIsInUserGroup(int $userId, int $userGroupId): bool
31+
{
32+
return DB::table('user_user_groups')
33+
->where('user_id', $userId)
34+
->where('user_group_id', $userGroupId)
35+
->exists();
36+
}
37+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace APP\plugins\generic\scieloScreening\classes\observers\listeners;
4+
5+
use Illuminate\Events\Dispatcher;
6+
use PKP\observers\events\SubmissionSubmitted;
7+
use APP\facades\Repo;
8+
use APP\plugins\generic\scieloScreening\classes\ScieloScreeningDAO;
9+
10+
class FilterAuthorsOnSubmission
11+
{
12+
public function subscribe(Dispatcher $events): void
13+
{
14+
$events->listen(
15+
SubmissionSubmitted::class,
16+
FilterAuthorsOnSubmission::class
17+
);
18+
}
19+
20+
public function handle(SubmissionSubmitted $event): void
21+
{
22+
$submission = $event->submission;
23+
$contextId = $event->context->getId();
24+
$publication = $submission->getCurrentPublication();
25+
26+
$scieloScreeningDao = new ScieloScreeningDAO();
27+
$scieloJournalUserGroupId = $scieloScreeningDao->getScieloJournalUserGroupId($contextId);
28+
29+
foreach ($publication->getData('authors') as $author) {
30+
$user = Repo::user()->getByEmail($author->getData('email'));
31+
if (is_null($user)) {
32+
continue;
33+
}
34+
35+
if ($scieloScreeningDao->userIsInUserGroup($user->getId(), $scieloJournalUserGroupId)) {
36+
Repo::author()->delete($author);
37+
}
38+
}
39+
}
40+
}

cypress/support/commands.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
Cypress.Commands.add('beginSubmission', (submissionData) => {
2+
cy.get('input[name="locale"][value="en"]').click();
3+
cy.setTinyMceContent('startSubmission-title-control', submissionData.title);
4+
5+
cy.get('input[name="submissionRequirements"]').check();
6+
cy.get('input[name="privacyConsent"]').check();
7+
cy.contains('button', 'Begin Submission').click();
8+
});
9+
10+
Cypress.Commands.add('detailsStep', (submissionData, options = {}) => {
11+
const { fillKeywords = false } = options;
12+
13+
cy.setTinyMceContent('titleAbstract-abstract-control-en', submissionData.abstract);
14+
15+
if (fillKeywords) {
16+
submissionData.keywords.forEach(keyword => {
17+
cy.get('#titleAbstract-keywords-control-en').type(keyword, {delay: 0});
18+
cy.wait(500);
19+
cy.get('#titleAbstract-keywords-control-en').type('{enter}', {delay: 0});
20+
});
21+
}
22+
23+
cy.contains('button', 'Continue').click();
24+
});
25+
26+
Cypress.Commands.add('addContributor', (contributorData, options = {}) => {
27+
const { toUpperCase = false, fillAffiliation = true } = options;
28+
29+
let given = toUpperCase ? contributorData.given.toUpperCase() : contributorData.given;
30+
let family = toUpperCase ? contributorData.family.toUpperCase() : contributorData.family;
31+
32+
cy.contains('button', 'Add Contributor').click();
33+
cy.get('input[name="givenName-en"]').type(given, {delay: 0});
34+
cy.get('input[name="familyName-en"]').type(family, {delay: 0});
35+
cy.get('input[name="email"]').type(contributorData.email, {delay: 0});
36+
cy.get('select[name="country"]').select(contributorData.country);
37+
38+
if ('orcid' in contributorData) {
39+
cy.get('input[name="orcid"]').type(contributorData.orcid, {delay: 0});
40+
}
41+
42+
if (fillAffiliation) {
43+
cy.get('input[name="affiliation-en"]').should('have.attr', 'required');
44+
cy.get('input[name="affiliation-en"]').type(contributorData.affiliation, {delay: 0});
45+
}
46+
47+
cy.get('.modal__panel:contains("Add Contributor")').find('button').contains('Save').click();
48+
cy.waitJQuery();
49+
});
50+
151
Cypress.Commands.add('findSubmission', function(tab, title) {
252
cy.get('#' + tab + '-button').click();
353
cy.get('.listPanel__itemSubtitle:visible:contains("' + title + '")').first()

cypress/tests/Test1_submissionWizard.cy.js

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,5 @@
11
import '../support/commands.js';
22

3-
function beginSubmission(submissionData) {
4-
cy.get('input[name="locale"][value="en"]').click();
5-
cy.setTinyMceContent('startSubmission-title-control', submissionData.title);
6-
7-
cy.get('input[name="submissionRequirements"]').check();
8-
cy.get('input[name="privacyConsent"]').check();
9-
cy.contains('button', 'Begin Submission').click();
10-
}
11-
12-
function detailsStep(submissionData) {
13-
cy.setTinyMceContent('titleAbstract-abstract-control-en', submissionData.abstract);
14-
cy.contains('button', 'Continue').click();
15-
}
16-
17-
function addContributor(contributorData, toUpperCase = false) {
18-
let given = (toUpperCase) ? contributorData.given.toUpperCase() : contributorData.given;
19-
let family = (toUpperCase) ? contributorData.family.toUpperCase() : contributorData.family;
20-
21-
cy.contains('button', 'Add Contributor').click();
22-
cy.get('input[name="givenName-en"]').type(given, {delay: 0});
23-
cy.get('input[name="familyName-en"]').type(family, {delay: 0});
24-
cy.get('input[name="email"]').type(contributorData.email, {delay: 0});
25-
cy.get('select[name="country"]').select(contributorData.country);
26-
27-
if ('orcid' in contributorData) {
28-
cy.get('input[name="orcid"]').type(contributorData.orcid, {delay: 0});
29-
}
30-
31-
cy.get('input[name="affiliation-en"]').should('have.attr', 'required');
32-
cy.get('input[name="affiliation-en"]').type(contributorData.affiliation, {delay: 0});
33-
34-
cy.get('.modal__panel:contains("Add Contributor")').find('button').contains('Save').click();
35-
cy.waitJQuery();
36-
}
37-
383
describe('SciELO Screening Plugin - Submission wizard tests', function() {
394
let submissionData;
405
let files;
@@ -96,8 +61,8 @@ describe('SciELO Screening Plugin - Submission wizard tests', function() {
9661
cy.login('dphillips', null, 'publicknowledge');
9762
cy.get('div#myQueue a:contains("New Submission")').click();
9863

99-
beginSubmission(submissionData);
100-
detailsStep(submissionData);
64+
cy.beginSubmission(submissionData);
65+
cy.detailsStep(submissionData);
10166
cy.contains('button', 'Continue').click();
10267

10368
cy.get('.contributorsListPanel button:contains("Delete")').click();
@@ -108,7 +73,7 @@ describe('SciELO Screening Plugin - Submission wizard tests', function() {
10873
cy.contains('Please inform the total number of contributors to this publication');
10974
cy.get('input[name="numberContributors"]').clear().type('5', {delay: 0});
11075

111-
addContributor(submissionData.contributors[0]);
76+
cy.addContributor(submissionData.contributors[0]);
11277
cy.contains('button', 'Continue').click();
11378
cy.contains('button', 'Continue').click();
11479
cy.wait(1000);
@@ -129,7 +94,7 @@ describe('SciELO Screening Plugin - Submission wizard tests', function() {
12994
cy.contains('button', 'Continue').click();
13095
cy.contains('button', 'Continue').click();
13196

132-
addContributor(submissionData.contributors[1], true);
97+
cy.addContributor(submissionData.contributors[1], { toUpperCase: true });
13398
cy.get('input[name="numberContributors"]').clear().type('2', {delay: 0});
13499
cy.contains('button', 'Continue').click();
135100
cy.contains('button', 'Continue').click();
@@ -144,7 +109,7 @@ describe('SciELO Screening Plugin - Submission wizard tests', function() {
144109
cy.contains('button', 'Delete Contributor').click();
145110
cy.waitJQuery();
146111

147-
addContributor(submissionData.contributors[1]);
112+
cy.addContributor(submissionData.contributors[1]);
148113
cy.contains('button', 'Continue').click();
149114
cy.contains('button', 'Continue').click();
150115
cy.wait(1000);
@@ -162,7 +127,7 @@ describe('SciELO Screening Plugin - Submission wizard tests', function() {
162127
cy.contains('At least one contributor must have their ORCID confirmed. Please, check your e-mail');
163128

164129
cy.get('.pkpSteps__step button:contains("Contributors")').click();
165-
addContributor(submissionData.contributors[2]);
130+
cy.addContributor(submissionData.contributors[2]);
166131
cy.get('input[name="numberContributors"]').clear().type('3', {delay: 0});
167132
cy.contains('button', 'Continue').click();
168133
cy.contains('button', 'Continue').click();

cypress/tests/Test2_workflowFeatures.cy.js

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,5 @@
11
import '../support/commands.js';
22

3-
function beginSubmission(submissionData) {
4-
cy.get('input[name="locale"][value="en"]').click();
5-
cy.setTinyMceContent('startSubmission-title-control', submissionData.title);
6-
7-
cy.get('input[name="submissionRequirements"]').check();
8-
cy.get('input[name="privacyConsent"]').check();
9-
cy.contains('button', 'Begin Submission').click();
10-
}
11-
12-
function detailsStep(submissionData) {
13-
cy.setTinyMceContent('titleAbstract-abstract-control-en', submissionData.abstract);
14-
cy.contains('button', 'Continue').click();
15-
}
16-
17-
function addContributor(contributorData) {
18-
cy.contains('button', 'Add Contributor').click();
19-
cy.get('input[name="givenName-en"]').type(contributorData.given, {delay: 0});
20-
cy.get('input[name="familyName-en"]').type(contributorData.family, {delay: 0});
21-
cy.get('input[name="email"]').type(contributorData.email, {delay: 0});
22-
cy.get('select[name="country"]').select(contributorData.country);
23-
24-
cy.get('.modal__panel:contains("Add Contributor")').find('button').contains('Save').click();
25-
cy.waitJQuery();
26-
}
27-
283
describe('SciELO Screening Plugin - WorkFlow features tests', function() {
294
let screenedSubmissionTitle;
305
let unscreenedSubmissionData;
@@ -129,12 +104,12 @@ describe('SciELO Screening Plugin - WorkFlow features tests', function() {
129104
cy.login('dphillips', null, 'publicknowledge');
130105
cy.get('div#myQueue a:contains("New Submission")').click();
131106

132-
beginSubmission(unscreenedSubmissionData);
133-
detailsStep(unscreenedSubmissionData);
107+
cy.beginSubmission(unscreenedSubmissionData);
108+
cy.detailsStep(unscreenedSubmissionData);
134109
cy.addSubmissionGalleys([dummyPdf, dummyPdf]);
135110
cy.contains('button', 'Continue').click();
136-
addContributor(unscreenedSubmissionData.contributors[0]);
137-
addContributor(unscreenedSubmissionData.contributors[1]);
111+
cy.addContributor(unscreenedSubmissionData.contributors[0], { fillAffiliation: false });
112+
cy.addContributor(unscreenedSubmissionData.contributors[1], { fillAffiliation: false });
138113
cy.contains('button', 'Continue').click();
139114
cy.contains('button', 'Continue').click();
140115
cy.wait(1000);

0 commit comments

Comments
 (0)