From 1223d7f8fb524343ce836187bb3e09588901331c Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 15 Jun 2021 15:50:45 +0200 Subject: [PATCH] Fix user language edition, fix default language, use isocode Remove unused code --- .env | 2 +- public/main/admin/user_add.php | 5 +- public/main/admin/user_edit.php | 5 +- .../main/inc/lib/internationalization.lib.php | 7 +- public/main/inc/lib/usermanager.lib.php | 8 +- public/main/install/index.php | 14 -- public/main/install/install.lib.php | 161 +----------------- .../DataFixtures/LanguageFixtures.php | 15 +- 8 files changed, 24 insertions(+), 193 deletions(-) diff --git a/.env b/.env index ab1e0ba352..df111fd498 100644 --- a/.env +++ b/.env @@ -24,7 +24,7 @@ APP_INSTALLED='{{APP_INSTALLED}}' ## Encrypt method bcrypt/sha1/md5 APP_ENCRYPT_METHOD='{{APP_ENCRYPT_METHOD}}' -APP_LOCALE='en' +APP_LOCALE='en_US' APP_MULTIPLE_ACCESS_URL='' diff --git a/public/main/admin/user_add.php b/public/main/admin/user_add.php index d044e32625..1c43be32e6 100644 --- a/public/main/admin/user_add.php +++ b/public/main/admin/user_add.php @@ -258,7 +258,7 @@ if (api_is_platform_admin()) { $form->addElement('html', ''); } -$form->addSelectLanguage('language', get_lang('Language')); +$form->addSelectLanguage('locale', get_lang('Language')); // Send email $group = []; @@ -329,6 +329,7 @@ $defaults['extra_mail_notify_message'] = 1; $defaults['extra_mail_notify_group_message'] = 1; $defaults['radio_expiration_date'] = 0; $defaults['status'] = STUDENT; +$defaults['locale'] = api_get_language_isocode(); $form->setDefaults($defaults); // Submit button @@ -348,7 +349,7 @@ if ($form->validate()) { $phone = $user['phone']; $username = $user['username']; $status = (int) $user['status']; - $language = $user['language']; + $language = $user['locale']; $picture = $_FILES['picture']; $platform_admin = 0; if (isset($user['admin']) && isset($user['admin']['platform_admin'])) { diff --git a/public/main/admin/user_edit.php b/public/main/admin/user_edit.php index c107c88897..a10e06ab88 100644 --- a/public/main/admin/user_edit.php +++ b/public/main/admin/user_edit.php @@ -85,6 +85,7 @@ if (1 != Database::num_rows($res)) { } $user_data = Database::fetch_array($res, 'ASSOC'); + $user_data['platform_admin'] = is_null($user_data['is_admin']) ? 0 : 1; $user_data['send_mail'] = 0; $user_data['old_password'] = $user_data['password']; @@ -266,7 +267,7 @@ if (api_is_platform_admin()) { } //Language -$form->addSelectLanguage('language', get_lang('Language')); +$form->addSelectLanguage('locale', get_lang('Language')); // Send email $group = []; @@ -423,7 +424,7 @@ if ($form->validate()) { $send_mail = (int) $user['send_mail']; $reset_password = (int) $user['reset_password']; $hr_dept_id = isset($user['hr_dept_id']) ? intval($user['hr_dept_id']) : null; - $language = $user['language']; + $language = $user['locale']; $address = isset($user['address']) ? $user['address'] : null; $expiration_date = null; diff --git a/public/main/inc/lib/internationalization.lib.php b/public/main/inc/lib/internationalization.lib.php index 89d78a611a..ed993dceef 100644 --- a/public/main/inc/lib/internationalization.lib.php +++ b/public/main/inc/lib/internationalization.lib.php @@ -2065,7 +2065,11 @@ function _api_get_person_name_convention($iso, $type) $conventionsFormatted[$iso]['format'] = $language['format']; $conventionsFormatted[$iso]['sort_by'] = $language['sort_by']; - $conventionsFormatted[$iso]['format'] = str_replace($search1, $replacement1, $conventionsFormatted[$iso]['format']); + $conventionsFormatted[$iso]['format'] = str_replace( + $search1, + $replacement1, + $conventionsFormatted[$iso]['format'] + ); $conventionsFormatted[$iso]['format'] = _api_validate_person_name_format( _api_clean_person_name( str_replace( @@ -2079,6 +2083,7 @@ function _api_get_person_name_convention($iso, $type) ) ) ); + $conventionsFormatted[$iso]['sort_by'] = 'last_name' !== strtolower($conventionsFormatted[$iso]['sort_by']) ? true : false; } diff --git a/public/main/inc/lib/usermanager.lib.php b/public/main/inc/lib/usermanager.lib.php index beba6e540b..78e94b861e 100644 --- a/public/main/inc/lib/usermanager.lib.php +++ b/public/main/inc/lib/usermanager.lib.php @@ -272,14 +272,12 @@ class UserManager // Checking the user language $languages = api_get_languages(); - $language = strtolower($language); // Default to english if (!in_array($language, array_keys($languages), true)) { - $language = 'en'; + $language = 'en_US'; } - $currentDate = api_get_utc_datetime(); $now = new DateTime(); if (empty($expirationDate) || '0000-00-00 00:00:00' === $expirationDate) { @@ -1038,7 +1036,7 @@ class UserManager $creator_id = null, $hr_dept_id = 0, $extra = null, - $language = 'english', + $language = 'en_US', $encrypt_method = '', $send_email = false, $reset_password = 0, @@ -1111,12 +1109,10 @@ class UserManager ->setStatus($status) ->setAuthSource($auth_source) ->setLocale($language) - ->setLocale($language) ->setEmail($email) ->setOfficialCode($official_code) ->setPhone($phone) ->setAddress($address) - //->setPictureUri($picture_uri) ->setExpirationDate($expiration_date) ->setActive($active) ->setEnabled($active) diff --git a/public/main/install/index.php b/public/main/install/index.php index 2a2ae827c5..e221a0d412 100644 --- a/public/main/install/index.php +++ b/public/main/install/index.php @@ -66,21 +66,7 @@ putenv('APP_DEBUG=1'); session_start(); require_once 'install.lib.php'; - $installationLanguage = 'en_US'; -// Determination of the language during the installation procedure. -if (!empty($_POST['language_list'])) { - $search = ['../', '\\0']; - $installationLanguage = str_replace($search, '', urldecode($_POST['language_list'])); -} else { - // Trying to switch to the browser's language, it is covenient for most of the cases. - $installationLanguage = detect_browser_language(); -} - -// Language validation. -if (!array_key_exists($installationLanguage, get_language_folder_list())) { - $installationLanguage = 'en_US'; -} // Set translation $translator = new Translator($installationLanguage); diff --git a/public/main/install/install.lib.php b/public/main/install/install.lib.php index 0ef3d9d2b6..269eeac9e2 100644 --- a/public/main/install/install.lib.php +++ b/public/main/install/install.lib.php @@ -194,98 +194,6 @@ function trueFalse($var) return $var ? 'true' : 'false'; } -/** - * Detects browser's language. - * - * @return string Returns a language identificator, i.e. 'english', 'spanish', ... - * - * @author Ivan Tcholakov, 2010 - */ -function detect_browser_language() -{ - static $language_index = [ - 'ar' => 'arabic', - 'ast' => 'asturian', - 'bg' => 'bulgarian', - 'bs' => 'bosnian', - 'ca' => 'catalan', - 'zh' => 'simpl_chinese', - 'zh-tw' => 'trad_chinese', - 'cs' => 'czech', - 'da' => 'danish', - 'prs' => 'dari', - 'de' => 'german', - 'el' => 'greek', - 'en' => 'english', - 'es' => 'spanish', - 'eo' => 'esperanto', - 'eu' => 'basque', - 'fa' => 'persian', - 'fr' => 'french', - 'fur' => 'friulian', - 'gl' => 'galician', - 'ka' => 'georgian', - 'hr' => 'croatian', - 'he' => 'hebrew', - 'hi' => 'hindi', - 'id' => 'indonesian', - 'it' => 'italian', - 'ko' => 'korean', - 'lv' => 'latvian', - 'lt' => 'lithuanian', - 'mk' => 'macedonian', - 'hu' => 'hungarian', - 'ms' => 'malay', - 'nl' => 'dutch', - 'ja' => 'japanese', - 'no' => 'norwegian', - 'oc' => 'occitan', - 'ps' => 'pashto', - 'pl' => 'polish', - 'pt' => 'portuguese', - 'pt-br' => 'brazilian', - 'ro' => 'romanian', - 'qu' => 'quechua_cusco', - 'ru' => 'russian', - 'sk' => 'slovak', - 'sl' => 'slovenian', - 'sr' => 'serbian', - 'fi' => 'finnish', - 'sv' => 'swedish', - 'th' => 'thai', - 'tr' => 'turkish', - 'uk' => 'ukrainian', - 'vi' => 'vietnamese', - 'sw' => 'swahili', - 'yo' => 'yoruba', - ]; - - $system_available_languages = get_language_folder_list(); - if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { - $accept_languages = strtolower(str_replace('_', '-', $_SERVER['HTTP_ACCEPT_LANGUAGE'])); - foreach ($language_index as $code => $language) { - if (0 === strpos($accept_languages, $code)) { - if (!empty($system_available_languages[$language])) { - return $language; - } - } - } - } - - if (isset($_SERVER['HTTP_USER_AGENT'])) { - $user_agent = strtolower(str_replace('_', '-', $_SERVER['HTTP_USER_AGENT'])); - foreach ($language_index as $code => $language) { - if (@preg_match("/[\[\( ]{$code}[;,_\-\)]/", $user_agent)) { - if (!empty($system_available_languages[$language])) { - return $language; - } - } - } - } - - return 'english'; -} - /** * This function checks if the given folder is writable. * @@ -376,73 +284,6 @@ function writeSystemConfigFile($path) fclose($fp); } -/** - * Returns a list of language directories. - */ -function get_language_folder_list() -{ - $languages = LanguageFixtures::getLanguages(); - - return array_column($languages, 'english_name', 'isocode'); - - return [ - 'ar' => 'arabic', - 'ast' => 'asturian', - 'bg' => 'bulgarian', - 'bs' => 'bosnian', - 'ca' => 'catalan', - 'zh' => 'simpl_chinese', - 'zh-tw' => 'trad_chinese', - 'cs' => 'czech', - 'da' => 'danish', - 'prs' => 'dari', - 'de' => 'german', - 'el' => 'greek', - 'en' => 'english', - 'es' => 'spanish', - 'eo' => 'esperanto', - 'eu' => 'basque', - 'fa' => 'persian', - 'fr' => 'french', - 'fur' => 'friulian', - 'gl' => 'galician', - 'ka' => 'georgian', - 'hr' => 'croatian', - 'he' => 'hebrew', - 'hi' => 'hindi', - 'id' => 'indonesian', - 'it' => 'italian', - 'ko' => 'korean', - 'lv' => 'latvian', - 'lt' => 'lithuanian', - 'mk' => 'macedonian', - 'hu' => 'hungarian', - 'ms' => 'malay', - 'nl' => 'dutch', - 'ja' => 'japanese', - 'no' => 'norwegian', - 'oc' => 'occitan', - 'ps' => 'pashto', - 'pl' => 'polish', - 'pt' => 'portuguese', - 'pt-br' => 'brazilian', - 'ro' => 'romanian', - 'qu' => 'quechua_cusco', - 'ru' => 'russian', - 'sk' => 'slovak', - 'sl' => 'slovenian', - 'sr' => 'serbian', - 'fi' => 'finnish', - 'sv' => 'swedish', - 'th' => 'thai', - 'tr' => 'turkish', - 'uk' => 'ukrainian', - 'vi' => 'vietnamese', - 'sw' => 'swahili', - 'yo' => 'yoruba', - ]; -} - /** * This function returns the value of a parameter from the configuration file. * @@ -583,7 +424,7 @@ function display_language_selection_box($name = 'language_list', $default_langua // Displaying the box. return Display::select( 'language_list', - get_language_folder_list(), + array_column(LanguageFixtures::getLanguages(),'english_name', 'isocode'), $default_language, ['class' => 'form-control'], false diff --git a/src/CoreBundle/DataFixtures/LanguageFixtures.php b/src/CoreBundle/DataFixtures/LanguageFixtures.php index e9843cc4a9..92f993f41d 100644 --- a/src/CoreBundle/DataFixtures/LanguageFixtures.php +++ b/src/CoreBundle/DataFixtures/LanguageFixtures.php @@ -20,7 +20,8 @@ class LanguageFixtures extends Fixture ->setOriginalName($data['original_name']) ->setEnglishName($data['english_name']) ->setIsocode($data['isocode']) - ->setAvailable(1 === $data['available']); + ->setAvailable(1 === $data['available']) + ; $manager->persist($lang); } @@ -83,7 +84,7 @@ class LanguageFixtures extends Fixture 'original_name' => 'Bosanski', 'english_name' => 'bosnian', 'isocode' => 'bs_BA', - 'available' => 1, + 'available' => 0, 'format' => 'title first_name last_name', 'sort_by' => 'first_name', ], @@ -99,7 +100,7 @@ class LanguageFixtures extends Fixture 'original_name' => 'Български', 'english_name' => 'bulgarian', 'isocode' => 'bg', - 'available' => 1, + 'available' => 0, 'format' => 'title first_name last_name', 'sort_by' => 'first_name', ], @@ -241,7 +242,7 @@ class LanguageFixtures extends Fixture 'original_name' => 'עברית', 'english_name' => 'hebrew', 'isocode' => 'he_IL', - 'available' => 1, + 'available' => 0, 'format' => 'title first_name last_name', 'sort_by' => 'first_name', ], @@ -257,7 +258,7 @@ class LanguageFixtures extends Fixture 'original_name' => 'Magyar', 'english_name' => 'hungarian', 'isocode' => 'hu_HU', - 'available' => 1, + 'available' => 0, 'format' => 'title last_name first_name', 'sort_by' => 'last_name', ], @@ -362,7 +363,7 @@ class LanguageFixtures extends Fixture 'original_name' => 'Polski', 'english_name' => 'polish', 'isocode' => 'pl_PL', - 'available' => 0, + 'available' => 1, 'format' => 'title first_name last_name', 'sort_by' => 'first_name', ], @@ -394,7 +395,7 @@ class LanguageFixtures extends Fixture 'original_name' => 'Русский', 'english_name' => 'russian', 'isocode' => 'ru_RU', - 'available' => 0, + 'available' => 1, 'format' => 'title first_name last_name', 'sort_by' => 'first_name', ],