diff --git a/lib/modules/dosomething/dosomething_global/dosomething_global.module b/lib/modules/dosomething/dosomething_global/dosomething_global.module index ded5fb8bc..1df6ff081 100644 --- a/lib/modules/dosomething/dosomething_global/dosomething_global.module +++ b/lib/modules/dosomething/dosomething_global/dosomething_global.module @@ -205,13 +205,13 @@ function dosomething_global_convert_language_to_country($language) { } /** - * Converts the given country into its assigned language + * Converts the given country into its assigned language. * * @param string country * The country Code * * @return - * The language mapped to this country + * The language mapped to this country or NULL */ function dosomething_global_convert_country_to_language($country) { $lang_map = variable_get('dosomething_global_language_map', ''); @@ -220,7 +220,8 @@ function dosomething_global_convert_country_to_language($country) { return $lang_key; } } - return 'en'; + // It is not the job of this function to determine a default language + return NULL; } /* diff --git a/lib/modules/dosomething/dosomething_user/dosomething_user.module b/lib/modules/dosomething/dosomething_user/dosomething_user.module index 8bc65f521..c4de7b063 100644 --- a/lib/modules/dosomething/dosomething_user/dosomething_user.module +++ b/lib/modules/dosomething/dosomething_user/dosomething_user.module @@ -250,6 +250,9 @@ function dosomething_user_form_alter(&$form, $form_state, $form_id) { if ($form_id == 'user_register_form' && $_SERVER['REQUEST_URI'] != '/admin/people/create') { $form['#action'] = '/user/register'; $form['#submit'][] = 'dosomething_user_new_user'; + if (module_exists('dosomething_global')) { + $form['#submit'][] = 'dosomething_user_new_user_attributes'; + } // Unsets relevant register form fields based on configuration variables. _dosomething_user_register_display_fields($form); // Add campaign data, if needed. @@ -464,17 +467,6 @@ function dosomething_user_new_user($form, &$form_state) { global $user; $account = $user; - if (module_exists('dosomething_global')) { - // Adjust language based on location - $user_country_code = dosomething_settings_get_geo_country_code(); - $language = dosomething_global_convert_country_to_language($user_country_code); - $system_languages = language_list(); - if (!in_array($langauge, $system_languages)) { - $language = 'en-global'; - } - user_save($account, ['language' => $language]); - } - // Should we sign this kid up for messages? if (dosomething_user_is_under_thirteen()) { return; @@ -523,6 +515,56 @@ function dosomething_user_new_user($form, &$form_state) { dosomething_mbp_request('user_register', $params); } +function dosomething_user_new_user_attributes($form, &$form_state) { + dosomething_user_set_global_attributes(); +} + +/** + * Sets the user global attributes and sends them to Northstar. + * + * @param object $account + * The account to return value for. If NULL, uses global $user. + * @param string $country_code + * The country code where the user currently resides. If NULL, uses + * the headers in current request. + * @param string $language + * The new language to set on the user. If NULL, gets the matching + * language or defaults. + */ +function dosomething_user_set_global_attributes($user = NULL, $country_code = NULL, $language = NULL) { + if ($user == NULL) { + global $user; + $account = $user; + } + if ($country_code == NULL) { + $country_code = dosomething_settings_get_geo_country_code(); + // If no Fastly headers set, use US EN + if ($country_code == NULL) { + $language = 'en'; + } + } + // If the language wasn't specified in the function call, determine the user language + if ($language == NULL) { + $converted_language = dosomething_global_convert_country_to_language($country_code); + $language = 'en-global'; + + // If the country in the headers matched to a language in our strongarm + if ($converted_language != NULL) { + + // Verify the language is installed on the system, + $system_languages = language_list(); + foreach ($system_languages as $lang_key => $system_lang) { + if ($converted_language == $lang_key) { + $language = $converted_language; + break; + } + } + } + } + user_save($account, ['language' => $language]); + //TODO: (#5263) Send $language and $country_code to NorthStar +} + /** * Checks that user is over 13. *