diff --git a/app/Models/OrthancHost.php b/app/Models/OrthancHost.php index 8cb3d74..fa76b66 100644 --- a/app/Models/OrthancHost.php +++ b/app/Models/OrthancHost.php @@ -4,6 +4,7 @@ use App\Models\Traits\Active; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Uri; class OrthancHost extends BaseModel { @@ -18,4 +19,19 @@ public function facility(): BelongsTo { return $this->belongsTo(Facility::class); } + + private function restEndpoint(string $path): Uri + { + return Uri::of($this->rest_api_endpoint)->withPath($path); + } + + public function stoneViewerUrl(): Uri + { + return $this->restEndpoint($this->stone_viewer_path); + } + + public function ohifViewerUrl(): Uri + { + return $this->restEndpoint($this->ohif_viewer_path); + } } diff --git a/app/Models/Study.php b/app/Models/Study.php index d12a2db..b66ed58 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -157,7 +157,7 @@ public function getReportStatusLedAttribute(): string public function getArchiveLink(): ?string { if (me()->may(Permission::StudyDownload)) { - return PacsUrlGen::archive($this->study_instance_uid); + return PacsUrlGen::archive($this->orthancHost, $this->study_instance_uid); } return null; @@ -166,7 +166,7 @@ public function getArchiveLink(): ?string public function getStoneLink(): ?string { if (me()->may(Permission::StudyDownload)) { - return PacsUrlGen::stoneViewer($this->study_instance_uid); + return PacsUrlGen::stoneViewer($this->orthancHost, $this->study_instance_uid); } return null; @@ -175,7 +175,7 @@ public function getStoneLink(): ?string public function getOhifLink(): ?string { if (me()->may(Permission::StudyDownload)) { - return PacsUrlGen::ohifViewer($this->study_instance_uid); + return PacsUrlGen::ohifViewer($this->orthancHost, $this->study_instance_uid); } return null; @@ -184,7 +184,7 @@ public function getOhifLink(): ?string public function getOhifSegmentationLink(): ?string { if (me()->may(Permission::StudyDownload)) { - return PacsUrlGen::ohifSegmentation($this->study_instance_uid); + return PacsUrlGen::ohifSegmentation($this->orthancHost, $this->study_instance_uid); } return null; @@ -193,7 +193,7 @@ public function getOhifSegmentationLink(): ?string public function getOhifMprLink(): ?string { if (me()->may(Permission::StudyDownload)) { - return PacsUrlGen::ohifViewerMpr($this->study_instance_uid); + return PacsUrlGen::ohifViewerMpr($this->orthancHost, $this->study_instance_uid); } return null; diff --git a/app/Services/Pacs/PacsUrlGen.php b/app/Services/Pacs/PacsUrlGen.php index 74ad6cc..52f2f85 100644 --- a/app/Services/Pacs/PacsUrlGen.php +++ b/app/Services/Pacs/PacsUrlGen.php @@ -2,53 +2,51 @@ namespace App\Services\Pacs; +use App\Models\OrthancHost; +use App\Models\Study; use Uri; final class PacsUrlGen { - public static function stoneViewer(string $study_uid): string + public static function stoneViewer(OrthancHost $host, Study $study): string { - $url = Uri::of(config('pacs.viewer.stone.endpoint')) - ->withPath('/stone-webviewer/index.html') - ->withQuery(['study' => $study_uid]); + $url = $host->stoneViewerUrl()->withQuery(['study' => $study->study_instance_uid]); return (string) $url; } - public static function ohifViewer(string $study_uid): string + public static function ohifViewer(OrthancHost $host, Study $study): string { - $url = Uri::of(config('pacs.viewer.ohif.endpoint')) - ->withPath('/ohif/viewer') - ->withQuery(['StudyInstanceUIDs' => $study_uid]); + $url = $host->ohifViewerUrl() + ->withQuery(['StudyInstanceUIDs' => $study->study_instance_uid]); return (string) $url; } - public static function ohifViewerMpr(string $study_uid): string + public static function ohifViewerMpr(OrthancHost $host, Study $study): string { - $url = Uri::of(config('pacs.viewer.ohif.endpoint')) - ->withPath('/ohif/viewer') + $url = $host->ohifViewerUrl() ->withQuery([ 'hangingprotocolId' => 'mprAnd3DVolumeViewport', - 'StudyInstanceUIDs' => $study_uid, + 'StudyInstanceUIDs' => $study->study_instance_uid, ]); return (string) $url; } - public static function ohifSegmentation(string $study_uid): string + public static function ohifSegmentation(OrthancHost $host, Study $study): string { - $url = Uri::of(config('pacs.viewer.ohif.endpoint')) + $url = $host->ohifViewerUrl() ->withPath('/ohif/segmentation') - ->withQuery(['StudyInstanceUIDs' => $study_uid]); + ->withQuery(['StudyInstanceUIDs' => $study->study_instance_uid]); return (string) $url; } - public static function archive(string $study_uid): string + public static function archive(OrthancHost $host, Study $study): string { - $url = Uri::of(config('pacs.api.endpoint')) - ->withPath('/studies/' . $study_uid . '/archive'); + $url = Uri::of($host->rest_api_endpoint) + ->withPath('/studies/' . $study->study_instance_uid . '/archive'); return (string) $url; }