export service
This commit is contained in:
parent
c5108dbfd7
commit
805293baac
11
app/Domain/Report/ExportFormat.php
Normal file
11
app/Domain/Report/ExportFormat.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domain\Report;
|
||||
|
||||
enum ExportFormat: string
|
||||
{
|
||||
case Html = 'html';
|
||||
case Word2003 = 'doc';
|
||||
case Word2007 = 'docx';
|
||||
case Pdf = 'pdf';
|
||||
}
|
@ -3,12 +3,12 @@
|
||||
namespace App\Http\Controllers\Staff;
|
||||
|
||||
use App\Domain\ACL\Permission;
|
||||
use App\Domain\Report\ExportFormat;
|
||||
use App\Domain\Report\ReportStatus;
|
||||
use App\Http\Controllers\HashidControllerBase;
|
||||
use App\Http\Requests\CreateReportRequest;
|
||||
use App\Models\Study;
|
||||
use App\Models\StudyReport;
|
||||
use App\Services\DocumentGenerator\Word;
|
||||
use App\Services\ReportStorage;
|
||||
|
||||
class ReportController extends HashidControllerBase
|
||||
@ -76,7 +76,7 @@ public function download(string $uuid)
|
||||
// $study = Study::with(['reports.radiologist', 'readingPhysician'])->where('accession_number', $uuid)->firstOrFail();
|
||||
$report = StudyReport::where('accession_number', $uuid)->firstOrFail();
|
||||
|
||||
$path = Word::make($report->study, $report);
|
||||
$path = Exporters::make($report->study, $report, ExportFormat::Word2007);
|
||||
|
||||
return response()->download(ReportStorage::abspath($path));
|
||||
}
|
||||
|
@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\DocumentGenerator;
|
||||
|
||||
use App\Models\Study;
|
||||
use App\Models\StudyReport;
|
||||
use App\Services\ReportStorage;
|
||||
use CreateDocx;
|
||||
|
||||
final readonly class Word
|
||||
{
|
||||
public static function make(Study $study, StudyReport $report): string
|
||||
{
|
||||
$filename = $report->accession_number . '.docx';
|
||||
$filepath = ReportStorage::customFilepath($study, $filename);
|
||||
if (ReportStorage::exists($study, $filename)) {
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
$html = $report->getContent();
|
||||
$docx = new CreateDocx;
|
||||
$docx->embedHTML($html);
|
||||
$docx->createDocx(ReportStorage::abspath($filepath));
|
||||
|
||||
return $filepath;
|
||||
}
|
||||
}
|
25
app/Services/Export/ExportDocumentBase.php
Normal file
25
app/Services/Export/ExportDocumentBase.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Export;
|
||||
|
||||
use App\Models\Study;
|
||||
use App\Models\StudyReport;
|
||||
|
||||
abstract class ExportDocumentBase implements IExportDocument
|
||||
{
|
||||
public function __construct(protected readonly Study $study, protected readonly StudyReport $report) {}
|
||||
|
||||
public function make(Study $study, StudyReport $report): string
|
||||
{
|
||||
return $this->handle();
|
||||
}
|
||||
|
||||
abstract protected function handle(): string;
|
||||
|
||||
abstract protected function getExtension(): string;
|
||||
|
||||
protected function filename(): string
|
||||
{
|
||||
return $this->report->accession_number . '.' . $this->getExtension();
|
||||
}
|
||||
}
|
26
app/Services/Export/Exporters.php
Normal file
26
app/Services/Export/Exporters.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Export;
|
||||
|
||||
use App\Domain\Report\ExportFormat;
|
||||
use App\Models\Study;
|
||||
use App\Models\StudyReport;
|
||||
use app\Services\Export\Formats\HtmlExport;
|
||||
use app\Services\Export\Formats\PdfExport;
|
||||
use app\Services\Export\Formats\Word2003Export;
|
||||
use app\Services\Export\Formats\Word2007Export;
|
||||
|
||||
final readonly class Exporters
|
||||
{
|
||||
public static function make(Study $study, StudyReport $report, ExportFormat $format)
|
||||
{
|
||||
$exporter = match ($format) {
|
||||
ExportFormat::Html => new HtmlExport($study, $report),
|
||||
ExportFormat::Word2003 => new Word2003Export($study, $report),
|
||||
ExportFormat::Word2007 => new Word2007Export($study, $report),
|
||||
ExportFormat::Pdf => new PdfExport($study, $report),
|
||||
};
|
||||
|
||||
return $exporter->make($study, $report);
|
||||
}
|
||||
}
|
29
app/Services/Export/Formats/HtmlExport.php
Normal file
29
app/Services/Export/Formats/HtmlExport.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace app\Services\Export\Formats;
|
||||
|
||||
use App\Domain\Report\ExportFormat;
|
||||
use App\Services\Export\ExportDocumentBase;
|
||||
use App\Services\ReportStorage;
|
||||
|
||||
final class HtmlExport extends ExportDocumentBase
|
||||
{
|
||||
protected function handle(): string
|
||||
{
|
||||
$filename = $this->filename();
|
||||
$filepath = ReportStorage::customFilepath($this->study, $filename);
|
||||
if (ReportStorage::exists($this->study, $filename)) {
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
$html = $this->report->getContent();
|
||||
file_put_contents(ReportStorage::abspath($filepath), $html);
|
||||
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
protected function getExtension(): string
|
||||
{
|
||||
return ExportFormat::Html->value;
|
||||
}
|
||||
}
|
30
app/Services/Export/Formats/PdfExport.php
Normal file
30
app/Services/Export/Formats/PdfExport.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace app\Services\Export\Formats;
|
||||
|
||||
use App\Domain\Report\ExportFormat;
|
||||
use App\Services\Export\ExportDocumentBase;
|
||||
use App\Services\ReportStorage;
|
||||
|
||||
final class PdfExport extends ExportDocumentBase
|
||||
{
|
||||
protected function handle(): string
|
||||
{
|
||||
$filename = $this->filename();
|
||||
$filepath = ReportStorage::customFilepath($this->study, $filename);
|
||||
if (ReportStorage::exists($this->study, $filename)) {
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
$html = $this->report->getContent();
|
||||
// todo: implement pdf generation
|
||||
file_put_contents(ReportStorage::abspath($filepath), $html);
|
||||
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
protected function getExtension(): string
|
||||
{
|
||||
return ExportFormat::Pdf->value;
|
||||
}
|
||||
}
|
32
app/Services/Export/Formats/Word2003Export.php
Normal file
32
app/Services/Export/Formats/Word2003Export.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace app\Services\Export\Formats;
|
||||
|
||||
use App\Domain\Report\ExportFormat;
|
||||
use App\Services\Export\ExportDocumentBase;
|
||||
use App\Services\ReportStorage;
|
||||
use CreateDocx;
|
||||
|
||||
final class Word2003Export extends ExportDocumentBase
|
||||
{
|
||||
protected function handle(): string
|
||||
{
|
||||
$filename = $this->filename();
|
||||
$filepath = ReportStorage::customFilepath($this->study, $filename);
|
||||
if (ReportStorage::exists($this->study, $filename)) {
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
$html = $this->report->getContent();
|
||||
$docx = new CreateDocx;
|
||||
$docx->embedHTML($html);
|
||||
$docx->createDocx(ReportStorage::abspath($filepath));
|
||||
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
protected function getExtension(): string
|
||||
{
|
||||
return ExportFormat::Word2003->value;
|
||||
}
|
||||
}
|
32
app/Services/Export/Formats/Word2007Export.php
Normal file
32
app/Services/Export/Formats/Word2007Export.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace app\Services\Export\Formats;
|
||||
|
||||
use App\Domain\Report\ExportFormat;
|
||||
use App\Services\Export\ExportDocumentBase;
|
||||
use App\Services\ReportStorage;
|
||||
use CreateDocx;
|
||||
|
||||
final class Word2007Export extends ExportDocumentBase
|
||||
{
|
||||
protected function handle(): string
|
||||
{
|
||||
$filename = $this->filename();
|
||||
$filepath = ReportStorage::customFilepath($this->study, $filename);
|
||||
if (ReportStorage::exists($this->study, $filename)) {
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
$html = $this->report->getContent();
|
||||
$docx = new CreateDocx;
|
||||
$docx->embedHTML($html);
|
||||
$docx->createDocx(ReportStorage::abspath($filepath));
|
||||
|
||||
return $filepath;
|
||||
}
|
||||
|
||||
protected function getExtension(): string
|
||||
{
|
||||
return ExportFormat::Word2007->value;
|
||||
}
|
||||
}
|
11
app/Services/Export/IExportDocument.php
Normal file
11
app/Services/Export/IExportDocument.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Export;
|
||||
|
||||
use App\Models\Study;
|
||||
use App\Models\StudyReport;
|
||||
|
||||
interface IExportDocument
|
||||
{
|
||||
public function make(Study $study, StudyReport $report): string;
|
||||
}
|
@ -24,7 +24,7 @@
|
||||
class="ck-editor editor-container editor-container_classic-editor editor-container_include-word-count fixed-container"
|
||||
id="editor-container">
|
||||
<div class="editor-container__editor">
|
||||
<input id="editor" name="content"/>
|
||||
<textarea id="editor" name="content"></textarea>
|
||||
</div>
|
||||
<div class="editor_container__word-count" id="editor-word-count"></div>
|
||||
</div>
|
||||
@ -42,7 +42,6 @@ class="ck-editor editor-container editor-container_classic-editor editor-contain
|
||||
<script src="https://cdn.ckeditor.com/ckeditor5/44.1.0/ckeditor5.umd.js" crossorigin></script>
|
||||
<script src="https://cdn.ckeditor.com/ckeditor5-premium-features/44.1.0/ckeditor5-premium-features.umd.js"
|
||||
crossorigin></script>
|
||||
<script src="./splitter.js"></script>
|
||||
<script>
|
||||
const {
|
||||
ClassicEditor,
|
||||
|
Loading…
Reference in New Issue
Block a user