diff --git a/app/Actions/Project/UpdateDOI.php b/app/Actions/Project/UpdateDOI.php index e58d11bd..cf5e64a7 100644 --- a/app/Actions/Project/UpdateDOI.php +++ b/app/Actions/Project/UpdateDOI.php @@ -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); } } } diff --git a/app/Console/Commands/UpdateDOI.php b/app/Console/Commands/UpdateDOI.php index 807aedc8..1f292c73 100644 --- a/app/Console/Commands/UpdateDOI.php +++ b/app/Console/Commands/UpdateDOI.php @@ -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); } } } diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 103ae195..167689f5 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -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'); diff --git a/app/Http/Controllers/StudyController.php b/app/Http/Controllers/StudyController.php index 04916646..f7f30bbe 100644 --- a/app/Http/Controllers/StudyController.php +++ b/app/Http/Controllers/StudyController.php @@ -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() diff --git a/app/Models/HasDOI.php b/app/Models/HasDOI.php index b17db325..7943534c 100644 --- a/app/Models/HasDOI.php +++ b/app/Models/HasDOI.php @@ -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(); @@ -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(); - } - } }