Skip to content

Commit

Permalink
Change submission language
Browse files Browse the repository at this point in the history
  • Loading branch information
jyhein committed Nov 15, 2023
1 parent 715d3e7 commit c90cb2a
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 6 deletions.
3 changes: 2 additions & 1 deletion classes/publication/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ public function validate($publication, array $props, Submission $submission, Con
{
$errors = parent::validate($publication, $props, $submission, $context);

$allowedLocales = $context->getSupportedSubmissionLocales();
$primaryLocale = $submission->getLocale();
$allowedLocales = $context->getSupportedSubmissionLocales();
in_array($primaryLocale, $allowedLocales) || array_push($allowedLocales, $primaryLocale);

// Ensure that the specified section exists
$section = null;
Expand Down
5 changes: 4 additions & 1 deletion classes/publication/maps/Schema.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ protected function mapByProperties(array $props, Publication $publication, bool
);
}

$output = $this->schemaService->addMissingMultilingualValues(PKPSchemaService::SCHEMA_PUBLICATION, $output, $this->context->getSupportedSubmissionLocales());
$locales = $this->context->getSupportedSubmissionLocales();
in_array($primaryLocale = $this->submission->getData('locale'), $locales) || array_push($locales, $primaryLocale);

$output = $this->schemaService->addMissingMultilingualValues(PKPSchemaService::SCHEMA_PUBLICATION, $output, $locales);

ksort($output);

Expand Down
4 changes: 3 additions & 1 deletion classes/submission/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@ public function validateSubmit(Submission $submission, Context $context): array
$abstracts = $publication->getData('abstract');
if ($abstracts) {
$abstractErrors = [];
foreach ($context->getSupportedSubmissionLocales() as $localeKey) {
$allowedLocales = $context->getSupportedSubmissionLocales();
in_array($locale, $allowedLocales) || array_push($allowedLocales, $locale);
foreach ($allowedLocales as $localeKey) {
$abstract = $publication->getData('abstract', $localeKey);
$wordCount = $abstract ? PKPString::getWordCount($abstract) : 0;
if ($wordCount > $section->getAbstractWordCount()) {
Expand Down
5 changes: 4 additions & 1 deletion classes/submission/maps/Schema.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ protected function mapByProperties(array $props, Submission $submission): array
);
}

$output = $this->schemaService->addMissingMultilingualValues($this->schemaService::SCHEMA_SUBMISSION, $output, $this->context->getSupportedSubmissionLocales());
$locales = $this->context->getSupportedSubmissionLocales();
in_array($primaryLocale = $submission->getData('locale'), $locales) || array_push($locales, $primaryLocale);

$output = $this->schemaService->addMissingMultilingualValues($this->schemaService::SCHEMA_SUBMISSION, $output, $locales);

ksort($output);

Expand Down
73 changes: 73 additions & 0 deletions cypress/tests/integration/ChangeSubmissionLanguage.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* @file cypress/tests/integration/ChangeSubmissionLanguage.cy.js
*
* Copyright (c) 2023 Simon Fraser University
* Copyright (c) 2023 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*/

describe('Change Submission Language', function() {
let user;
let author;
let password;
let originalLanguage;
let originalLocaleKey;
let newLanguage;
let newLocaleKey;
let title;
let abstract;

before(function() {
user = 'dbarnes';
password = user + user;
author = {
familyName: 'Karbasizaed',
}
originalLanguage = 'English';
originalLocaleKey = 'en';
newLanguage = 'French (Canada)';
newLocaleKey = 'fr_CA';
title = {
[newLocaleKey]: "Résistance aux antimicrobiens et aux métaux lourds et profil plasmidique des coliformes isolés d'infections nosocomiales dans un hôpital d'Ispahan, Iran",
};
abstract = {
[newLocaleKey]: "Les profils de résistance aux antimicrobiens et aux métaux lourds ainsi que les profils plasmidiques des coliformes (Enterobacteriacea) isolés d'infections nosocomiales et de matières fécales humaines saines ont été comparés. Quinze des 25 isolats provenant d'infections nosocomiales ont été identifiés comme étant des Escherichia coli, et les autres comme étant des Kelebsiella pneumoniae. Soixante-douze pour cent des souches isolées d'infections nosocomiales possèdent une résistance multiple aux antibiotiques, contre 45 % des souches provenant de matières fécales humaines saines. La différence entre les valeurs de concentration minimale inhibitrice (CMI) des souches provenant de cas cliniques et de matières fécales pour quatre métaux lourds (Hg, Cu, Pb, Cd) n'était pas significative. Cependant, la plupart des souches isolées à l'hôpital étaient plus tolérantes aux métaux lourds que celles provenant de personnes en bonne santé. Il n'y avait pas de relation cohérente entre le groupe de profil plasmidique et le profil de résistance aux antimicrobiens, bien qu'un plasmide conjugatif (>56,4 kb) codant pour la résistance aux métaux lourds et aux antibiotiques ait été récupéré chez huit des souches isolées d'infections nosocomiales. Les résultats indiquent que les coliformes multirésistants sont une cause potentielle d'infection nosocomiale dans cette région.",
};
});

it('Try to change submission language after publication', function() {
cy.login(user, password, 'publicknowledge');
cy.get('button[id="archive-button"]').click();
cy.contains('View ' + author.familyName).click({force: true});
cy.get(`.pkpHeader__actions button:contains("${originalLanguage}")`).should('be.disabled');
});

it('Change submission language', function() {
cy.login(user, password, 'publicknowledge');
cy.get('button[id="archive-button"]').click();
cy.contains('View ' + author.familyName).click({force: true});
// Unpublish
cy.get('button[id="publication-button"]').click();
cy.get('#publication button:contains("Unpublish")').click();
cy.get('#headlessui-dialog-panel-5 button:contains("Unpublish")').click();
// Change language
cy.get(`.pkpHeader__actions button:contains("${originalLanguage}")`).should('be.enabled').click();
cy.get('#changeSubmissionLanguage').find(`input[value="${newLocaleKey}"]`).click();
cy.setTinyMceContent('changeSubmissionLanguageMetadata-title-control-' + newLocaleKey, title[newLocaleKey]);
cy.setTinyMceContent('changeSubmissionLanguageMetadata-abstract-control-' + newLocaleKey, abstract[newLocaleKey]);
cy.get('#changeSubmissionLanguage button[label="Save"]').click();
});

it('Change submission language back to the original', function() {
cy.findSubmissionAsEditor(user, password, author.familyName);
// Change language
cy.get(`.pkpHeader__actions button:contains("${newLanguage}")`).click();
cy.get('#changeSubmissionLanguage').find(`input[value="${originalLocaleKey}"]`).click();
cy.get('#changeSubmissionLanguage button[label="Save"]').click();
// Publish
cy.get(`.pkpHeader__actions button:contains("${originalLanguage}")`).should('exist');
cy.get('button[id="publication-button"]').click();
cy.get('div#publication button:contains("Schedule For Publication")').click();
cy.get('div.pkpWorkflow__publishModal button:contains("Publish")').click();
});
});
5 changes: 3 additions & 2 deletions pages/workflow/WorkflowHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ public function setupIndex($request)
$submissionContext = Services::get('context')->get($submission->getContextId());
}

$locales = $submissionContext->getSupportedSubmissionLocaleNames();
$locales = $submissionContext->getSupportedSubmissionLocaleNames() + [$submission->getData('locale') => (new \PKP\i18n\LocaleMetadata($submission->getData('locale')))->getDisplayName(null, false)];
ksort($locales);
$locales = array_map(fn (string $locale, string $name) => ['key' => $locale, 'label' => $name], array_keys($locales), $locales);

$latestPublication = $submission->getLatestPublication();
Expand Down Expand Up @@ -113,7 +114,7 @@ class_exists(\APP\components\forms\publication\AssignToIssueForm::class); // For
]);

$components = $templateMgr->getState('components');
$components[FORM_ISSUE_ENTRY] = $issueEntryForm->getConfig();
$components[FORM_ISSUE_ENTRY] = $this->getLocalizedForm($issueEntryForm, $submission, $submissionContext);

// Add payments form if enabled
$paymentManager = Application::getPaymentManager($submissionContext);
Expand Down
5 changes: 5 additions & 0 deletions templates/authorDashboard/authorDashboard.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
>
{translate key="common.upload.addFile"}
</pkp-button>
<pkp-button
:disabled="true"
>
{{ changeLangButtonLabel }}
</pkp-button>
<pkp-button
@click="openLibrary"
>
Expand Down
27 changes: 27 additions & 0 deletions templates/workflow/workflow.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,27 @@
<pkp-form class="pkpWorkflow__submissionPaymentsForm" v-bind="components.{$smarty.const.FORM_SUBMISSION_PAYMENTS}" @set="set">
</dropdown>
{/if}
<pkp-button
:disabled="!canChangeLang || publicationList.length > 1 || submission.status === getConstant('STATUS_PUBLISHED')"
@click="isModalOpenedChangeSubmissionLanguage = true"
>
{{ changeLangButtonLabel }}
</pkp-button>
{* Modal to change submission language and metadata *}
<modal
:close-label="t('common.close')"
name="changeLangModal"
title="{translate key="submission.list.changeLangTitle"}"
:open="isModalOpenedChangeSubmissionLanguage"
@close="isModalOpenedChangeSubmissionLanguage = false"
>
<div id="changeSubmissionLanguage">
<p>{translate key="submission.list.changeLangDescription"}</p>
<div class="pkpPublication" aria-live="polite">
<pkp-form v-bind="components.{$smarty.const.FORM_CHANGE_SUBMISSION_LANGUAGE_METADATA}" @set="updateSubmissionLangMetadataFormData" @success="changeSubmissionLanguage"></pkp-form>
</div>
</div>
</modal>
{if $canAccessEditorialHistory}
<pkp-button
ref="activityButton"
Expand Down Expand Up @@ -198,6 +219,12 @@
>
{translate key="publication.editDisabled"}
</div>
<div
v-if="workingPublication.status !== getConstant('STATUS_PUBLISHED') && !submissionSupportedLocales.includes(submission.locale)"
class="pkpSubmission__localeNotSupported"
>
{translate key="submission.localeNotSupported" subLocale=$changeLangButtonLabel}
</div>
<tabs class="pkpPublication__tabs" :is-side-tabs="true" :track-history="true" :label="currentPublicationTabsLabel">
<tab id="titleAbstract" label="{translate key="publication.titleAbstract"}">
<pkp-form v-bind="components.{$smarty.const.FORM_TITLE_ABSTRACT}" @set="set" />
Expand Down

0 comments on commit c90cb2a

Please sign in to comment.