Skip to content

Commit 723d7a4

Browse files
Merge branch 'fixTranslation' into 'main'
improvements to the doiForTranslation plugin See merge request softwares-pkp/plugins_ojs/DoiForTranslation!14
2 parents cfef54b + f438779 commit 723d7a4

7 files changed

Lines changed: 64 additions & 14 deletions

DoiForTranslationPlugin.inc.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public function register($category, $path, $mainContextId = null)
2828
if ($success and $this->getEnabled($mainContextId)) {
2929
HookRegistry::register('Template::Workflow', array($this, 'addWorkflowModifications'));
3030
HookRegistry::register('TemplateManager::display', array($this, 'loadResourcesToWorkflow'));
31+
HookRegistry::register('TemplateManager::display', array($this, 'filterTranslationsByLocale'));
3132
HookRegistry::register('Templates::Article::Main', array($this, 'addPublicSiteModifications'));
3233
HookRegistry::register('Templates::Issue::Issue::Article', array($this, 'addPublicSiteModifications'));
3334
HookRegistry::register('Dispatcher::dispatch', array($this, 'setupDoiForTranslationHandler'));
@@ -146,6 +147,41 @@ public function loadResourcesToWorkflow($hookName, $params)
146147
return false;
147148
}
148149

150+
public function filterTranslationsByLocale($hookName, $params)
151+
{
152+
$templateMgr = $params[0];
153+
$template = $params[1];
154+
155+
if ($template != 'frontend/pages/issue.tpl' && $template != 'frontend/pages/indexJournal.tpl') {
156+
return false;
157+
}
158+
159+
$publishedSubmissions = $templateMgr->getTemplateVars('publishedSubmissions');
160+
$locale = $templateMgr->getTemplateVars('locale');
161+
$translationsService = new TranslationsService();
162+
163+
foreach ($publishedSubmissions as $sectionId => $section) {
164+
if (empty($section['articles'])) {
165+
continue;
166+
}
167+
168+
$publishedSubmissions[$sectionId]['articles'] = array_values(
169+
array_filter($section['articles'], function ($submission) use ($locale, $translationsService) {
170+
if ($submission->getData('isTranslationOf')) {
171+
return $submission->getLocale() == $locale;
172+
}
173+
174+
$translations = $translationsService->getTranslations($submission->getId(), 'article');
175+
return !in_array($locale, array_column($translations, 'locale'));
176+
}
177+
));
178+
}
179+
180+
$templateMgr->assign('publishedSubmissions', $publishedSubmissions);
181+
182+
return false;
183+
}
184+
149185
private function addCreateTranslationForm($templateMgr, $request)
150186
{
151187
$context = $request->getContext();

classes/TranslationCreator.inc.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ public function createTranslation($submissionId, $translationLocale)
1616
$newSubmissionId = $submissionDao->insertObject($newSubmission);
1717
$newSubmission->setData('id', $newSubmissionId);
1818

19+
$originalLocale = $submission->getData('locale');
20+
1921
foreach ($submission->getData('publications') as $publication) {
20-
$newPublicationId = $this->createTranslationPublication($publication, $newSubmissionId, $translationLocale);
22+
$newPublicationId = $this->createTranslationPublication($publication, $newSubmissionId, $translationLocale, $originalLocale);
2123

2224
if ($publication->getId() == $submission->getData('currentPublicationId')) {
2325
$newSubmission->setData('currentPublicationId', $newPublicationId);
@@ -28,7 +30,7 @@ public function createTranslation($submissionId, $translationLocale)
2830
return $newSubmissionId;
2931
}
3032

31-
private function createTranslationPublication($publication, $newSubmissionId, $translationLocale)
33+
private function createTranslationPublication($publication, $newSubmissionId, $translationLocale, $originalLocale)
3234
{
3335
$newPublication = clone $publication;
3436
$newPublication->setData('id', null);
@@ -39,18 +41,26 @@ private function createTranslationPublication($publication, $newSubmissionId, $t
3941
$newPublicationId = $publicationDao->insertObject($newPublication);
4042

4143
foreach ($publication->getData('authors') as $author) {
42-
$this->createTranslationAuthor($author, $newPublicationId, $translationLocale);
44+
$this->createTranslationAuthor($author, $newPublicationId, $translationLocale, $originalLocale);
4345
}
4446

4547
return $newPublicationId;
4648
}
4749

48-
private function createTranslationAuthor($author, $newPublicationId, $translationLocale)
50+
private function createTranslationAuthor($author, $newPublicationId, $translationLocale, $originalLocale)
4951
{
5052
$newAuthor = clone $author;
5153
$newAuthor->setData('id', null);
5254
$newAuthor->setData('publicationId', $newPublicationId);
5355
$newAuthor->setData('submissionLocale', $translationLocale);
56+
if (empty($newAuthor->getData('givenName', $translationLocale))) {
57+
$authorName = $newAuthor->getData('givenName', $originalLocale);
58+
$newAuthor->setData('givenName', $authorName, $translationLocale);
59+
}
60+
if (empty($newAuthor->getData('familyName', $translationLocale))) {
61+
$authorName = $newAuthor->getData('familyName', $originalLocale);
62+
$newAuthor->setData('familyName', $authorName, $translationLocale);
63+
}
5464

5565
$authorDao = DAORegistry::getDAO('AuthorDAO');
5666
return $authorDao->insertObject($newAuthor);

cypress/tests/Test2_createTranslation.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ describe('DOI For Translation - Creation of submission translation', function ()
8080
cy.contains('Choose the primary language of the new submission');
8181
cy.get('select[name="translationLocale"]').select('fr_CA');
8282
cy.get('#createTranslationModal button:contains("Create")').click();
83+
84+
cy.logout();
8385
});
8486
it('Access translation submission and updates title', function() {
8587
cy.login('dbarnes', null, 'publicknowledge');

cypress/tests/Test3_workflowFeatures.spec.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ describe('DOI For Translation - Workflow features', function () {
5858

5959
cy.get('#titleAbstract button:contains("Save")').click();
6060
cy.get('#titleAbstract span[role="status"]').contains('Saved');
61+
62+
cy.logout();
6163
});
6264
it('Reference to translated submission on translation submission workflow', function () {
6365
cy.login('dbarnes', null, 'publicknowledge');

cypress/tests/Test4_publicSiteFeatures.spec.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ describe('DOI For Translation - Public site features', function () {
4646
cy.findSubmission('active', title['pt_BR']);
4747
assignMyselfAsJournalEditor();
4848
publishSubmission();
49+
50+
cy.logout();
4951
});
5052
it('List of translations of a submission in landing page', function () {
5153
cy.login('dbarnes', null, 'publicknowledge');
@@ -62,6 +64,8 @@ describe('DOI For Translation - Public site features', function () {
6264
cy.contains('a', title['fr_CA']).click();
6365

6466
cy.contains('h1', title['fr_CA']);
67+
68+
cy.logout();
6569
});
6670
it('Reference to translated submission on translation submission landing page', function () {
6771
cy.login('dbarnes', null, 'publicknowledge');
@@ -88,16 +92,10 @@ describe('DOI For Translation - Public site features', function () {
8892
});
8993
});
9094

91-
cy.get('.title a:contains("' + title['fr_CA'] + '")')
92-
.parent().parent().within(() => {
93-
cy.contains('div', 'This article is a translation in Français (Canada) of the article:').within(() => {
94-
cy.contains('a', title['en_US']);
95-
});
96-
});
97-
95+
cy.setLocale('pt_BR');
9896
cy.get('.title a:contains("' + title['pt_BR'] + '")')
9997
.parent().parent().within(() => {
100-
cy.contains('div', 'This article is a translation in Português (Brasil) of the article:').within(() => {
98+
cy.contains('div', 'Este artigo é uma tradução em Português (Brasil) do artigo:').within(() => {
10199
cy.contains('a', title['en_US']);
102100
});
103101
});

tests/TranslationCreatorTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ public function testCreatesTranslationSubmission(): void
105105
$this->assertEquals($this->authorEmail, $translationAuthor->getData('email'));
106106
$this->assertEquals($this->authorGivenName, $translationAuthor->getData('givenName', $this->originalLocale));
107107
$this->assertEquals($this->authorFamilyName, $translationAuthor->getData('familyName', $this->originalLocale));
108+
$this->assertEquals($this->authorGivenName, $translationAuthor->getData('givenName', $this->translationLocale));
109+
$this->assertEquals($this->authorFamilyName, $translationAuthor->getData('familyName', $this->translationLocale));
108110
$this->assertEquals($this->translationLocale, $translationAuthor->getData('submissionLocale'));
109111
}
110112
}

version.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<application>doiForTranslation</application>
1313
<type>plugins.generic</type>
1414
<lazy-load>0</lazy-load>
15-
<release>1.0.3.3</release>
16-
<date>2025-10-01</date>
15+
<release>1.0.4.0</release>
16+
<date>2026-01-14</date>
1717
<class>DoiForTranslationPlugin</class>
1818
</version>

0 commit comments

Comments
 (0)