This commit is contained in:
Dr Masroor Ehsan 2025-01-10 15:32:38 +06:00
parent 51095f716f
commit d03583493b
3 changed files with 37 additions and 23 deletions

View File

@ -4,6 +4,7 @@
use App\Models\Traits\Active; use App\Models\Traits\Active;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Uri;
class OrthancHost extends BaseModel class OrthancHost extends BaseModel
{ {
@ -18,4 +19,19 @@ public function facility(): BelongsTo
{ {
return $this->belongsTo(Facility::class); 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);
}
} }

View File

@ -157,7 +157,7 @@ public function getReportStatusLedAttribute(): string
public function getArchiveLink(): ?string public function getArchiveLink(): ?string
{ {
if (me()->may(Permission::StudyDownload)) { if (me()->may(Permission::StudyDownload)) {
return PacsUrlGen::archive($this->study_instance_uid); return PacsUrlGen::archive($this->orthancHost, $this->study_instance_uid);
} }
return null; return null;
@ -166,7 +166,7 @@ public function getArchiveLink(): ?string
public function getStoneLink(): ?string public function getStoneLink(): ?string
{ {
if (me()->may(Permission::StudyDownload)) { if (me()->may(Permission::StudyDownload)) {
return PacsUrlGen::stoneViewer($this->study_instance_uid); return PacsUrlGen::stoneViewer($this->orthancHost, $this->study_instance_uid);
} }
return null; return null;
@ -175,7 +175,7 @@ public function getStoneLink(): ?string
public function getOhifLink(): ?string public function getOhifLink(): ?string
{ {
if (me()->may(Permission::StudyDownload)) { if (me()->may(Permission::StudyDownload)) {
return PacsUrlGen::ohifViewer($this->study_instance_uid); return PacsUrlGen::ohifViewer($this->orthancHost, $this->study_instance_uid);
} }
return null; return null;
@ -184,7 +184,7 @@ public function getOhifLink(): ?string
public function getOhifSegmentationLink(): ?string public function getOhifSegmentationLink(): ?string
{ {
if (me()->may(Permission::StudyDownload)) { if (me()->may(Permission::StudyDownload)) {
return PacsUrlGen::ohifSegmentation($this->study_instance_uid); return PacsUrlGen::ohifSegmentation($this->orthancHost, $this->study_instance_uid);
} }
return null; return null;
@ -193,7 +193,7 @@ public function getOhifSegmentationLink(): ?string
public function getOhifMprLink(): ?string public function getOhifMprLink(): ?string
{ {
if (me()->may(Permission::StudyDownload)) { if (me()->may(Permission::StudyDownload)) {
return PacsUrlGen::ohifViewerMpr($this->study_instance_uid); return PacsUrlGen::ohifViewerMpr($this->orthancHost, $this->study_instance_uid);
} }
return null; return null;

View File

@ -2,53 +2,51 @@
namespace App\Services\Pacs; namespace App\Services\Pacs;
use App\Models\OrthancHost;
use App\Models\Study;
use Uri; use Uri;
final class PacsUrlGen 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')) $url = $host->stoneViewerUrl()->withQuery(['study' => $study->study_instance_uid]);
->withPath('/stone-webviewer/index.html')
->withQuery(['study' => $study_uid]);
return (string) $url; 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')) $url = $host->ohifViewerUrl()
->withPath('/ohif/viewer') ->withQuery(['StudyInstanceUIDs' => $study->study_instance_uid]);
->withQuery(['StudyInstanceUIDs' => $study_uid]);
return (string) $url; 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')) $url = $host->ohifViewerUrl()
->withPath('/ohif/viewer')
->withQuery([ ->withQuery([
'hangingprotocolId' => 'mprAnd3DVolumeViewport', 'hangingprotocolId' => 'mprAnd3DVolumeViewport',
'StudyInstanceUIDs' => $study_uid, 'StudyInstanceUIDs' => $study->study_instance_uid,
]); ]);
return (string) $url; 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') ->withPath('/ohif/segmentation')
->withQuery(['StudyInstanceUIDs' => $study_uid]); ->withQuery(['StudyInstanceUIDs' => $study->study_instance_uid]);
return (string) $url; 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')) $url = Uri::of($host->rest_api_endpoint)
->withPath('/studies/' . $study_uid . '/archive'); ->withPath('/studies/' . $study->study_instance_uid . '/archive');
return (string) $url; return (string) $url;
} }