Fix 500 generation: include account entity in template defaults and merge global whitelist entities during resolution

This commit is contained in:
Simon Pocrnjič
2025-10-06 19:35:09 +02:00
parent 18fb04fe65
commit 0c8d1e0b5d
2 changed files with 182 additions and 6 deletions
+12 -6
View File
@@ -19,12 +19,17 @@ public function resolve(array $tokens, DocumentTemplate $template, Contract $con
{
$values = [];
$unresolved = [];
// Retrieve whitelist from DB settings (if present) and merge with config baseline (config acts as baseline; DB can add or override entity arrays)
$settingsWhitelist = app(\App\Services\Documents\DocumentSettings::class)->get()->whitelist ?? [];
$configWhitelist = config('documents.whitelist', []);
// Merge preserving DB additions/overrides
$globalWhitelist = array_replace($configWhitelist, $settingsWhitelist);
$templateEntities = $template->entities ?: array_keys($globalWhitelist);
// Retrieve whitelist from DB settings (if present) and merge with config baseline (config acts as baseline; DB can add or override entity arrays)
$settingsWhitelist = app(\App\Services\Documents\DocumentSettings::class)->get()->whitelist ?? [];
$configWhitelist = config('documents.whitelist', []);
// Merge preserving DB additions/overrides
$globalWhitelist = array_replace($configWhitelist, $settingsWhitelist);
// Always treat globally whitelisted entities as available, even if legacy template does not list them
if ($template->entities && is_array($template->entities)) {
$templateEntities = array_values(array_unique(array_merge($template->entities, array_keys($globalWhitelist))));
} else {
$templateEntities = array_keys($globalWhitelist);
}
foreach ($tokens as $token) {
[$entity,$attr] = explode('.', $token, 2);
if ($entity === 'generation') {
@@ -80,6 +85,7 @@ private function entityAttribute(string $entity, string $attr, Contract $contrac
return (string) $person->{$attr};
case 'account':
$account = optional($contract->account);
return (string) $account->{$attr};
default:
return '';