Skip to content

Commit 52c6bdc

Browse files
Fixes merge conflict
2 parents 5f91a2c + 325d0d1 commit 52c6bdc

17 files changed

Lines changed: 241 additions & 117 deletions

api/v1/datasets/DatasetHandler.inc.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,15 +218,13 @@ public function addDataset($slimRequest, $response, $args)
218218
$dataset->setLicense($requestParams['datasetLicense']);
219219

220220
if (!empty($dataset->getFiles())) {
221-
try {
222-
$datasetService = new DatasetService();
223-
$datasetService->deposit($submission, $dataset);
224-
} catch (DataverseException $e) {
225-
return $response->withStatus(403)
226-
->withJsonError(
227-
'plugins.generic.dataverse.error.depositFailed',
228-
['error' => $e->getMessage()]
229-
);
221+
$datasetService = new DatasetService();
222+
$depositInfo = $datasetService->deposit($submission, $dataset);
223+
if ($depositInfo['status'] != 'Success') {
224+
return $response->withStatus(403)->withJsonError(
225+
$depositInfo['message'].'.author',
226+
$depositInfo['messageParams']
227+
);
230228
}
231229
}
232230

classes/APACitation.inc.php

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,12 @@ public function getFormattedCitationBySubmission(Submission $submission): string
1818
$publication = $submission->getCurrentPublication();
1919
$authors = $publication->getData('authors');
2020
$submittedDate = new DateTime($submission->getDateSubmitted());
21-
$submissionDoi = $this->getSubmissionDoi($submission);
2221

2322
$submissionCitation = $this->createAuthorsCitationAPA($authors) . ' ';
2423
$submissionCitation .= '(' . date_format($submittedDate, 'Y') . '). ';
2524
$submissionCitation .= '<em>' . $submission->getLocalizedTitle($submission->getLocale()) . '</em>. ';
2625
$submissionCitation .= $journal->getLocalizedName();
2726

28-
if ($submissionDoi) {
29-
$submissionCitation .= ". <a href=\"$submissionDoi\">$submissionDoi</a>";
30-
}
31-
3227
return $submissionCitation;
3328
}
3429

@@ -71,24 +66,4 @@ private function getAuthorCitation(Author $author): string
7166

7267
return $familyName . ', ' . mb_substr($givenName, 0, 1) . ".";
7368
}
74-
75-
private function getSubmissionDoi(Submission $submission): string
76-
{
77-
$publication = $submission->getCurrentPublication();
78-
$doi = $publication->getStoredPubId('doi');
79-
80-
if ($doi) {
81-
return 'https://doi.org/' . $this->doiURLEncode($doi);
82-
}
83-
84-
return '';
85-
}
86-
87-
private function doiURLEncode($pubId)
88-
{
89-
$search = ['%', '"', '#', ' ', '<', '>', '{'];
90-
$replace = ['%25', '%22', '%23', '%20', '%3c', '%3e', '%7b'];
91-
$pubId = str_replace($search, $replace, $pubId);
92-
return $pubId;
93-
}
9469
}

classes/dispatchers/DataverseEventsDispatcher.inc.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,9 @@ public function datasetDepositOnSubmission(string $hookName, array $params): boo
8181
}
8282

8383
$datasetService = new DatasetService();
84-
try {
85-
$datasetService->deposit($submission, $dataset);
86-
} catch (DataverseException $e) {
87-
$stepForm->addError(
88-
'depositError',
89-
__('plugins.generic.dataverse.error.depositFailedOnSubmission', ['error' => $e->getMessage()])
90-
);
84+
$depositInfo = $datasetService->deposit($submission, $dataset);
85+
if ($depositInfo['status'] != 'Success') {
86+
$stepForm->addError('depositError', __($depositInfo['message'].'.author', $depositInfo['messageParams']));
9187
$stepForm->addErrorField('depositError');
9288
}
9389

@@ -420,11 +416,11 @@ public function updateDatasetOnPublicationUpdate(string $hookName, array $args):
420416
return false;
421417
}
422418

423-
import('plugins.generic.dataverse.classes.APACitation');
424-
$apaCitation = new APACitation();
419+
import('plugins.generic.dataverse.classes.factories.SubmissionDatasetFactory');
420+
$datasetFactory = new SubmissionDatasetFactory($submission);
425421

426422
$data['persistentId'] = $study->getPersistentId();
427-
$data['pubCitation'] = $apaCitation->getFormattedCitationBySubmission($submission);
423+
$data['relatedPublication'] = $datasetFactory->getDatasetRelatedPublication($publication);
428424

429425
$datasetService = new DatasetService();
430426
$datasetService->update($data);

classes/entities/Dataset.inc.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,14 @@ public function setKeywords(array $keywords): void
9595
$this->setData('keywords', $keywords);
9696
}
9797

98-
public function getPubCitation(): ?string
98+
public function getRelatedPublication(): ?DatasetRelatedPublication
9999
{
100-
return $this->getData('pubCitation');
100+
return $this->getData('relatedPublication');
101101
}
102102

103-
public function setPubCitation(string $pubCitation): void
103+
public function setRelatedPublication(DatasetRelatedPublication $relatedPublication): void
104104
{
105-
$this->setData('pubCitation', $pubCitation);
105+
$this->setData('relatedPublication', $relatedPublication);
106106
}
107107

108108
public function getFiles(): ?array
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
class DatasetRelatedPublication extends DataObject
4+
{
5+
public function __construct(string $citation, ?string $idType, ?string $idNumber, ?string $url)
6+
{
7+
$this->setData('citation', $citation);
8+
$this->setData('IDType', $idType);
9+
$this->setData('IDNumber', $idNumber);
10+
$this->setData('URL', $url);
11+
}
12+
13+
public function getCitation(): string
14+
{
15+
return $this->getData('citation');
16+
}
17+
18+
public function getIdType(): ?string
19+
{
20+
return $this->getData('IDType');
21+
}
22+
23+
public function getIdNumber(): ?string
24+
{
25+
return $this->getData('IDNumber');
26+
}
27+
28+
public function getUrl(): ?string
29+
{
30+
return $this->getData('URL');
31+
}
32+
}

classes/factories/JsonDatasetFactory.inc.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import('plugins.generic.dataverse.classes.entities.DatasetAuthor');
55
import('plugins.generic.dataverse.classes.entities.DatasetContact');
66
import('plugins.generic.dataverse.classes.entities.DatasetFile');
7+
import('plugins.generic.dataverse.classes.entities.DatasetRelatedPublication');
78

89
class JsonDatasetFactory extends DatasetFactory
910
{
@@ -91,7 +92,19 @@ protected function sanitizeProps(): array
9192
}, $metadata->value);
9293
break;
9394
case 'publication':
94-
$props['pubCitation'] = $metadata->value[0]->publicationCitation->value;
95+
$publication = $metadata->value[0];
96+
$props['relatedPublication'] = new DatasetRelatedPublication(
97+
$publication->publicationCitation->value,
98+
isset($publication->publicationIDType->value) ?
99+
$publication->publicationIDType->value
100+
: null,
101+
isset($publication->publicationIDNumber->value) ?
102+
$publication->publicationIDNumber->value
103+
: null,
104+
isset($publication->publicationURL->value) ?
105+
$publication->publicationURL->value
106+
: null
107+
);
95108
break;
96109
default:
97110
break;

classes/factories/SubmissionDatasetFactory.inc.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import('plugins.generic.dataverse.classes.entities.DatasetAuthor');
66
import('plugins.generic.dataverse.classes.entities.DatasetContact');
77
import('plugins.generic.dataverse.classes.entities.DatasetFile');
8+
import('plugins.generic.dataverse.classes.entities.DatasetRelatedPublication');
89

910
class SubmissionDatasetFactory extends DatasetFactory
1011
{
@@ -30,7 +31,7 @@ protected function sanitizeProps(): array
3031
$props['authors'] = array_map([$this, 'createDatasetAuthor'], $authors);
3132
$props['contact'] = $this->createDatasetContact();
3233
$props['depositor'] = $this->getDatasetDepositor();
33-
$props['pubCitation'] = $this->getDatasetPubCitation();
34+
$props['relatedPublication'] = $this->getDatasetRelatedPublication($publication);
3435
$props['files'] = $this->getDatasetFiles();
3536

3637
return $props;
@@ -81,11 +82,30 @@ private function getDatasetDepositor(): string
8182
return $userName . ' (via ' . $contextName . ')';
8283
}
8384

84-
private function getDatasetPubCitation(): string
85+
public function getDatasetRelatedPublication($publication): DatasetRelatedPublication
8586
{
8687
import('plugins.generic.dataverse.classes.APACitation');
8788
$apaCitation = new APACitation();
88-
return $apaCitation->getFormattedCitationBySubmission($this->submission);
89+
$submissionCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
90+
$submissionDoi = $publication->getStoredPubId('doi');
91+
92+
if (empty($submissionDoi)) {
93+
return new DatasetRelatedPublication($submissionCitation, null, null, null);
94+
}
95+
96+
return new DatasetRelatedPublication(
97+
$submissionCitation,
98+
'doi',
99+
$submissionDoi,
100+
"https://doi.org/" . $this->doiURLEncode($submissionDoi)
101+
);
102+
}
103+
104+
private function doiURLEncode($doi)
105+
{
106+
$search = ['%', '"', '#', ' ', '<', '>', '{'];
107+
$replace = ['%25', '%22', '%23', '%20', '%3c', '%3e', '%7b'];
108+
return str_replace($search, $replace, $doi);
89109
}
90110

91111
private function getDatasetFiles(): array

classes/services/DatasetService.inc.php

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,47 @@
66

77
class DatasetService extends DataverseService
88
{
9-
public function deposit(Submission $submission, Dataset $dataset): void
9+
public function deposit(Submission $submission, Dataset $dataset): array
1010
{
1111
$request = Application::get()->getRequest();
1212
$contextId = $request->getContext()->getId();
13+
$dataverseClient = new DataverseClient();
1314

1415
try {
15-
$dataverseClient = new DataverseClient();
1616
$datasetIdentifier = $dataverseClient->getDatasetActions()->create($dataset);
17+
} catch (DataverseException $e) {
18+
$this->registerEventLog(
19+
$submission,
20+
'plugins.generic.dataverse.error.datasetDeposit',
21+
['error' => $e->getMessage()]
22+
);
23+
return [
24+
'status' => 'Error',
25+
'message' => 'plugins.generic.dataverse.error.datasetDeposit',
26+
'messageParams' => ['error' => $e->getMessage()]
27+
];
28+
}
1729

18-
foreach ($dataset->getFiles() as $file) {
30+
foreach ($dataset->getFiles() as $file) {
31+
try {
1932
$dataverseClient->getDatasetFileActions()->add(
2033
$datasetIdentifier->getPersistentId(),
2134
$file->getOriginalFileName(),
2235
$file->getPath()
2336
);
37+
} catch (DataverseException $e) {
38+
$this->registerEventLog(
39+
$submission,
40+
'plugins.generic.dataverse.error.datasetFileDeposit',
41+
['error' => $e->getMessage()]
42+
);
43+
$dataverseClient->getDatasetActions()->delete($datasetIdentifier->getPersistentId());
44+
return [
45+
'status' => 'Error',
46+
'message' => 'plugins.generic.dataverse.error.datasetFileDeposit',
47+
'messageParams' => ['error' => $e->getMessage(), 'fileName' => $file->getOriginalFileName()]
48+
];
2449
}
25-
} catch (DataverseException $e) {
26-
$this->registerEventLog(
27-
$submission,
28-
'plugins.generic.dataverse.error.depositFailed',
29-
['error' => $e->getMessage()]
30-
);
31-
error_log('Dataverse API error: ' . $e->getMessage());
32-
throw $e;
3350
}
3451

3552
$configuration = DAORegistry::getDAO('DataverseConfigurationDAO')->get($contextId);
@@ -68,6 +85,8 @@ public function deposit(Submission $submission, Dataset $dataset): void
6885
);
6986

7087
DAORegistry::getDAO('DraftDatasetFileDAO')->deleteBySubmissionId($submission->getId());
88+
89+
return ['status' => 'Success'];
7190
}
7291

7392
public function update(array $data): void
@@ -165,7 +184,6 @@ public function publish(DataverseStudy $study): void
165184

166185
try {
167186
$dataverseClient = new DataverseClient();
168-
169187
$dataset = $dataverseClient->getDatasetActions()->get($study->getPersistentId());
170188

171189
if ($dataset->isPublished()) {

dataverseAPI/packagers/NativeAPIDatasetPackager.inc.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public function getMetadataField(string $metadata): array
112112
'multiple' => false,
113113
'typeClass' => 'primitive'
114114
],
115-
'pubCitation' => [
115+
'relatedPublication' => [
116116
'typeName' => 'publication',
117117
'multiple' => true,
118118
'typeClass' => 'compound'
@@ -141,14 +141,15 @@ private function createSimpleCompoundMetadata(array $metadataField, string $valu
141141
private function createMultiCompoundMetadata(array $metadataField, object $object): array
142142
{
143143
$objectData = $object->getAllData();
144+
$controlledVocabMetadata = ['identifierScheme', 'IDType'];
144145

145146
$metadataValue = [];
146147
foreach ($objectData as $attr => $value) {
147148
if (is_null($value)) {
148149
continue;
149150
}
150151

151-
$metadataTypeClass = $attr == 'identifierScheme' ? 'controlledVocabulary' : 'primitive';
152+
$metadataTypeClass = in_array($attr, $controlledVocabMetadata) ? 'controlledVocabulary' : 'primitive';
152153
$metadataValue = array_merge($metadataValue, [
153154
$metadataField['typeName'] . ucfirst($attr) => [
154155
'typeName' => $metadataField['typeName'] . ucfirst($attr),

locale/en_US/locale.po

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,23 @@ msgstr "The subject of the research data is required.<br>"
116116
msgid "plugins.generic.dataverse.error.readmeFileRequired"
117117
msgstr "It is mandatory to send a README file, in PDF or TXT format, to accompany the research data files"
118118

119-
msgid "plugins.generic.dataverse.error.depositFailedOnSubmission"
120-
msgstr "Error depositing research data to Dataverse: {$error}<br>"
121-
"Please choose another data statement option or try again later."
122-
123119
msgid "plugins.generic.dataverse.error.getFailed"
124120
msgstr "Error getting research data to Dataverse: {$error}"
125121

126-
msgid "plugins.generic.dataverse.error.depositFailed"
122+
msgid "plugins.generic.dataverse.error.datasetDeposit"
127123
msgstr "Error depositing research data to Dataverse: {$error}"
128124

125+
msgid "plugins.generic.dataverse.error.datasetDeposit.author"
126+
msgstr "Error depositing research data to Dataverse: {$error}<br>"
127+
"Please choose another data statement option or try again later."
128+
129+
msgid "plugins.generic.dataverse.error.datasetFileDeposit"
130+
msgstr "Error depositing the data file \"{$fileName}\" to Dataverse: {$error}"
131+
132+
msgid "plugins.generic.dataverse.error.datasetFileDeposit.author"
133+
msgstr "Error depositing the data file \"{$fileName}\" to Dataverse: {$error}<br>"
134+
"Please check if there is a problem with the file and replace it if necessary"
135+
129136
msgid "plugins.generic.dataverse.error.updateFailed"
130137
msgstr "Error updating research data in Dataverse: {$error}"
131138

0 commit comments

Comments
 (0)