Skip to content

Commit 789f13f

Browse files
Merge branch 'addDatasetLanguage340-911' into 'main'
Exporta idioma para o Dataverse - 3.4.0 See merge request softwares-pkp/plugins_ojs/dataverse!230
2 parents dfc89fa + f29a6f5 commit 789f13f

22 files changed

Lines changed: 161 additions & 92 deletions

api/v1/datasets/DatasetHandler.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public function edit($slimRequest, $response, $args)
152152
$data['title'] = $requestParams['datasetTitle'];
153153
$data['description'] = $requestParams['datasetDescription'];
154154
$data['keywords'] = $requestParams['datasetKeywords'][$locale];
155+
$data['language'] = $requestParams['datasetLanguage'];
155156
$data['subject'] = $requestParams['datasetSubject'];
156157
$data['license'] = $requestParams['datasetLicense'];
157158

@@ -230,13 +231,15 @@ public function addDataset($slimRequest, $response, $args)
230231
$dataset->setTitle($requestParams['datasetTitle']);
231232
$dataset->setDescription($requestParams['datasetDescription']);
232233
$dataset->setKeywords((array) $requestParams['datasetKeywords'][$locale]);
234+
$dataset->setLanguage($requestParams['datasetLanguage']);
233235
$dataset->setSubject($requestParams['datasetSubject']);
234236
$dataset->setLicense($requestParams['datasetLicense']);
235237

236238
$excludedKeys = [
237239
'datasetTitle',
238240
'datasetDescription',
239241
'datasetKeywords',
242+
'datasetLanguage',
240243
'datasetSubject',
241244
'datasetLicense'
242245
];

classes/components/forms/DatasetMetadataForm.php

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,37 +41,44 @@ public function __construct($action, $method, $dataset, $page)
4141
'value' => $datasetMetadata['title'],
4242
'size' => 'large',
4343
]))
44-
->addField(new FieldRichTextarea('datasetDescription', [
45-
'label' => __('plugins.generic.dataverse.metadataForm.description'),
46-
'isRequired' => true,
47-
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist | image | code',
48-
'plugins' => 'paste,link,lists,image,code',
49-
'value' => $datasetMetadata['description']
50-
]))
51-
->addField(new FieldControlledVocab('datasetKeywords', [
52-
'label' => __('plugins.generic.dataverse.metadataForm.keyword'),
53-
'tooltip' => __('manager.setup.metadata.keywords.description'),
54-
'apiUrl' => $this->getVocabSuggestionUrlBase(),
55-
'isMultilingual' => true,
56-
'locales' => $this->locales,
57-
'value' => $datasetMetadata['keywords']
58-
]));
44+
->addField(new FieldRichTextarea('datasetDescription', [
45+
'label' => __('plugins.generic.dataverse.metadataForm.description'),
46+
'isRequired' => true,
47+
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist | image | code',
48+
'plugins' => 'paste,link,lists,image,code',
49+
'value' => $datasetMetadata['description']
50+
]))
51+
->addField(new FieldControlledVocab('datasetKeywords', [
52+
'label' => __('plugins.generic.dataverse.metadataForm.keyword'),
53+
'tooltip' => __('manager.setup.metadata.keywords.description'),
54+
'apiUrl' => $this->getVocabSuggestionUrlBase(),
55+
'isMultilingual' => true,
56+
'locales' => $this->locales,
57+
'value' => $datasetMetadata['keywords']
58+
]));
5959
}
6060

61-
$this->addField(new FieldSelect('datasetSubject', [
62-
'label' => __('plugins.generic.dataverse.metadataForm.subject.label'),
63-
'description' => ($page == 'submission' ? __('plugins.generic.dataverse.metadataForm.subject.description') : ''),
61+
$this->addField(new FieldSelect('datasetLanguage', [
62+
'label' => __('plugins.generic.dataverse.metadataForm.language.label'),
63+
'description' => ($page == 'submission' ? __('plugins.generic.dataverse.metadataForm.language.description') : ''),
6464
'isRequired' => true,
65-
'options' => $dataverseMetadata->getDataverseSubjects(),
66-
'value' => $datasetMetadata['subject'],
65+
'options' => $this->getAvailableLanguages(),
66+
'value' => $datasetMetadata['language'],
6767
]))
68-
->addField(new FieldSelect('datasetLicense', [
69-
'label' => __('plugins.generic.dataverse.metadataForm.license.label'),
70-
'description' => ($page == 'submission' ? __('plugins.generic.dataverse.metadataForm.license.description') : ''),
71-
'isRequired' => true,
72-
'options' => $this->mapLicensesForDisplay($dataverseLicenses),
73-
'value' => $datasetMetadata['license'],
74-
]));
68+
->addField(new FieldSelect('datasetSubject', [
69+
'label' => __('plugins.generic.dataverse.metadataForm.subject.label'),
70+
'description' => ($page == 'submission' ? __('plugins.generic.dataverse.metadataForm.subject.description') : ''),
71+
'isRequired' => true,
72+
'options' => $dataverseMetadata->getDataverseSubjects(),
73+
'value' => $datasetMetadata['subject'],
74+
]))
75+
->addField(new FieldSelect('datasetLicense', [
76+
'label' => __('plugins.generic.dataverse.metadataForm.license.label'),
77+
'description' => ($page == 'submission' ? __('plugins.generic.dataverse.metadataForm.license.description') : ''),
78+
'isRequired' => true,
79+
'options' => $this->mapLicensesForDisplay($dataverseLicenses),
80+
'value' => $datasetMetadata['license'],
81+
]));
7582

7683
try {
7784
$flattenedFields = $this->getFlattenedRequiredMetadataFields();
@@ -112,7 +119,7 @@ private function buildFieldConfig($field, $dataset): array
112119
private function mapControlledVocabularyOptions(array $values): array
113120
{
114121
return array_map(
115-
static fn ($value) => ['label' => $value, 'value' => $value],
122+
fn ($value) => ['label' => $value, 'value' => $value],
116123
$values
117124
);
118125
}
@@ -141,6 +148,7 @@ private function getDatasetMetadata($dataset)
141148
'title' => '',
142149
'description' => '',
143150
'keywords' => [Locale::getLocale() => []],
151+
'language' => '',
144152
'subject' => '',
145153
'license' => ''
146154
];
@@ -153,6 +161,7 @@ private function getDatasetMetadata($dataset)
153161
'title' => $dataset->getTitle(),
154162
'description' => $dataset->getDescription(),
155163
'keywords' => $mappedKeywords,
164+
'language' => $dataset->getLanguage(),
156165
'subject' => $dataset->getSubject(),
157166
'license' => $dataset->getLicense()
158167
];
@@ -165,6 +174,19 @@ private function getVocabSuggestionUrlBase()
165174
return $request->getDispatcher()->url($request, Application::ROUTE_API, $contextPath, 'vocabs', null, null, ['vocab' => 'submissionKeyword']);
166175
}
167176

177+
private function getAvailableLanguages(): array
178+
{
179+
$context = Application::get()->getRequest()->getContext();
180+
$availableLanguages = [];
181+
182+
foreach ($context->getSupportedSubmissionLocales() as $locale) {
183+
$languageName = \Locale::getDisplayLanguage($locale, 'en');
184+
$availableLanguages[] = ['key' => $languageName, 'label' => $languageName];
185+
}
186+
187+
return $availableLanguages;
188+
}
189+
168190
private function mapCurrentLocale(): array
169191
{
170192
$localeKey = Locale::getLocale();

classes/dispatchers/DatasetMetadataDispatcher.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public function addToEditorsStep(string $hookName, array $params)
4343

4444
$submissionApiUrl = $request->getDispatcher()->url($request, Application::ROUTE_API, $context->getPath(), 'submissions/' . $submission->getId());
4545
$dataset = new Dataset();
46+
$datasetLanguage = $submission->getData('datasetLanguage') ?? \Locale::getDisplayLanguage($submission->getLocale(), 'en');
47+
$dataset->setData('language', $datasetLanguage);
4648
$dataset->setData('subject', $submission->getData('datasetSubject'));
4749
$dataset->setData('license', $submission->getData('datasetLicense'));
4850

classes/dispatchers/DataverseEventsDispatcher.php

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ protected function registerHooks(): void
4545
public function modifySubmissionSchema(string $hookName, array $params): bool
4646
{
4747
$schema = &$params[0];
48+
$schema->properties->{'datasetLanguage'} = (object) [
49+
'type' => 'string',
50+
'apiSummary' => true,
51+
'validation' => ['nullable'],
52+
];
4853
$schema->properties->{'datasetSubject'} = (object) [
4954
'type' => 'string',
5055
'apiSummary' => true,
@@ -88,16 +93,16 @@ private function addDatasetPublishFieldsToForm(FormComponent $form, $params)
8893
'description' => __("plugins.generic.dataverse.researchData.publishNotice", $params),
8994
'groupId' => 'default'
9095
]))
91-
->addField(new \PKP\components\forms\FieldRadioInput('researchDataRadioInputs', [
92-
'label' => __('plugins.generic.dataverse.researchData.wouldLikeToPublish'),
93-
'name' => 'shouldPublishResearchData',
94-
'options' => [
95-
['value' => 1, 'label' => __('common.yes')],
96-
['value' => 0, 'label' => __('common.no')]
97-
],
98-
'isRequired' => true,
99-
'groupId' => 'default'
100-
]));
96+
->addField(new \PKP\components\forms\FieldRadioInput('researchDataRadioInputs', [
97+
'label' => __('plugins.generic.dataverse.researchData.wouldLikeToPublish'),
98+
'name' => 'shouldPublishResearchData',
99+
'options' => [
100+
['value' => 1, 'label' => __('common.yes')],
101+
['value' => 0, 'label' => __('common.no')]
102+
],
103+
'isRequired' => true,
104+
'groupId' => 'default'
105+
]));
101106
}
102107

103108
private function getDatasetDeleteNoticeForm($persistentUri)
@@ -108,16 +113,16 @@ private function getDatasetDeleteNoticeForm($persistentUri)
108113
'description' => __("plugins.generic.dataverse.researchData.deleteNotice", ['persistentUri' => $persistentUri]),
109114
'groupId' => 'default'
110115
]))
111-
->addField(new \PKP\components\forms\FieldRadioInput('researchDataRadioInputs', [
112-
'label' => __('plugins.generic.dataverse.researchData.wouldLikeToDelete'),
113-
'name' => 'shouldDeleteResearchData',
114-
'options' => [
115-
['value' => 1, 'label' => __('common.yes')],
116-
['value' => 0, 'label' => __('common.no')]
117-
],
118-
'isRequired' => true,
119-
'groupId' => 'default'
120-
]));
116+
->addField(new \PKP\components\forms\FieldRadioInput('researchDataRadioInputs', [
117+
'label' => __('plugins.generic.dataverse.researchData.wouldLikeToDelete'),
118+
'name' => 'shouldDeleteResearchData',
119+
'options' => [
120+
['value' => 1, 'label' => __('common.yes')],
121+
['value' => 0, 'label' => __('common.no')]
122+
],
123+
'isRequired' => true,
124+
'groupId' => 'default'
125+
]));
121126

122127
return $datasetDeleteNoticeForm;
123128
}

classes/entities/Dataset.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@ public function setDescription(string $description): void
4949
$this->setData('description', $description);
5050
}
5151

52+
public function getLanguage(): ?string
53+
{
54+
return $this->getData('language');
55+
}
56+
57+
public function setLanguage(string $language): void
58+
{
59+
$this->setData('language', $language);
60+
}
61+
5262
public function getSubject(): ?string
5363
{
5464
return $this->getData('subject');

classes/factories/JsonDatasetFactory.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ protected function sanitizeProps(): array
9191
$props['description'] = $metadata->value[0]->dsDescriptionValue->value;
9292
break;
9393
case 'subject':
94-
$props['subject'] = $metadata->value[0];
94+
case 'language':
95+
$props[$metadata->typeName] = $metadata->value[0];
9596
break;
9697
case 'keyword':
9798
$props['keywords'] = array_map(function (stdClass $keyword) {

classes/factories/SubmissionDatasetFactory.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
use APP\submission\Submission;
66
use APP\author\Author;
77
use APP\core\Application;
8-
use PKP\db\DAORegistry;
98
use PKP\file\TemporaryFile;
109
use PKP\file\TemporaryFileManager;
1110
use APP\plugins\generic\dataverse\classes\factories\DatasetFactory;
12-
use APP\plugins\generic\dataverse\classes\entities\Dataset;
1311
use APP\plugins\generic\dataverse\classes\entities\DatasetAuthor;
1412
use APP\plugins\generic\dataverse\classes\entities\DatasetContact;
1513
use APP\plugins\generic\dataverse\classes\entities\DatasetFile;
@@ -51,6 +49,7 @@ protected function sanitizeProps(): array
5149
$props['title'] = $datasetTitlePrefix . $publication->getLocalizedData('title');
5250
$props['description'] = $publication->getLocalizedData('abstract');
5351
$props['keywords'] = $publication->getLocalizedData('keywords');
52+
$props['language'] = $this->submission->getData('datasetLanguage');
5453
$props['subject'] = $this->submission->getData('datasetSubject');
5554
$props['license'] = $this->submission->getData('datasetLicense');
5655
$props['authors'] = array_map([$this, 'createDatasetAuthor'], $authors);

cypress/tests/Test1_submissionWizard.cy.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,22 +255,27 @@ describe('Dataverse Plugin - Submission wizard features', function () {
255255
advanceNSteps(3);
256256
cy.contains('h2', 'Research data metadata');
257257
cy.contains('Please provide the following details about the research data you are submitting');
258+
cy.contains('Research Data Language');
258259
cy.contains('Research Data Subject');
259260
cy.contains('Research Data License');
261+
cy.get('select[name="datasetLanguage"]').should('have.value', 'English');
260262
cy.get('select[name="datasetLicense"]').should('have.value', 'CC0 1.0');
261263

262264
advanceNSteps(1);
263265
cy.contains('h3', 'Research data metadata');
266+
cy.contains('Research Data Language');
264267
cy.contains('Research Data Subject');
265268
cy.contains('Research Data License');
266269
cy.contains('The subject of the research data is required');
267270

268271
cy.get('.pkpSteps__step__label:contains("For the Editors")').click();
272+
cy.get('select[name="datasetLanguage"]').select('French');
269273
cy.get('select[name="datasetSubject"]').select('Earth and Environmental Sciences');
270274
cy.get('select[name="datasetLicense"]').select('CC BY 4.0');
271275

272276
advanceNSteps(1);
273277
cy.get('div:contains("The subject of the research data is required")').should('not.exist');
278+
cy.contains('French');
274279
cy.contains('Earth and Environmental Sciences');
275280
cy.contains('CC BY 4.0');
276281

cypress/tests/Test2_workflowFeatures.cy.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ describe('Dataverse Plugin - Workflow features', function () {
8181
cy.contains(submissionData.keywords[0]);
8282
cy.contains(submissionData.keywords[1]);
8383
});
84+
cy.get('#datasetMetadata-datasetLanguage-control').should('have.value', 'French');
8485
cy.get('#datasetMetadata-datasetSubject-control').should('have.value', 'Earth and Environmental Sciences');
8586
cy.get('#datasetMetadata-datasetLicense-control').should('have.value', 'CC BY 4.0');
8687

@@ -89,6 +90,7 @@ describe('Dataverse Plugin - Workflow features', function () {
8990
cy.get('#datasetMetadata-datasetKeywords-control-en').type(submissionData.keywords[2], {delay: 0});
9091
cy.wait(500);
9192
cy.get('#datasetMetadata-datasetKeywords-control-en').type('{enter}', { delay: 0 });
93+
cy.get('#datasetMetadata-datasetLanguage-control').select('English');
9294
cy.get('#datasetMetadata-datasetSubject-control').select('Computer and Information Science');
9395
cy.get('#datasetMetadata-datasetLicense-control').select('CC0 1.0');
9496
cy.get('button:visible:contains("Save")').click();
@@ -99,6 +101,7 @@ describe('Dataverse Plugin - Workflow features', function () {
99101
cy.get('#datasetMetadata-datasetKeywords-selected-en').within(() => {
100102
cy.contains(submissionData.keywords[2]);
101103
});
104+
cy.get('#datasetMetadata-datasetLanguage-control').should('have.value', 'English');
102105
cy.get('#datasetMetadata-datasetSubject-control').should('have.value', 'Computer and Information Science');
103106
cy.get('#datasetMetadata-datasetLicense-control').should('have.value', 'CC0 1.0');
104107

@@ -186,6 +189,7 @@ describe('Dataverse Plugin - Workflow features', function () {
186189
cy.wait(1000);
187190
cy.get('input[name="termsOfUse"]').check();
188191
cy.get('form:visible button:contains("Save")').click();
192+
cy.get('#datasetMetadata-datasetLanguage-control').select('English');
189193
cy.get('#datasetMetadata-datasetSubject-control').select('Earth and Environmental Sciences');
190194
cy.get('#datasetMetadata-datasetLicense-control').select('CC BY 4.0');
191195
cy.get('button:visible:contains("Save")').click();
@@ -308,6 +312,7 @@ describe('Dataverse Plugin - Workflow features', function () {
308312
cy.get('input[name="termsOfUse"]').check();
309313
cy.get('form:visible button:contains("Save")').click();
310314

315+
cy.get('#datasetMetadata-datasetLanguage-control').select('English');
311316
cy.get('#datasetMetadata-datasetSubject-control').select('Earth and Environmental Sciences');
312317
cy.get('#datasetMetadata-datasetLicense-control').select('CC BY 4.0');
313318
cy.get('button:visible:contains("Save")').click();

cypress/tests/Test6_CustomRequiredMetadataFields.cy.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ describe('Dataverse Plugin - Custom required metadata fields', function () {
176176
cy.login('eostrom', null, 'publicknowledge');
177177
cy.findSubmission('myQueue', submission.title);
178178

179+
cy.get('select[name="datasetLanguage"]').select('English');
179180
cy.get('select[name="datasetSubject"]').select('Earth and Environmental Sciences');
180181
cy.get('select[name="datasetLicense"]').select('CC BY 4.0');
181182
cy.get('#datasetMetadata-datasetAlternativeURL-control').focus().clear().type('https://example.com', {delay: 0});
@@ -241,6 +242,7 @@ describe('Dataverse Plugin - Custom required metadata fields', function () {
241242
cy.get('input[name="termsOfUse"]').check();
242243
cy.get('form:visible button:contains("Save")').click();
243244

245+
cy.get('select[name="datasetLanguage"]').select('English');
244246
cy.get('select[name="datasetSubject"]').select('Earth and Environmental Sciences');
245247
cy.get('select[name="datasetLicense"]').select('CC BY 4.0');
246248
cy.get('#datasetMetadata-datasetAlternativeURL-control').focus().clear().type('https://example.com', {delay: 0});

0 commit comments

Comments
 (0)