Skip to content
Snippets Groups Projects

Resolve #3369994 "Subscription doesnt accept"

1 file
+ 42
2
Compare changes
  • Side-by-side
  • Inline
@@ -293,19 +293,32 @@ class WebformSendGridHandler extends WebformHandlerBase {
// Email is a required field already set by $email parameter.
unset($reservedFields['email']);
['reserved' => $reserved, 'custom' => $custom] = $this->getFieldDefinitions();
$requestBody = new \stdClass();
$requestBody->list_ids = [$listId];
$contact = new \stdClass();
// Reserved fields.
$contact->email = $email;
foreach ($reservedFields as $fieldName => $value) {
$contact->{$fieldName} = $value;
$candidates = array_filter($reserved, function ($f) use ($fieldName) {
return $f['name'] === $fieldName;
});
$field_def = reset($candidates);
$contact->{$fieldName} = $this->castField($value, $field_def);
}
// Custom fields.
$contact->custom_fields = new \stdClass();
foreach ($customFields as $fieldName => $value) {
$contact->custom_fields->{$fieldName} = $value;
$candidates = array_filter($custom, function ($f) use ($fieldName) {
return $f['id'] === $fieldName;
});
$field_def = reset($candidates);
$contact->custom_fields->{$fieldName} = $this->castField($value, $field_def);
}
$requestBody->contacts = [$contact];
// @see https://sendgrid.api-docs.io/v3.0/contacts/add-or-update-a-contact
@@ -314,4 +327,31 @@ class WebformSendGridHandler extends WebformHandlerBase {
return $response->statusCode() === 202;
}
/**
* Cast tokenised value to appropriate type prior to sending to Sendgrid.
*
* @param mixed $value
* The raw value, probably a string representing a tokenised value.
* @param array $field_def
* The field definition, will contain a key `field_type`.
*
* @return mixed
* The field cast to its appropriate type.
*/
protected function castField($value, array $field_def = []) {
['field_type' => $field_type] = $field_def;
switch ($field_type) {
case 'Number':
if (strpos('.', $value) !== FALSE) {
return floatval($value);
}
return intval($value);
// @TODO send valid date value for field type
default:
return $value;
}
}
}
Loading