Skip to content

Commit 906f468

Browse files
Merge branch 'doiRelatedPublication340-771' into 'main'
Atualização do campo Publicação Relacionada - 3.4.0 See merge request softwares-pkp/plugins_ojs/dataverse!193
2 parents 0db3df3 + b119a59 commit 906f468

13 files changed

Lines changed: 164 additions & 50 deletions

classes/APACitation.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,11 @@ public function getFormattedCitationBySubmission(Submission $submission, ?Public
3030
$context = Application::getContextDAO()->getById($submission->getData('contextId'));
3131
$authors = $publication->getData('authors')->toArray();
3232
$submittedDate = new DateTime($submission->getData('dateSubmitted'));
33-
$doiObject = $publication->getData('doiObject');
3433

3534
$submissionCitation = $this->createAuthorsCitationAPA($authors) . ' ';
3635
$submissionCitation .= '(' . date_format($submittedDate, 'Y') . '). ';
3736
$submissionCitation .= '<em>' . $publication->getLocalizedTitle($this->locale) . '</em>. ';
3837
$submissionCitation .= $context->getLocalizedName();
39-
if ($doiObject) {
40-
$doiUrl = $doiObject->getResolvingUrl();
41-
$submissionCitation .= ". <a href=\"$doiUrl\">$doiUrl</a>";
42-
}
4338

4439
return $submissionCitation;
4540
}

classes/dispatchers/DataverseEventsDispatcher.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
use APP\plugins\generic\dataverse\api\v1\datasets\DatasetHandler;
1313
use APP\plugins\generic\dataverse\api\v1\dataverse\DataverseHandler;
1414
use APP\plugins\generic\dataverse\api\v1\draftDatasetFiles\DraftDatasetFileHandler;
15-
use APP\plugins\generic\dataverse\classes\APACitation;
1615
use APP\plugins\generic\dataverse\classes\components\forms\SelectDataFilesForReviewForm;
1716
use APP\plugins\generic\dataverse\classes\dataverseConfiguration\DataverseConfiguration;
1817
use APP\plugins\generic\dataverse\classes\dispatchers\DataverseDispatcher;
1918
use APP\plugins\generic\dataverse\classes\exception\DataverseException;
2019
use APP\plugins\generic\dataverse\classes\facades\Repo;
20+
use APP\plugins\generic\dataverse\classes\factories\SubmissionDatasetFactory;
2121
use APP\plugins\generic\dataverse\classes\observers\listeners\DatasetDepositOnSubmission;
2222
use APP\plugins\generic\dataverse\classes\observers\listeners\ProcessDataverseDecisionsActions;
2323
use APP\plugins\generic\dataverse\classes\services\DatasetService;
@@ -328,9 +328,9 @@ public function updateDatasetOnPublicationUpdate(string $hookName, array $params
328328
return false;
329329
}
330330

331-
$apaCitation = new APACitation();
331+
$datasetFactory = new SubmissionDatasetFactory($submission);
332332
$data['persistentId'] = $study->getPersistentId();
333-
$data['pubCitation'] = $apaCitation->getFormattedCitationBySubmission($submission, $publication);
333+
$data['relatedPublication'] = $datasetFactory->getDatasetRelatedPublication($publication);
334334

335335
$datasetService = new DatasetService();
336336
$datasetService->update($data);

classes/entities/Dataset.php

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

102-
public function getPubCitation(): ?string
102+
public function getRelatedPublication(): ?DatasetRelatedPublication
103103
{
104-
return $this->getData('pubCitation');
104+
return $this->getData('relatedPublication');
105105
}
106106

107-
public function setPubCitation(string $pubCitation): void
107+
public function setRelatedPublication(DatasetRelatedPublication $relatedPublication): void
108108
{
109-
$this->setData('pubCitation', $pubCitation);
109+
$this->setData('relatedPublication', $relatedPublication);
110110
}
111111

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

classes/factories/JsonDatasetFactory.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use APP\plugins\generic\dataverse\classes\entities\DatasetAuthor;
77
use APP\plugins\generic\dataverse\classes\entities\DatasetContact;
88
use APP\plugins\generic\dataverse\classes\entities\DatasetFile;
9+
use APP\plugins\generic\dataverse\classes\entities\DatasetRelatedPublication;
910
use stdClass;
1011

1112
class JsonDatasetFactory extends DatasetFactory
@@ -94,7 +95,19 @@ protected function sanitizeProps(): array
9495
}, $metadata->value);
9596
break;
9697
case 'publication':
97-
$props['pubCitation'] = $metadata->value[0]->publicationCitation->value;
98+
$publication = $metadata->value[0];
99+
$props['relatedPublication'] = new DatasetRelatedPublication(
100+
$publication->publicationCitation->value,
101+
isset($publication->publicationIDType->value) ?
102+
$publication->publicationIDType->value
103+
: null,
104+
isset($publication->publicationIDNumber->value) ?
105+
$publication->publicationIDNumber->value
106+
: null,
107+
isset($publication->publicationURL->value) ?
108+
$publication->publicationURL->value
109+
: null
110+
);
98111
break;
99112
default:
100113
break;

classes/factories/SubmissionDatasetFactory.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use APP\plugins\generic\dataverse\classes\entities\DatasetAuthor;
1414
use APP\plugins\generic\dataverse\classes\entities\DatasetContact;
1515
use APP\plugins\generic\dataverse\classes\entities\DatasetFile;
16+
use APP\plugins\generic\dataverse\classes\entities\DatasetRelatedPublication;
1617
use APP\plugins\generic\dataverse\classes\draftDatasetFile\DraftDatasetFile;
1718
use APP\plugins\generic\dataverse\classes\APACitation;
1819
use APP\plugins\generic\dataverse\classes\facades\Repo;
@@ -48,7 +49,7 @@ protected function sanitizeProps(): array
4849
$props['authors'] = array_map([$this, 'createDatasetAuthor'], $authors);
4950
$props['contact'] = $this->createDatasetContact();
5051
$props['depositor'] = $this->getDatasetDepositor();
51-
$props['pubCitation'] = $this->getDatasetPubCitation();
52+
$props['relatedPublication'] = $this->getDatasetRelatedPublication($publication);
5253
$props['files'] = $this->getDatasetFiles();
5354

5455
return $props;
@@ -98,10 +99,22 @@ private function getDatasetDepositor(): string
9899
return $userName . ' (via ' . $contextName . ')';
99100
}
100101

101-
private function getDatasetPubCitation(): string
102+
public function getDatasetRelatedPublication($publication): DatasetRelatedPublication
102103
{
103104
$apaCitation = new APACitation();
104-
return $apaCitation->getFormattedCitationBySubmission($this->submission);
105+
$submissionCitation = $apaCitation->getFormattedCitationBySubmission($this->submission, $publication);
106+
$doiObject = $publication->getData('doiObject');
107+
108+
if (empty($doiObject)) {
109+
return new DatasetRelatedPublication($submissionCitation, null, null, null);
110+
}
111+
112+
return new DatasetRelatedPublication(
113+
$submissionCitation,
114+
'doi',
115+
$doiObject->getDoi(),
116+
$doiObject->getResolvingUrl()
117+
);
105118
}
106119

107120
private function getDatasetFiles(): array

dataverseAPI/packagers/NativeAPIDatasetPackager.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public function getMetadataField(string $metadata): array
115115
'multiple' => false,
116116
'typeClass' => 'primitive'
117117
],
118-
'pubCitation' => [
118+
'relatedPublication' => [
119119
'typeName' => 'publication',
120120
'multiple' => true,
121121
'typeClass' => 'compound'
@@ -144,14 +144,15 @@ private function createSimpleCompoundMetadata(array $metadataField, string $valu
144144
private function createMultiCompoundMetadata(array $metadataField, object $object): array
145145
{
146146
$objectData = $object->getAllData();
147+
$controlledVocabMetadata = ['identifierScheme', 'IDType'];
147148

148149
$metadataValue = [];
149150
foreach ($objectData as $attr => $value) {
150151
if (is_null($value)) {
151152
continue;
152153
}
153154

154-
$metadataTypeClass = $attr == 'identifierScheme' ? 'controlledVocabulary' : 'primitive';
155+
$metadataTypeClass = in_array($attr, $controlledVocabMetadata) ? 'controlledVocabulary' : 'primitive';
155156
$metadataValue = array_merge($metadataValue, [
156157
$metadataField['typeName'] . ucfirst($attr) => [
157158
'typeName' => $metadataField['typeName'] . ucfirst($attr),

tests/APACitationTest.php

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ public function testDatasetCitationGetsDoiMarkup(): void
120120

121121
public function testPreprintCitationIsApa(): void
122122
{
123-
$expectedSubmissionCitation = 'Castanheiras, I. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus.';
124-
$expectedSubmissionCitation .= ' <a href="https://doi.org/10.1234/LepidusPreprints.1245">https://doi.org/10.1234/LepidusPreprints.1245</a>';
123+
$expectedSubmissionCitation = 'Castanheiras, I. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus';
125124

126125
$apaCitation = new APACitation();
127126
$preprintCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
@@ -138,8 +137,7 @@ public function testFamilyNameWithAccentOnTheFirstLetter(): void
138137
$apaCitation = new APACitation();
139138
$preprintCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
140139

141-
$expectedSubmissionCitation = 'Álamo, Á. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus.';
142-
$expectedSubmissionCitation .= ' <a href="https://doi.org/10.1234/LepidusPreprints.1245">https://doi.org/10.1234/LepidusPreprints.1245</a>';
140+
$expectedSubmissionCitation = 'Álamo, Á. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus';
143141

144142
$this->assertEquals($expectedSubmissionCitation, $preprintCitation);
145143
}
@@ -153,8 +151,7 @@ public function testGivenNameWithAccentAnyLetterExceptFirstLetterAndFamilyNameWi
153151
$apaCitation = new APACitation();
154152
$preprintCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
155153

156-
$expectedSubmissionCitation = 'Fernandes, M. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus.';
157-
$expectedSubmissionCitation .= ' <a href="https://doi.org/10.1234/LepidusPreprints.1245">https://doi.org/10.1234/LepidusPreprints.1245</a>';
154+
$expectedSubmissionCitation = 'Fernandes, M. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus';
158155

159156
$this->assertEquals($expectedSubmissionCitation, $preprintCitation);
160157
}
@@ -168,8 +165,7 @@ public function testFamilyNameWithAccentOnTheFirstLetterAndGivenNameWithoutAccen
168165
$apaCitation = new APACitation();
169166
$preprintCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
170167

171-
$expectedSubmissionCitation = 'Átila, L. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus.';
172-
$expectedSubmissionCitation .= ' <a href="https://doi.org/10.1234/LepidusPreprints.1245">https://doi.org/10.1234/LepidusPreprints.1245</a>';
168+
$expectedSubmissionCitation = 'Átila, L. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus';
173169

174170
$this->assertEquals($expectedSubmissionCitation, $preprintCitation);
175171
}
@@ -183,8 +179,7 @@ public function testGivenNameAndFamilyNameWithAccentExceptFirstLetter(): void
183179
$apaCitation = new APACitation();
184180
$preprintCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
185181

186-
$expectedSubmissionCitation = 'Sérgio, C. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus.';
187-
$expectedSubmissionCitation .= ' <a href="https://doi.org/10.1234/LepidusPreprints.1245">https://doi.org/10.1234/LepidusPreprints.1245</a>';
182+
$expectedSubmissionCitation = 'Sérgio, C. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus';
188183

189184
$this->assertEquals($expectedSubmissionCitation, $preprintCitation);
190185
}
@@ -197,8 +192,7 @@ public function testGivenNameWithAccentOnTheFirstLetter(): void
197192
$apaCitation = new APACitation();
198193
$preprintCitation = $apaCitation->getFormattedCitationBySubmission($this->submission);
199194

200-
$expectedSubmissionCitation = 'Castanheiras, Â. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus.';
201-
$expectedSubmissionCitation .= ' <a href="https://doi.org/10.1234/LepidusPreprints.1245">https://doi.org/10.1234/LepidusPreprints.1245</a>';
195+
$expectedSubmissionCitation = 'Castanheiras, Â. (2021). <em>The Rise of The Machine Empire</em>. Preprints da Lepidus';
202196

203197
$this->assertEquals($expectedSubmissionCitation, $preprintCitation);
204198
}

tests/dataverseAPI/packagers/NativeAPIDatasetPackagerTest.php

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use APP\plugins\generic\dataverse\classes\entities\Dataset;
77
use APP\plugins\generic\dataverse\classes\entities\DatasetContact;
88
use APP\plugins\generic\dataverse\classes\entities\DatasetFile;
9+
use APP\plugins\generic\dataverse\classes\entities\DatasetRelatedPublication;
910

1011
class NativeAPIDatasetPackagerTest extends PKPTestCase
1112
{
@@ -68,22 +69,46 @@ public function testNativeApiPackagerBuildsSimpleCompoundMetadata(): void
6869
$this->assertContains($descriptionMetadata, $this->packager->getDatasetMetadata());
6970
}
7071

71-
public function testNativeApiPackagerBuildsPubCitationMetadata(): void
72+
public function testNativeApiPackagerBuildsRelatedPublicationMetadata(): void
7273
{
74+
$relatedPublication = new DatasetRelatedPublication(
75+
'User, T. (2023). <em>Test Dataset</em>. Open Preprint Systems',
76+
'doi',
77+
'10.1234/LepidusPreprints.1245',
78+
'https://doi.org/10.1234/LepidusPreprints.1245'
79+
);
7380
$dataset = new Dataset();
74-
$dataset->setPubCitation('User, T. (2023). <em>Test Dataset</em>. Open Preprint Systems');
81+
$dataset->setRelatedPublication($relatedPublication);
7582

7683
$this->packager = new NativeAPIDatasetPackager($dataset);
7784
$this->packager->loadPackageData();
7885

79-
$publicationMetadata = $this->packager->getMetadataField('pubCitation');
86+
$publicationMetadata = $this->packager->getMetadataField('relatedPublication');
8087
$publicationMetadata['value'] = [
8188
[
8289
'publicationCitation' => [
8390
'typeName' => 'publicationCitation',
8491
'multiple' => false,
8592
'typeClass' => 'primitive',
86-
'value' => $dataset->getPubCitation()
93+
'value' => $relatedPublication->getCitation()
94+
],
95+
'publicationIDType' => [
96+
'typeName' => 'publicationIDType',
97+
'multiple' => false,
98+
'typeClass' => 'controlledVocabulary',
99+
'value' => $relatedPublication->getIdType()
100+
],
101+
'publicationIDNumber' => [
102+
'typeName' => 'publicationIDNumber',
103+
'multiple' => false,
104+
'typeClass' => 'primitive',
105+
'value' => $relatedPublication->getIdNumber()
106+
],
107+
'publicationURL' => [
108+
'typeName' => 'publicationURL',
109+
'multiple' => false,
110+
'typeClass' => 'primitive',
111+
'value' => $relatedPublication->getUrl()
87112
]
88113
]
89114
];

tests/factories/JsonDatasetFactoryTest.php

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,37 @@
11
<?php
22

33
use PKP\tests\PKPTestCase;
4+
use APP\plugins\generic\dataverse\classes\entities\DatasetAuthor;
5+
use APP\plugins\generic\dataverse\classes\entities\DatasetContact;
6+
use APP\plugins\generic\dataverse\classes\entities\DatasetRelatedPublication;
47
use APP\plugins\generic\dataverse\classes\factories\JsonDatasetFactory;
58

69
class JsonDatasetFactoryTest extends PKPTestCase
710
{
8-
public function testCreateDataset()
11+
public function testCreatesDatasetFromJsonResponse()
912
{
1013
$jsonContent = file_get_contents(__DIR__ . '/../fixtures/datasetVersionsResponseExample.json');
1114
$datasetFactory = new JsonDatasetFactory($jsonContent);
1215
$dataset = $datasetFactory->getDataset();
1316

17+
$expectedDatasetAuthor = new DatasetAuthor('Test, Author', 'Dataverse', 'ORCID', '0000-0000-0000-0000');
18+
$expectedDatasetContact = new DatasetContact('Test, Contact', 'test@example.com', 'Dataverse');
19+
$expectedDatasetRelatedPublication = new DatasetRelatedPublication(
20+
'User, T. (2023). <em>Test Dataset</em>. Open Preprint Systems',
21+
'doi',
22+
'10.1234/LepidusPreprints.1245',
23+
'https://doi.org/10.1234/LepidusPreprints.1245'
24+
);
25+
1426
$this->assertEquals('doi:10.12345/FK2/ABCDEFG', $dataset->getPersistentId());
1527
$this->assertEquals('Test title', $dataset->getTitle());
1628
$this->assertEquals('<p>An example description</p>', $dataset->getDescription());
1729
$this->assertEquals('CC BY 4.0', $dataset->getLicense());
1830
$this->assertEquals('Other', $dataset->getSubject());
1931
$this->assertEquals(['test'], $dataset->getKeywords());
20-
$this->assertEquals('Test, Author', $dataset->getAuthors()[0]->getName());
21-
$this->assertEquals('Dataverse', $dataset->getAuthors()[0]->getAffiliation());
22-
$this->assertEquals('0000-0000-0000-0000', $dataset->getAuthors()[0]->getIdentifier());
23-
$this->assertEquals('ORCID', $dataset->getAuthors()[0]->getIdentifierScheme());
24-
$this->assertEquals('Test, Contact', $dataset->getContact()->getName());
25-
$this->assertEquals('test@example.com', $dataset->getContact()->getEmail());
26-
$this->assertEquals('Dataverse', $dataset->getContact()->getAffiliation());
27-
$this->assertEquals('Related publication', $dataset->getPubCitation());
32+
$this->assertEquals($expectedDatasetAuthor, $dataset->getAuthors()[0]);
33+
$this->assertEquals($expectedDatasetContact, $dataset->getContact());
34+
$this->assertEquals($expectedDatasetRelatedPublication, $dataset->getRelatedPublication());
2835
$this->assertEquals('Test, Depositor', $dataset->getDepositor());
2936
$this->assertEquals('RELEASED', $dataset->getVersionState());
3037

0 commit comments

Comments
 (0)