Commit c1cb9796 authored by Adam Shepherd's avatar Adam Shepherd
Browse files

Issue #3276948 by kensae, AdamPS: Multiple errors in AddressAdjusterBase when no addresses set yet

parent fb119ccf
Loading
Loading
Loading
Loading
+13 −5
Changes for src/Plugin/EmailAdjuster/AddressAdjusterBase.php: 13 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -52,10 +52,7 @@ abstract class AddressAdjusterBase extends EmailAdjusterBase {
    ];

    // Synchronise with any existing form state.
    $addresses = $form_state->getValue(['config', $id, 'addresses']);
    if (!is_array($addresses)) {
      $addresses = $this->configuration['addresses'];
    }
    $addresses = $form_state->getValue(['config', $id, 'addresses']) ?? $this->configuration['addresses'] ?? [[]];

    foreach ($addresses as $item) {
      $form_item['value'] = [
@@ -136,11 +133,22 @@ abstract class AddressAdjusterBase extends EmailAdjusterBase {
   */
  public static function addressesValidate($element, FormStateInterface $form_state, $form) {
    $id = $element['#parents'][1];
    $addresses = $form_state->getValue(['config', $id, 'addresses']);
    $addresses = $form_state->getValue(['config', $id, 'addresses']) ?? [];

    // Remove any empty addresses.
    $addresses = array_filter($addresses, function ($a) {
      return !empty($a['value']);
    });

    // Raise an error for no addresses if the policy is being saved. Skip this
    // for the non-primary 'Add address' button.
    if (empty($addresses) && ($form_state->getTriggeringElement()['#button_type'] == 'primary')) {
      $label = \Drupal::service('plugin.manager.email_adjuster')->getDefinition($id)['label'];
      $form_state->setError($element, t('You must set at least one %label address.', ['%label' => $label]));
    }
    else {
      $form_state->setValueForElement($element, $addresses);
    }
  }

}