diff --git a/src/Element/AddressField.php b/src/Element/AddressField.php index 404a32358f8bac0a7cdb40c8d3b359103e88a198..133fc827478e25173c962b2ce0fdf0b73c9dce9c 100644 --- a/src/Element/AddressField.php +++ b/src/Element/AddressField.php @@ -121,7 +121,7 @@ class AddressField extends FormElement { '#default_value' => isset($value[$property]) ? $value[$property] : '', '#required' => isset($property_dict['required']) ? $property_dict['required'] : FALSE, '#access' => isset($property_dict['access']) ? $property_dict['access'] : TRUE, - + '#disabled' => isset($property_dict['disabled']) ? $property_dict['disabled'] : FALSE, // '#size' => $definition['size'], // '#attributes' => [ // 'class' => [$class], @@ -148,18 +148,28 @@ class AddressField extends FormElement { * {@inheritdoc} */ public static function valueCallback(&$element, $input, FormStateInterface $form_state) { - $r = parent::valueCallback($element, $input, $form_state); + $address = $element['#default_value']; + if (!$input) { + return $address; + } - $properties = AddressFieldType::getDefinition(); - $format = AddressFieldType::getFormat(); + $format = AddressFieldType::getFormat($element['#address_options']); foreach ($format as $line_index => $format_line) { - foreach ($properties as $property => $property_definition) { - if (isset($input["container{$line_index}"][$property])) { - $r[$property] = $input["container{$line_index}"][$property]; + foreach ($format_line as $property_dict) { + $property = $property_dict['name']; + $definition = $properties[$property]; + + if ((!isset($definition['access']) || $definition['access']) && + (!isset($definition['disabled']) || !$definition['disabled'])) { + + if (isset($input["container{$line_index}"][$property])) { + $address[$property] = $input["container{$line_index}"][$property]; + } } } } - return $r; + + return $address; } } diff --git a/src/Plugin/Field/FieldType/AddressFieldType.php b/src/Plugin/Field/FieldType/AddressFieldType.php index 2f3be58818bf7b14ebc56dd745c80de806f76ff7..0dff04e7c7d6758ed6393b1ff02789c4b64738eb 100644 --- a/src/Plugin/Field/FieldType/AddressFieldType.php +++ b/src/Plugin/Field/FieldType/AddressFieldType.php @@ -24,7 +24,6 @@ class AddressFieldType extends FieldItemBase { * Get address format description. */ public static function getFormat($options = NULL) { - return [ [ [ @@ -32,6 +31,7 @@ class AddressFieldType extends FieldItemBase { 'flex' => 12, 'required' => (isset($options['organization']) && $options['organization']), 'access' => (isset($options['organization']) && $options['organization']), + 'disabled' => (isset($options['disable-name']) && $options['disable-name']), ], ], [ @@ -39,11 +39,13 @@ class AddressFieldType extends FieldItemBase { 'name' => 'given_name', 'flex' => 6, 'required' => (!isset($options['organization']) || !$options['organization']), + 'disabled' => (isset($options['disable-name']) && $options['disable-name']), ], [ 'name' => 'family_name', 'flex' => 6, 'required' => (!isset($options['organization']) || !$options['organization']), + 'disabled' => (isset($options['disable-name']) && $options['disable-name']), ], ], [