Skip to content

Commit

Permalink
fix: merge metadata update and adding related identifiers
Browse files Browse the repository at this point in the history
fixes #1175
  • Loading branch information
NRayya committed Oct 22, 2024
1 parent f2e9acd commit 2ec1dfe
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 74 deletions.
6 changes: 3 additions & 3 deletions app/Actions/Project/UpdateDOI.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,17 @@ public function update($model)
}

if ($project) {
$project->addRelatedIdentifiers($this->doiService);
$project->updateDOIMetadata($this->doiService);
$studies = $project->studies;
}
if ($studies) {
foreach ($studies as $study) {
if ($study instanceof Study) {
$study->addRelatedIdentifiers($this->doiService);
$study->updateDOIMetadata($this->doiService);
$datasets = $study->datasets;
foreach ($datasets as $dataset) {
if ($dataset instanceof Dataset) {
$dataset->addRelatedIdentifiers($this->doiService);
$dataset->updateDOIMetadata($this->doiService);
}
}
}
Expand Down
3 changes: 0 additions & 3 deletions app/Console/Commands/UpdateDOI.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,13 @@ public function handle()
foreach ($study->datasets as $dataset) {
echo $dataset->identifier."\r\n";
$dataset->updateDOIMetadata($this->doiService);
$dataset->addRelatedIdentifiers($this->doiService);
}
$study->updateDOIMetadata($this->doiService);
$study->addRelatedIdentifiers($this->doiService);
}

foreach ($projects as $project) {
echo $project->identifier."\r\n";
$project->updateDOIMetadata($this->doiService);
$project->addRelatedIdentifiers($this->doiService);
}
}
}
1 change: 0 additions & 1 deletion app/Http/Controllers/ProjectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,6 @@ public function update(Request $request, UpdateProject $updater, Project $projec
$updater->update($project, $request->all());
if ($project->is_public) {
$project->updateDOIMetadata($this->doiService);
$project->addRelatedIdentifiers($this->doiService);
}

return $request->wantsJson() ? new JsonResponse('', 200) : back()->with('success', 'Project updated successfully');
Expand Down
1 change: 0 additions & 1 deletion app/Http/Controllers/StudyController.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ public function update(Request $request, UpdateStudy $updater, Study $study)
$study->load(['datasets', 'sample.molecules', 'tags']);
if ($study->is_public) {
$study->updateDOIMetadata($this->doiService);
$study->addRelatedIdentifiers($this->doiService);
}

return $request->wantsJson()
Expand Down
119 changes: 53 additions & 66 deletions app/Models/HasDOI.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,59 @@ public function updateDOIMetadata($doiService)
$doi = $this->doi;
if ($doi !== null) {
$attributes = $this->getMetadata();

if ($this instanceof Project) {
foreach ($this->studies as &$study) {
$relatedIdentifier = [
'relatedIdentifier' => $study->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'HasPart',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
foreach ($study->datasets as &$dataset) {
$relatedIdentifier = [
'relatedIdentifier' => $dataset->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'HasPart',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}
}
} elseif ($this instanceof Study) {
if ($this->project) {
$relatedIdentifier = [
'relatedIdentifier' => $this->project->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'IsPartOf',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}
foreach ($this->datasets as &$dataset) {
$relatedIdentifier = [
'relatedIdentifier' => $dataset->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'HasPart',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}
} elseif ($this instanceof Dataset) {
if ($this->project) {
$relatedIdentifier = [
'relatedIdentifier' => $this->project->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'IsPartOf',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}

$relatedIdentifier = [
'relatedIdentifier' => $this->study->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'IsPartOf',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}

$doiResponse = $doiService->updateDOI($doi, $attributes);
$this->datacite_schema = $doiResponse;
$this->save();
Expand Down Expand Up @@ -251,70 +304,4 @@ public function getMetadata()

return $attributes;
}

public function addRelatedIdentifiers($doiService)
{
$attributes = $this->getMetadata();
if ($this instanceof Project) {
foreach ($this->studies as &$study) {
$relatedIdentifier = [
'relatedIdentifier' => $study->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'HasPart',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
foreach ($study->datasets as &$dataset) {
$relatedIdentifier = [
'relatedIdentifier' => $dataset->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'HasPart',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}
}
$doiResponse = $doiService->updateDOI($this->doi, $attributes);
$this->datacite_schema = $doiResponse;
$this->save();

} elseif ($this instanceof Study) {
if ($this->project) {
$relatedIdentifier = [
'relatedIdentifier' => $this->project->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'IsPartOf',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}
foreach ($this->datasets as &$dataset) {
$relatedIdentifier = [
'relatedIdentifier' => $dataset->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'HasPart',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}
$doiResponse = $doiService->updateDOI($this->doi, $attributes);
$this->datacite_schema = $doiResponse;
$this->save();
} elseif ($this instanceof Dataset) {
if ($this->project) {
$relatedIdentifier = [
'relatedIdentifier' => $this->project->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'IsPartOf',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
}

$relatedIdentifier = [
'relatedIdentifier' => $this->study->doi,
'relatedIdentifierType' => 'DOI',
'relationType' => 'IsPartOf',
];
array_push($attributes['relatedIdentifiers'], $relatedIdentifier);
$doiResponse = $doiService->updateDOI($this->doi, $attributes);
$this->datacite_schema = $doiResponse;
$this->save();
}
}
}

0 comments on commit 2ec1dfe

Please sign in to comment.