Skip to content

Commit 3d5a0a3

Browse files
Merge branch 'addDatasetLanguage340-911' into 'stable-3_3_0'
Exporta idioma para o Dataverse - 3.3.0 See merge request softwares-pkp/plugins_ojs/dataverse!231
2 parents d9be412 + 4cc98dd commit 3d5a0a3

21 files changed

Lines changed: 184 additions & 84 deletions

api/v1/datasets/DatasetHandler.inc.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public function edit($slimRequest, $response, $args)
139139
$data['title'] = $requestParams['datasetTitle'];
140140
$data['description'] = $requestParams['datasetDescription'];
141141
$data['keywords'] = (array) $requestParams['datasetKeywords'];
142+
$data['language'] = $requestParams['datasetLanguage'];
142143
$data['subject'] = $requestParams['datasetSubject'];
143144
$data['license'] = $requestParams['datasetLicense'];
144145

@@ -223,6 +224,7 @@ public function addDataset($slimRequest, $response, $args)
223224
$dataset->setTitle($requestParams['datasetTitle']);
224225
$dataset->setDescription($requestParams['datasetDescription']);
225226
$dataset->setKeywords((array) $requestParams['datasetKeywords']);
227+
$dataset->setLanguage($requestParams['datasetLanguage']);
226228
$dataset->setSubject($requestParams['datasetSubject']);
227229
$dataset->setLicense($requestParams['datasetLicense']);
228230

classes/components/forms/DatasetMetadataForm.inc.php

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,39 @@ public function __construct($action, $method, $locales, $dataset)
2929
'value' => $datasetMetadata['title'],
3030
'size' => 'large',
3131
]))
32-
->addField(new FieldRichTextarea('datasetDescription', [
33-
'label' => __('plugins.generic.dataverse.metadataForm.description'),
34-
'isRequired' => true,
35-
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist | image | code',
36-
'plugins' => 'paste,link,lists,image,code',
37-
'value' => $datasetMetadata['description']
38-
]))
39-
->addField(new FieldControlledVocab('datasetKeywords', [
40-
'label' => __('plugins.generic.dataverse.metadataForm.keyword'),
41-
'tooltip' => __('manager.setup.metadata.keywords.description'),
42-
'apiUrl' => $this->getVocabSuggestionUrlBase(),
43-
'locales' => $this->locales,
44-
'selected' => $datasetMetadata['keywords'],
45-
'value' => $datasetMetadata['keywords']
46-
]))
47-
->addField(new FieldSelect('datasetSubject', [
48-
'label' => __('plugins.generic.dataverse.metadataForm.subject.label'),
49-
'isRequired' => true,
50-
'options' => $dataverseMetadata->getDataverseSubjects(),
51-
'value' => $datasetMetadata['subject'],
52-
]))
53-
->addField(new FieldSelect('datasetLicense', [
54-
'label' => __('plugins.generic.dataverse.metadataForm.license.label'),
55-
'isRequired' => true,
56-
'options' => [],
57-
'value' => $datasetMetadata['license'],
58-
]));
32+
->addField(new FieldRichTextarea('datasetDescription', [
33+
'label' => __('plugins.generic.dataverse.metadataForm.description'),
34+
'isRequired' => true,
35+
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist | image | code',
36+
'plugins' => 'paste,link,lists,image,code',
37+
'value' => $datasetMetadata['description']
38+
]))
39+
->addField(new FieldControlledVocab('datasetKeywords', [
40+
'label' => __('plugins.generic.dataverse.metadataForm.keyword'),
41+
'tooltip' => __('manager.setup.metadata.keywords.description'),
42+
'apiUrl' => $this->getVocabSuggestionUrlBase(),
43+
'locales' => $this->locales,
44+
'selected' => $datasetMetadata['keywords'],
45+
'value' => $datasetMetadata['keywords']
46+
]))
47+
->addField(new FieldSelect('datasetLanguage', [
48+
'label' => __('plugins.generic.dataverse.metadataForm.language.label'),
49+
'isRequired' => true,
50+
'options' => $this->getAvailableLanguages(),
51+
'value' => $datasetMetadata['language'],
52+
]))
53+
->addField(new FieldSelect('datasetSubject', [
54+
'label' => __('plugins.generic.dataverse.metadataForm.subject.label'),
55+
'isRequired' => true,
56+
'options' => $dataverseMetadata->getDataverseSubjects(),
57+
'value' => $datasetMetadata['subject'],
58+
]))
59+
->addField(new FieldSelect('datasetLicense', [
60+
'label' => __('plugins.generic.dataverse.metadataForm.license.label'),
61+
'isRequired' => true,
62+
'options' => [],
63+
'value' => $datasetMetadata['license'],
64+
]));
5965
}
6066

6167
private function getDatasetMetadata($dataset)
@@ -65,6 +71,7 @@ private function getDatasetMetadata($dataset)
6571
'title' => '',
6672
'description' => '',
6773
'keywords' => [],
74+
'language' => '',
6875
'subject' => '',
6976
'license' => ''
7077
];
@@ -74,6 +81,7 @@ private function getDatasetMetadata($dataset)
7481
'title' => $dataset->getTitle(),
7582
'description' => $dataset->getDescription(),
7683
'keywords' => (array) $dataset->getKeywords() ?? [],
84+
'language' => $dataset->getLanguage(),
7785
'subject' => $dataset->getSubject(),
7886
'license' => $dataset->getLicense()
7987
];
@@ -85,4 +93,17 @@ private function getVocabSuggestionUrlBase()
8593
$contextPath = $request->getContext()->getPath();
8694
return $request->getDispatcher()->url($request, ROUTE_API, $contextPath, 'vocabs', null, null, ['vocab' => 'submissionKeyword']);
8795
}
96+
97+
private function getAvailableLanguages(): array
98+
{
99+
$context = Application::get()->getRequest()->getContext();
100+
$availableLanguages = [];
101+
102+
foreach ($context->getSupportedSubmissionLocales() as $locale) {
103+
$languageName = \Locale::getDisplayLanguage($locale, 'en');
104+
$availableLanguages[] = ['key' => $languageName, 'label' => $languageName];
105+
}
106+
107+
return $availableLanguages;
108+
}
88109
}

classes/dispatchers/DatasetMetadataStep3Dispatcher.inc.php

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,22 @@ public function addDatasetMetadataFields($hookName, $args): void
2525
if (!empty($draftDatasetFiles)) {
2626
$dataverseMetadata = new DataverseMetadata();
2727
$dataverseSubjectVocab = $dataverseMetadata->getDataverseSubjects();
28-
$availableLicenses = $dataverseMetadata->getDataverseLicenses();
29-
3028
$datasetSubjectLabels = array_column($dataverseSubjectVocab, 'label');
3129
$datasetSubjectValues = array_column($dataverseSubjectVocab, 'value');
3230

31+
$availableLicenses = $dataverseMetadata->getDataverseLicenses();
3332
$selectedLicense = $submission->getData('datasetLicense') ?? $dataverseMetadata->getDefaultLicense();
3433

34+
$availableLanguages = $this->getAvailableLanguages();
35+
$selectedLanguage = $submission->getData('datasetLanguage') ?? \Locale::getDisplayLanguage($submission->getLocale(), 'en');
36+
3537
$templateMgr->assign([
36-
'dataverseSubjectVocab' => $datasetSubjectLabels,
37-
'availableLicenses' => $this->mapLicensesForStep3Display($availableLicenses),
38+
'selectedLanguage' => $selectedLanguage,
39+
'availableLanguages' => $availableLanguages,
3840
'subjectId' => array_search($submission->getData('datasetSubject'), $datasetSubjectValues),
39-
'selectedLicense' => $selectedLicense
41+
'dataverseSubjectVocab' => $datasetSubjectLabels,
42+
'selectedLicense' => $selectedLicense,
43+
'availableLicenses' => $this->mapLicensesForStep3Display($availableLicenses)
4044
]);
4145

4246
$output .= $templateMgr->fetch($this->plugin->getTemplateResource('datasetMetadataStep3.tpl'));
@@ -52,12 +56,26 @@ private function mapLicensesForStep3Display(array $licenses): array
5256
return $mappedLicenses;
5357
}
5458

59+
private function getAvailableLanguages(): array
60+
{
61+
$context = Application::get()->getRequest()->getContext();
62+
$availableLanguages = [];
63+
64+
foreach ($context->getSupportedSubmissionLocales() as $locale) {
65+
$languageName = \Locale::getDisplayLanguage($locale, 'en');
66+
$availableLanguages[$languageName] = $languageName;
67+
}
68+
69+
return $availableLanguages;
70+
}
71+
5572
public function readDatasetMetadataFields($hookName, $args): bool
5673
{
5774
$form = &$args[0];
5875
$submission = &$form->submission;
5976

60-
$form->readUserVars(array('datasetSubject', 'datasetLicense'));
77+
$form->readUserVars(['datasetLanguage', 'datasetSubject', 'datasetLicense']);
78+
$language = $form->getData('datasetLanguage');
6179
$subject = $form->getData('datasetSubject');
6280
$license = $form->getData('datasetLicense');
6381

@@ -72,6 +90,7 @@ public function readDatasetMetadataFields($hookName, $args): bool
7290
$newSubmission = Services::get('submission')->edit(
7391
$submission,
7492
[
93+
'datasetLanguage' => $language,
7594
'datasetSubject' => $datasetSubjectValues[$subject],
7695
'datasetLicense' => $license
7796
],

classes/dispatchers/DataverseEventsDispatcher.inc.php

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ protected function registerHooks(): void
2828
public function modifySubmissionSchema(string $hookName, array $params): bool
2929
{
3030
$schema = &$params[0];
31+
$schema->properties->{'datasetLanguage'} = (object) [
32+
'type' => 'string',
33+
'apiSummary' => true,
34+
'validation' => ['nullable'],
35+
];
3136
$schema->properties->{'datasetSubject'} = (object) [
3237
'type' => 'string',
3338
'apiSummary' => true,
@@ -83,7 +88,7 @@ public function datasetDepositOnSubmission(string $hookName, array $params): boo
8388
$datasetService = new DatasetService();
8489
$depositInfo = $datasetService->deposit($submission, $dataset);
8590
if ($depositInfo['status'] != 'Success') {
86-
$stepForm->addError('depositError', __($depositInfo['message'].'.author', $depositInfo['messageParams']));
91+
$stepForm->addError('depositError', __($depositInfo['message'] . '.author', $depositInfo['messageParams']));
8792
$stepForm->addErrorField('depositError');
8893
}
8994

@@ -207,16 +212,16 @@ public function addDatasetPublishNoticeInPost(string $hookName, \PKP\components\
207212
'description' => __("plugins.generic.dataverse.researchData.publishNotice", $params),
208213
'groupId' => 'default'
209214
]))
210-
->addField(new \PKP\components\forms\FieldRadioInput('researchDataRadioInputs', [
211-
'label' => __('plugins.generic.dataverse.researchData.wouldLikeToPublish'),
212-
'name' => 'shouldPublishResearchData',
213-
'options' => [
214-
['value' => 1, 'label' => __('common.yes')],
215-
['value' => 0, 'label' => __('common.no')]
216-
],
217-
'isRequired' => true,
218-
'groupId' => 'default'
219-
]));
215+
->addField(new \PKP\components\forms\FieldRadioInput('researchDataRadioInputs', [
216+
'label' => __('plugins.generic.dataverse.researchData.wouldLikeToPublish'),
217+
'name' => 'shouldPublishResearchData',
218+
'options' => [
219+
['value' => 1, 'label' => __('common.yes')],
220+
['value' => 0, 'label' => __('common.no')]
221+
],
222+
'isRequired' => true,
223+
'groupId' => 'default'
224+
]));
220225
} catch (DataverseException $e) {
221226
$warningIconHtml = '<span class="fa fa-exclamation-triangle pkpIcon--inline"></span>';
222227
$noticeMsg = __('plugins.generic.dataverse.notice.cannotPublish', ['error' => $e->getMessage()]);
@@ -370,7 +375,7 @@ public function addSelectDataFilesForReview(string $hookName, array $params): ?s
370375
}
371376

372377
$templateOutput = $this->prepareFormToDisplay($templateMgr, $form, $request);
373-
$pattern = '/<p>'.__('editor.submission.externalReviewDescription').'<\/p>/';
378+
$pattern = '/<p>' . __('editor.submission.externalReviewDescription') . '<\/p>/';
374379

375380
if (preg_match($pattern, $templateOutput, $matches, PREG_OFFSET_CAPTURE)) {
376381
$match = $matches[0][0];

classes/entities/Dataset.inc.php

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

48+
public function getLanguage(): ?string
49+
{
50+
return $this->getData('language');
51+
}
52+
53+
public function setLanguage(string $language): void
54+
{
55+
$this->setData('language', $language);
56+
}
57+
4858
public function getSubject(): ?string
4959
{
5060
return $this->getData('subject');

classes/factories/JsonDatasetFactory.inc.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ protected function sanitizeProps(): array
8585
$props['description'] = $metadata->value[0]->dsDescriptionValue->value;
8686
break;
8787
case 'subject':
88-
$props['subject'] = $metadata->value[0];
88+
case 'language':
89+
$props[$metadata->typeName] = $metadata->value[0];
8990
break;
9091
case 'keyword':
9192
$props['keywords'] = array_map(function (stdClass $keyword) {

classes/factories/SubmissionDatasetFactory.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22

33
import('plugins.generic.dataverse.classes.factories.DatasetFactory');
4-
import('plugins.generic.dataverse.classes.entities.Dataset');
54
import('plugins.generic.dataverse.classes.entities.DatasetAuthor');
65
import('plugins.generic.dataverse.classes.entities.DatasetContact');
76
import('plugins.generic.dataverse.classes.entities.DatasetFile');
@@ -26,6 +25,7 @@ protected function sanitizeProps(): array
2625
$props['title'] = $datasetTitlePrefix . $publication->getLocalizedTitle('title');
2726
$props['description'] = $publication->getLocalizedData('abstract');
2827
$props['keywords'] = $publication->getLocalizedData('keywords');
28+
$props['language'] = $this->submission->getData('datasetLanguage');
2929
$props['subject'] = $this->submission->getData('datasetSubject');
3030
$props['license'] = $this->submission->getData('datasetLicense');
3131
$props['authors'] = array_map([$this, 'createDatasetAuthor'], $authors);

cypress/tests/Test03_ResearchDataDeposit.spec.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ describe('Research data deposit', function () {
131131
cy.wait(1000);
132132
cy.get('select[id^="datasetSubject"').select('Other');
133133

134+
cy.contains('Research Data Language');
135+
cy.get('select[id^="datasetLanguage"').should('have.value', 'English');
136+
cy.get('select[id^="datasetLanguage"').select('French');
137+
134138
cy.contains('Research Data License');
135139
cy.get('select[id^="datasetLicense"').should('have.value', 'CC0 1.0');
136140
cy.get('select[id^="datasetLicense"').select('CC BY 4.0');
@@ -194,6 +198,9 @@ describe('Research data deposit', function () {
194198
cy.get('#datasetMetadata-datasetKeywords-control').type('Computer Vision', { delay: 0 });
195199
cy.wait(500);
196200
cy.get('#datasetMetadata-datasetKeywords-control').type('{enter}', { delay: 0 });
201+
cy.get('#datasetMetadata-datasetLanguage-control').should('have.value', 'French');
202+
cy.get('#datasetMetadata-datasetLanguage-control').select('English');
203+
cy.get('#datasetMetadata-datasetSubject-control').should('have.value', 'Other');
197204
cy.get('#datasetMetadata-datasetSubject-control').select('Computer and Information Science');
198205
cy.get('#datasetMetadata-datasetLicense-control').should('have.value', 'CC BY 4.0');
199206
cy.get('#datasetMetadata-datasetLicense-control').select('CC0 1.0');

dataverseAPI/packagers/DatasetPackager.inc.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

dataverseAPI/packagers/NativeAPIDatasetPackager.inc.php

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<?php
22

3-
import('plugins.generic.dataverse.dataverseAPI.packagers.DatasetPackager');
43
import('plugins.generic.dataverse.classes.DataverseMetadata');
54

6-
class NativeAPIDatasetPackager extends DatasetPackager
5+
class NativeAPIDatasetPackager
76
{
7+
private $dataset;
88
private $packageDirPath;
99
private $dataverseMetadata;
1010
private $datasetLicense;
@@ -17,7 +17,7 @@ public function __construct(Dataset $dataset)
1717
$this->packageDirPath = tempnam('/tmp', 'dataverse');
1818
unlink($this->packageDirPath);
1919
mkdir($this->packageDirPath);
20-
parent::__construct($dataset);
20+
$this->dataset = $dataset;
2121
}
2222

2323
public function getPackageDirPath(): string
@@ -97,6 +97,11 @@ public function getMetadataField(string $metadata): array
9797
'multiple' => true,
9898
'typeClass' => 'compound'
9999
],
100+
'language' => [
101+
'typeName' => 'language',
102+
'multiple' => true,
103+
'typeClass' => 'controlledVocabulary'
104+
],
100105
'subject' => [
101106
'typeName' => 'subject',
102107
'multiple' => true,
@@ -125,8 +130,8 @@ public function getMetadataField(string $metadata): array
125130
private function createSimpleCompoundMetadata(array $metadataField, string $value): array
126131
{
127132
$typeName = $metadataField['typeName'] == 'publication'
128-
? $metadataField['typeName'] . 'Citation'
129-
: $metadataField['typeName'] . 'Value';
133+
? $metadataField['typeName'] . 'Citation'
134+
: $metadataField['typeName'] . 'Value';
130135

131136
return [
132137
$typeName => [
@@ -184,13 +189,6 @@ public function createDatasetPackage(): void
184189
fclose($datasetPackage);
185190
}
186191

187-
public function createFilesPackage(): void
188-
{
189-
foreach ($this->dataset->getFiles() as $file) {
190-
$this->files[$fileName] = $filePath;
191-
}
192-
}
193-
194192
public function getPackagePath(): string
195193
{
196194
return $this->getPackageDirPath() . DIRECTORY_SEPARATOR . 'dataset.json';

0 commit comments

Comments
 (0)