diff --git a/cypress/tests/integration/ChangeSubmissionLanguage.cy.js b/cypress/tests/integration/ChangeSubmissionLanguage.cy.js
new file mode 100644
index 00000000000..02b54e88d18
--- /dev/null
+++ b/cypress/tests/integration/ChangeSubmissionLanguage.cy.js
@@ -0,0 +1,75 @@
+/**
+ * @file cypress/tests/integration/ChangeSubmissionLanguage.cy.js
+ *
+ * Copyright (c) 2024 Simon Fraser University
+ * Copyright (c) 2024 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(`.pkpPublication__changeSubmissionLanguage > button`).should('not.exist');
+ });
+
+ 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(`.pkpPublication__changeSubmissionLanguage > button`).should('be.enabled').click();
+ cy.get('#changeSubmissionLanguage').find(`input[value="${newLocaleKey}"]`).click();
+ cy.setTinyMceContent('changeSubmissionLanguageMetadata-title-control', title[newLocaleKey]);
+ cy.setTinyMceContent('changeSubmissionLanguageMetadata-abstract-control', abstract[newLocaleKey]);
+ cy.get('#changeSubmissionLanguage button[label="Confirm"]').click();
+ cy.get(`.pkpPublication__changeSubmissionLanguage > span`).contains(`Current Submission Language: ${newLanguage}`);
+ });
+
+ it('Change submission language back to the original', function() {
+ cy.findSubmissionAsEditor(user, password, author.familyName);
+ // Change language
+ cy.get('button[id="publication-button"]').click();
+ cy.get(`.pkpPublication__changeSubmissionLanguage > button`).click();
+ cy.get('#changeSubmissionLanguage').find(`input[value="${originalLocaleKey}"]`).click();
+ cy.get('#changeSubmissionLanguage button[label="Confirm"]').click();
+ // Publish
+ cy.get(`.pkpPublication__changeSubmissionLanguage > span`).contains(`Current Submission Language: ${originalLanguage}`);
+ 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();
+ });
+});
diff --git a/lib/pkp b/lib/pkp
index ac36961d526..80f1467d6ef 160000
--- a/lib/pkp
+++ b/lib/pkp
@@ -1 +1 @@
-Subproject commit ac36961d526b09828292e5bcbc607b7221a1b610
+Subproject commit 80f1467d6ef2da5976c8e8bc7210e9e944c40f58
diff --git a/lib/ui-library b/lib/ui-library
index c199bc60cc5..7bd6e9d60e4 160000
--- a/lib/ui-library
+++ b/lib/ui-library
@@ -1 +1 @@
-Subproject commit c199bc60cc5a669d7015171951be6f4d40961c98
+Subproject commit 7bd6e9d60e46992a1fa84e42cce0bf5aa77ee696
diff --git a/registry/uiLocaleKeysBackend.json b/registry/uiLocaleKeysBackend.json
index 941a49b2902..9a9d221cd98 100644
--- a/registry/uiLocaleKeysBackend.json
+++ b/registry/uiLocaleKeysBackend.json
@@ -1,38 +1,60 @@
[
+ "acceptInvitation.modal.button",
+ "acceptInvitation.modal.message",
+ "acceptInvitation.modal.title",
+ "acceptInvitation.passwordField.description",
+ "acceptInvitation.privacyStatement.btn",
+ "acceptInvitation.privacyStatement.label",
+ "acceptInvitation.review.accountDetails",
+ "acceptInvitation.review.userDetails",
+ "acceptInvitation.skipVerifyOrcid",
+ "acceptInvitation.usernameField.description",
+ "acceptInvitation.verifyOrcid",
+ "admin.jobs.failed.action.redispatch",
+ "admin.jobs.failed.action.redispatch.all",
"article.article",
+ "article.metadata",
"author.users.contributor.principalContact",
"author.users.contributor.setPrincipalContact",
- "common.abstract",
"common.addCCBCC",
+ "common.assign",
"common.attachFiles",
"common.attachedFiles",
+ "common.back",
"common.cancel",
"common.clearSearch",
"common.close",
"common.commaListSeparator",
+ "common.confirmDelete",
"common.content",
+ "common.dateUploaded",
"common.default",
"common.delete",
"common.description",
"common.deselect",
+ "common.details",
"common.download",
"common.edit",
"common.editItem",
"common.emailTemplates",
"common.error",
+ "common.fileName",
"common.filter",
"common.filterAdd",
"common.filterRemove",
"common.filtersClear",
"common.findTemplate",
"common.geographic",
+ "common.id",
"common.insert",
"common.insertContent",
"common.insertContentSearch",
- "common.keywords",
+ "common.language",
"common.lastActivity",
"common.loaded",
"common.loading",
+ "common.moreActions",
+ "common.name",
"common.no",
"common.noItemsFound",
"common.none",
@@ -46,6 +68,7 @@
"common.pagination.label",
"common.pagination.next",
"common.pagination.previous",
+ "common.payments",
"common.publications",
"common.remove",
"common.removeItem",
@@ -62,7 +85,6 @@
"common.showingSteps",
"common.showingXofX",
"common.status",
- "common.subtitle",
"common.switchTo",
"common.switchToNamedItem",
"common.type",
@@ -82,17 +104,20 @@
"contributor.listPanel.preview.full",
"contributor.listPanel.preview.publicationLists",
"dashboard.acceptOrDeclineRequestDate",
- "dashboard.action",
"dashboard.applyFilters",
"dashboard.assignEditor",
"dashboard.assignReviewers",
"dashboard.clearFilters",
"dashboard.completeReviewByDate",
"dashboard.dashboards",
- "dashboard.deadlineForComplitingReviewHasPassed",
+ "dashboard.deadlineForCompletingReviewHasPassed",
"dashboard.deadlineForRespondingAcceptOrDecline",
+ "dashboard.declinedDuringStage",
"dashboard.mySubmissions",
"dashboard.newReviewRoundToBeCreated",
+ "dashboard.recommendOnly.pendingRecommendations",
+ "dashboard.recommendOnly.recommendationsCompleted",
+ "dashboard.recommendOnly.recommendationsReady",
"dashboard.reviewAssignment.action.cancelReviewer",
"dashboard.reviewAssignment.action.editDueDate",
"dashboard.reviewAssignment.action.resendReviewRequest",
@@ -124,39 +149,31 @@
"dashboard.revisionRequested",
"dashboard.revisionRequestedFromAuthor",
"dashboard.revisionsRequestedFromAuthorNextRound",
- "dashboard.revisionsSubmittedByAuthor",
+ "dashboard.revisionsSubmitted",
"dashboard.stage.copyediting",
- "dashboard.stage.deskReview",
"dashboard.stage.production",
"dashboard.stage.published",
+ "dashboard.stage.review",
"dashboard.stage.reviewWithRound",
"dashboard.stage.scheduledForPublication",
+ "dashboard.stage.submission",
"dashboard.startNewSubmission",
"dashboard.submitRevisions",
"dashboard.summary.acceptAndSkipReview",
- "dashboard.summary.acceptReview",
"dashboard.summary.acceptSubmission",
- "dashboard.summary.accessReviewForm",
"dashboard.summary.assignToIssue",
+ "dashboard.summary.backToCopyediting",
+ "dashboard.summary.cancelCopyEditing",
"dashboard.summary.cancelReviewRound",
"dashboard.summary.copyeditedFiles",
- "dashboard.summary.daysInCopyediting",
- "dashboard.summary.daysInProduction",
- "dashboard.summary.daysInReview",
- "dashboard.summary.daysInSubmission",
- "dashboard.summary.daysSinceSubmission",
- "dashboard.summary.decline",
+ "dashboard.summary.copyeditedFilesDescription",
"dashboard.summary.declineSubmission",
"dashboard.summary.deskReviewFiles",
"dashboard.summary.deskReviewFilesDescription",
"dashboard.summary.draftFiles",
"dashboard.summary.draftFilesDescription",
- "dashboard.summary.editorsAssigned",
"dashboard.summary.filesForReview",
- "dashboard.summary.filesForReviewDescription",
- "dashboard.summary.galleys",
"dashboard.summary.issueNo",
- "dashboard.summary.journalName",
"dashboard.summary.notAssigned",
"dashboard.summary.preview",
"dashboard.summary.productionReadyFiles",
@@ -165,34 +182,53 @@
"dashboard.summary.reviewer",
"dashboard.summary.reviewerStatus",
"dashboard.summary.reviewers",
- "dashboard.summary.revisionsSubmitted",
- "dashboard.summary.revisionsSubmittedDescription",
- "dashboard.summary.scheduleForProduction",
+ "dashboard.summary.revisionsUploaded",
+ "dashboard.summary.revisionsUploadedDescription",
"dashboard.summary.sendSubmissionForReview",
"dashboard.summary.sendToProduction",
- "dashboard.summary.submissionLanguage",
- "dashboard.summary.submittedOn",
- "dashboard.summary.unschedule",
- "dashboard.summary.uploadFile",
- "dashboard.summary.uploadRevisions",
- "dashboard.summary.viewActivityLog",
- "dashboard.summary.viewSubmissionInDetail",
- "dashboard.viewSummary",
"doi.manager.versions.countStatement",
"doi.manager.versions.modalTitle",
"doi.manager.versions.view",
+ "editor.activityLog",
"editor.review.cancelReviewer",
+ "editor.review.emailReviewer",
+ "editor.review.notInitiated",
+ "editor.review.readReview",
+ "editor.review.reinstateReviewer",
+ "editor.review.reminder",
"editor.review.resendRequestReviewer",
+ "editor.review.revertDecision",
"editor.review.reviewDetails",
+ "editor.review.sendReminder",
+ "editor.review.thankReviewer",
"editor.review.unassignReviewer",
+ "editor.review.unconsiderReview",
+ "editor.review.unconsiderReviewText",
+ "editor.submission.addReviewer",
"editor.submission.addStageParticipant",
+ "editor.submission.createNewRound",
"editor.submission.decision.requestRevisions",
+ "editor.submission.editStageParticipant",
+ "editor.submission.recommend.accept",
+ "editor.submission.recommend.decline",
+ "editor.submission.recommend.revisions",
+ "editor.submission.recommendation",
+ "editor.submission.removeStageParticipant",
+ "editor.submission.removeStageParticipant.description",
+ "editor.submission.review.currentFiles",
"editor.submission.revisions",
"editor.submission.schedulePublication",
"editor.submission.search",
+ "editor.submission.stageParticipants",
+ "editor.submission.uploadSelectFiles",
+ "editor.submission.workflowDecision.changeDecision",
+ "editor.submission.workflowDecision.submission.production",
+ "editor.submission.workflowDecision.submission.published",
+ "editor.submission.workflowDecision.submission.reviewRound",
+ "editor.submission.workflowDecision.submission.underReview",
"editor.submissionArchive.confirmDelete",
+ "editor.submissionLibrary",
"editor.submissionReview.editReview",
- "editor.submissionReview.uploadAttachment",
"editor.submissionReview.uploadFile",
"email.bcc",
"email.cc",
@@ -209,16 +245,25 @@
"form.multilingualProgress",
"form.saved",
"grid.action.addContributor",
+ "grid.action.addGalley",
+ "grid.action.delete",
"grid.action.deleteContributor",
"grid.action.deleteContributor.confirmationMessage",
"grid.action.edit",
+ "grid.action.editFile",
+ "grid.action.logInAs",
+ "grid.action.moreInformation",
+ "grid.action.order",
"grid.action.saveOrdering",
"grid.action.sort",
+ "grid.columns.actions",
+ "grid.libraryFiles.submission.title",
+ "grid.noItems",
+ "grid.user.confirmLogInAs",
"help.help",
+ "informationCenter.informationCenter",
"invitation.orcid.acceptInvitation.message",
- "invitation.orcid.message",
"invitation.role.addRole.button",
- "invitation.role.dateEnd",
"invitation.role.dateStart",
"invitation.role.masthead",
"invitation.role.removeRole.button",
@@ -288,8 +333,10 @@
"manager.mailables.addTemplates",
"manager.mailables.editTemplate",
"manager.mailables.templates",
- "metadata.property.displayName.doi",
+ "manager.publication.reviewStage",
+ "manager.workflow",
"navigation.backTo",
+ "notification.type.roundStatusTitle",
"orcid.field.authorEmailModal.message",
"orcid.field.authorEmailModal.title",
"orcid.field.deleteOrcidModal.message",
@@ -297,18 +344,29 @@
"orcid.field.unverified.shouldRequest",
"orcid.field.verification.request",
"orcid.field.verification.requested",
+ "orcid.field.verification.resendRequest",
"publication.contributors",
+ "publication.createVersion",
+ "publication.editDisabled",
+ "publication.jats",
"publication.jats.autoCreatedMessage",
"publication.jats.confirmDeleteFileButton",
"publication.jats.confirmDeleteFileMessage",
"publication.jats.confirmDeleteFileTitle",
"publication.jats.lastModified",
+ "publication.publicationLicense",
"publication.selectIssue",
"publication.status.published",
+ "publication.status.scheduled",
"publication.status.unpublished",
+ "publication.status.unscheduled",
+ "publication.titleAbstract",
+ "publication.unpublish",
+ "publication.unpublish.confirm",
"publication.unschedule",
"publication.unschedule.confirm",
"publication.version",
+ "publication.version.confirm",
"reviewer.article.decision.accept",
"reviewer.article.decision.decline",
"reviewer.article.decision.pendingRevisions",
@@ -317,7 +375,6 @@
"reviewer.article.decision.seeComments",
"reviewer.article.recommendation",
"reviewer.submission.acceptedOn",
- "reviewer.submission.declineReview",
"reviewer.submission.responseDueDate",
"reviewer.submission.reviewDueDate",
"reviewer.submission.reviewRequestDate",
@@ -344,6 +401,7 @@
"reviewer.submission.reviewRound.reviewNotCompleted",
"reviewer.submission.submittedOn",
"search.searchResults",
+ "semicolon",
"stageParticipants.notify.message",
"stats.context.downloadReport.description",
"stats.context.downloadReport.downloadContext",
@@ -365,9 +423,19 @@
"stats.publications.downloadReport.downloadSubmissions.description",
"stats.timeline",
"stats.timeline.downloadReport.downloadTimeline",
+ "submission.changeFile",
+ "submission.citations",
"submission.contributors",
"submission.files",
+ "submission.files.downloadAll",
+ "submission.history",
+ "submission.identifiers",
+ "submission.layout.galleys",
+ "submission.layout.newGalley",
"submission.list.assignEditor",
+ "submission.list.changeSubmissionLanguage.metadataDescription.abstract",
+ "submission.list.changeSubmissionLanguage.metadataDescription.title",
+ "submission.list.changeSubmissionLanguage.title",
"submission.list.copyeditsSubmitted",
"submission.list.currentStage",
"submission.list.discussions",
@@ -383,15 +451,37 @@
"submission.list.reviewerWorkflowLink",
"submission.list.reviewsCompleted",
"submission.list.revisionsSubmitted",
+ "submission.publication",
+ "submission.review",
+ "submission.stageParticipants.notify",
"submission.submit.newSubmissionSingle",
+ "submission.submit.uploadSubmissionFile",
"submission.upload.percentComplete",
+ "submission.upload.productionReady",
+ "submission.upload.proof",
+ "submission.versions",
"submission.wizard.changeSubmission",
"submissions.declined",
"submissions.incomplete",
"todo",
+ "user.affiliation",
"user.email",
+ "user.emailAddress",
+ "user.familyName",
+ "user.givenName",
+ "user.gossip",
"user.orcid",
"user.password",
"user.username",
+ "userInvitation.emailField.description",
+ "userInvitation.modal.button",
+ "userInvitation.modal.message",
+ "userInvitation.modal.title",
+ "userInvitation.orcidField.description",
+ "userInvitation.roleTable.endDate",
+ "userInvitation.roleTable.journalMasthead",
+ "userInvitation.roleTable.role",
+ "userInvitation.roleTable.startDate",
+ "userInvitation.usernameField.description",
"validator.required"
]
diff --git a/templates/authorDashboard/authorDashboard.tpl b/templates/authorDashboard/authorDashboard.tpl
index 331fe8d8006..b6fa81767bb 100644
--- a/templates/authorDashboard/authorDashboard.tpl
+++ b/templates/authorDashboard/authorDashboard.tpl
@@ -57,6 +57,11 @@
);
{rdelim});
+