fix: resolve template path and PHPWord autoload in DirectAccessReportGenerator
- Fix resolveTemplatePath to check data/document-templates/ prefix - Add PHPWord autoloader fallback when not in composer autoload - Fix Document-Case linking (use Case.documents relation side) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+26
-18
@@ -106,10 +106,10 @@ class DirectAccessReportGenerator
|
|||||||
]);
|
]);
|
||||||
$this->entityManager->saveEntity($document);
|
$this->entityManager->saveEntity($document);
|
||||||
|
|
||||||
// Link Document to Case
|
// Link Document to Case (via Case side of relationship)
|
||||||
$this->entityManager->getRDBRepository('Document')
|
$this->entityManager->getRDBRepository('Case')
|
||||||
->getRelation($document, 'cases')
|
->getRelation($case, 'documents')
|
||||||
->relate($case);
|
->relate($document);
|
||||||
|
|
||||||
$this->log->info("LegalAssistance: Report generated — Document {$document->getId()} attached to Case {$caseId}");
|
$this->log->info("LegalAssistance: Report generated — Document {$document->getId()} attached to Case {$caseId}");
|
||||||
|
|
||||||
@@ -230,32 +230,31 @@ class DirectAccessReportGenerator
|
|||||||
|
|
||||||
private function resolveTemplatePath(): string
|
private function resolveTemplatePath(): string
|
||||||
{
|
{
|
||||||
// Look up template via DocumentTemplate entity
|
|
||||||
$template = $this->entityManager
|
$template = $this->entityManager
|
||||||
->getRDBRepository('DocumentTemplate')
|
->getRDBRepository('DocumentTemplate')
|
||||||
->where(['name' => self::TEMPLATE_NAME])
|
->where(['name' => self::TEMPLATE_NAME])
|
||||||
->findOne();
|
->findOne();
|
||||||
|
|
||||||
if ($template) {
|
if ($template) {
|
||||||
$fileId = $template->get('fileId');
|
|
||||||
if ($fileId) {
|
|
||||||
$filePath = 'data/upload/' . $fileId;
|
|
||||||
if (file_exists($filePath)) {
|
|
||||||
return $filePath;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try templatePath field
|
|
||||||
$templatePath = $template->get('templatePath');
|
$templatePath = $template->get('templatePath');
|
||||||
if ($templatePath && file_exists($templatePath)) {
|
if ($templatePath) {
|
||||||
return $templatePath;
|
// Try as-is (absolute or relative)
|
||||||
|
if (file_exists($templatePath)) {
|
||||||
|
return $templatePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try under data/document-templates/
|
||||||
|
$resolved = 'data/document-templates/' . ltrim($templatePath, '/');
|
||||||
|
if (file_exists($resolved)) {
|
||||||
|
return $resolved;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fallback: look in known locations
|
// Fallback: known locations
|
||||||
$fallbackPaths = [
|
$fallbackPaths = [
|
||||||
|
'data/document-templates/direct-access-report.docx',
|
||||||
'custom/Espo/Modules/LegalAssistance/templates/direct-access-report.docx',
|
'custom/Espo/Modules/LegalAssistance/templates/direct-access-report.docx',
|
||||||
__DIR__ . '/../../../../../../templates/direct-access-report.docx',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($fallbackPaths as $path) {
|
foreach ($fallbackPaths as $path) {
|
||||||
@@ -269,6 +268,15 @@ class DirectAccessReportGenerator
|
|||||||
|
|
||||||
private function processTemplate(string $inputPath, string $outputPath, array $data): void
|
private function processTemplate(string $inputPath, string $outputPath, array $data): void
|
||||||
{
|
{
|
||||||
|
// Ensure PHPWord autoloader is registered
|
||||||
|
if (!class_exists(TemplateProcessor::class, false)) {
|
||||||
|
$autoloader = 'vendor/phpoffice/phpword/src/PhpWord/Autoloader.php';
|
||||||
|
if (file_exists($autoloader)) {
|
||||||
|
require_once $autoloader;
|
||||||
|
\PhpOffice\PhpWord\Autoloader::register();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$processor = new TemplateProcessor($inputPath);
|
$processor = new TemplateProcessor($inputPath);
|
||||||
|
|
||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
|
|||||||
Reference in New Issue
Block a user