+
+
+
+
+
diff --git a/app/plugins/CoreEnroller/templates/AttributeCollectors/multifield_attribute.inc b/app/plugins/CoreEnroller/templates/AttributeCollectors/multifield_attribute.inc
index e9bd8019e..f416f1e66 100644
--- a/app/plugins/CoreEnroller/templates/AttributeCollectors/multifield_attribute.inc
+++ b/app/plugins/CoreEnroller/templates/AttributeCollectors/multifield_attribute.inc
@@ -27,7 +27,6 @@
declare(strict_types = 1);
-use App\Lib\Enum\StatusEnum;
use \Cake\Utility\Inflector;
// This field is called attribute_type and not attribute_type_id because we want this
@@ -38,20 +37,53 @@ $mveaAutoPopulatedVariable = $attr->attribute . 'Types';
// dropdown list
$fieldLabel = 'Not found';
if ($this->get($mveaAutoPopulatedVariable) !== null) {
- $fieldLabel = $this->get($mveaAutoPopulatedVariable)[$attr->attribute_type] . ' ' . ucfirst($attr->attribute);
+ $fieldLabel = $this->get($mveaAutoPopulatedVariable)[$attr->attribute_type]
+ . ' '
+ . Inflector::humanize(Inflector::underscore($attr->attribute));
}
-$required_fields_variable_name = "required_fields_$attr->attribute";
-$permitted_fields_variable_name = "permitted_fields_$attr->attribute";
+$required_fields_variable_name = 'required_fields_' . Inflector::underscore($attr->attribute);
+$permitted_fields_variable_name = 'permitted_fields_' . Inflector::underscore($attr->attribute);
$permitted_fields_list = [];
$required_fields_list = [];
-if (!empty($cosettings[0][$required_fields_variable_name])) {
- $required_fields_list = explode(',', $cosettings[0][$required_fields_variable_name]);
-}
if (!empty($cosettings[0][$permitted_fields_variable_name])) {
$permitted_fields_list = explode(',', $cosettings[0][$permitted_fields_variable_name]);
}
+
+// Required fields
+// - first look at the enrollment flow level
+// - if not set look at the co level
+$required_fields = match(true) {
+ // Enrollment Flow
+ !empty($attr?->attribute_required_fields) => $attr?->attribute_required_fields,
+ // Co Level
+ !empty($cosettings[0][$required_fields_variable_name]) => $cosettings[0][$required_fields_variable_name],
+ // XXX Do i need CMP level here?
+ default => ''
+};
+// List of the required fields
+$required_fields_list = explode(',', $required_fields);
+
+// Address has not permitted fields configuration at CO level. And according to our design,
+// the permitted fields are found in CoSettings. As a result, if we do not have any we need to get
+// For all the attributes that have no
+// permitted configuration at the CO level we will get all the fields that we support
+$requiredDropDownListVar = $attr->attribute . 'RequiredFields';
+if(empty($permitted_fields_list) && !empty($$requiredDropDownListVar)) {
+ usort($$requiredDropDownListVar, static fn($a, $b) => count(explode(',', $a)) <=> count(explode(',', $b)));
+ $permitted_fields = end($$requiredDropDownListVar);
+ $permitted_fields_list = collection(explode(',', $permitted_fields))->map(fn($value) => trim($value));
+}
+
+// Grouped fields
+$groupedFieldsVar = $attr->attribute . 'GroupedFields';
+$groupedFieldsArray = [];
+if(!empty($$groupedFieldsVar)) {
+ $groupedFieldsArray = collection(array_keys($$groupedFieldsVar))->map(static fn($fields) => explode(',', $fields))->toArray();
+}
+// Now that we have the permitted fields array and the grouped fields array, we need to put the permitted fields to groups
+
?>
@@ -60,30 +92,16 @@ if (!empty($cosettings[0][$permitted_fields_variable_name])) {
= $fieldLabel ?>
-
-attribute_required_fields) as $field) : ?>
-
- "field-$field-$attr->id",
- 'fieldLabel' => $attr->label, // fieldLabel is only applicable to checkboxes
- 'fieldType' => $supportedAttributes['fieldType'],
- 'fieldNameAlias' => $attr->attribute // the field name to its enrollment attribute field name
- ];
-?>
-
-