Hello,
I have run into a problem when programatically setting properties on addressfileld:
if ($profile_wrapper = entity_metadata_wrapper('commerce_customer_profile', $profile)) {
$profile_wrapper->commerce_customer_address->postal_code->set($zipCode);
}
The code above will throw the following warning:
Warning: key() expects parameter 1 to be array, string given in addressfield_default_values() (line 326 of /srv/www/drupal/sites/all/modules/addressfield/addressfield.module).
It appears to be caused by the fact that addressfield_default_values is set as 'auto creation' callback and with the code as above this function is called as:
addressfield_default_values('postal_code')
This function expects it's $available_countries argument to be an array or NULL but in this case it is a string and will ultimately fail at line 326 which prevents from the value to be actually saved:
$default_country = key($available_countries);
I have changed the wrapping if statement to also check with is_array which resolved the problem:
// If the default country is undefined or not in the list of available countries,
// just fallback to the first country in the list.
if (!$default_country || (is_array($available_countries) && !isset($available_countries[$default_country]))) {
$default_country = key($available_countries);
}
Comments
Comment #1
hawkeye.twolf+1, I see this issue as well.
Comment #2
alexh58 CreditAttribution: alexh58 commented+1 too!!! I've been following this one but have accepted just having a
site_default_country
variable set which does fix the issue.Comment #3
rszrama CreditAttribution: rszrama commentedThe fix isn't to change the way addressfield_default_values() works but to add a wrapper around the function for use as an auto creation callback. The Entity API doesn't document the parameters, but the first one it tries to pass to an auto creation callback is a property name.
Commit: http://drupalcode.org/project/addressfield.git/commitdiff/2f4b17e