diff --git a/app/plugins/CoreEnroller/src/Lib/Enum/MagicEnvNameFieldsEnum.php b/app/plugins/CoreEnroller/src/Lib/Enum/MagicEnvNameFieldsEnum.php new file mode 100644 index 000000000..01ab8ea66 --- /dev/null +++ b/app/plugins/CoreEnroller/src/Lib/Enum/MagicEnvNameFieldsEnum.php @@ -0,0 +1,67 @@ + MagicEnvNameFieldsEnum::HonorificSuffix, + 'given' => MagicEnvNameFieldsEnum::GivenSuffix, + 'middle' => MagicEnvNameFieldsEnum::MiddleSuffix, + 'family' => MagicEnvNameFieldsEnum::FamilySuffix, + 'suffix' => MagicEnvNameFieldsEnum::SuffixSuffix, + default => null + }; + + if($suffix === null || $baseEnvName === '') { + return null; + } + + $v = getenv($baseEnvName . $suffix); + + if($v === false || $v === '') { + return null; + } + + return (string)$v; + } +} diff --git a/app/plugins/CoreEnroller/templates/element/field.php b/app/plugins/CoreEnroller/templates/element/field.php index 9166f9ca7..2cd01cc27 100644 --- a/app/plugins/CoreEnroller/templates/element/field.php +++ b/app/plugins/CoreEnroller/templates/element/field.php @@ -40,9 +40,13 @@ // Do we have a default value configured? // Either a value or an Environmental Variable, // Each default value is mutually exclusive to the rest. We do not have to worry about a conflict. +// +// NOTE: name/address/telephoneNumber are MVEAs and are rendered as grouped sub-fields. +// Their per-component defaults must be applied at the sub-field level, not here. $options['default'] = match(true) { isset($attr->default_value) => $attr->default_value, isset($attr->default_value_env_name) + && $attr->attribute !== 'name' && getenv($attr->default_value_env_name) !== false => getenv($attr->default_value_env_name), isset($attr->default_value_datetime) => $attr->default_value_datetime, default => '' diff --git a/app/plugins/CoreEnroller/templates/element/mveas/fieldset-field.php b/app/plugins/CoreEnroller/templates/element/mveas/fieldset-field.php index ea15b31d8..82869edc1 100644 --- a/app/plugins/CoreEnroller/templates/element/mveas/fieldset-field.php +++ b/app/plugins/CoreEnroller/templates/element/mveas/fieldset-field.php @@ -29,6 +29,7 @@ declare(strict_types = 1); use \Cake\Utility\Inflector; +use CoreEnroller\Lib\Util\MagicEnvDefaultUtilities; // $field: string // $attr: object @@ -53,12 +54,23 @@ // Do we have a default value configured? // Either a value or an Environmental Variable, // Each default value is mutually exclusive to the rest. We do not have to worry about a conflict. +// +// NOTE: For Name, default_value_env_name is treated as a base env var name. +// We derive per-component env vars (eg BASE_GIVEN). Missing/empty env vars yield no default. $options['default'] = match(true) { isset($attr->default_value) => $attr->default_value, + // XXX The $attr->default_value_env_name for the name attribute is tricky. Since the name has many values. // Check the EnvSource plugin isset($attr->default_value_env_name) + && $attr->attribute === 'name' + && MagicEnvDefaultUtilities::nameComponentFromEnv((string)$attr->default_value_env_name, (string)$field) !== null + => MagicEnvDefaultUtilities::nameComponentFromEnv((string)$attr->default_value_env_name, (string)$field), + + isset($attr->default_value_env_name) + && $attr->attribute !== 'name' && getenv($attr->default_value_env_name) !== false => getenv($attr->default_value_env_name), + isset($attr->default_value_datetime) => $attr->default_value_datetime, default => '' };