Špatné řazení zemí při registraci uživatelů

Špatné řazení zemí při registraci uživatelů

autor Jakub Šerých -
Počet odpovědí: 9
Zdravím fórum a mám dotaz, zda je přirozené, že se v Moodlu země ve výběrovém listboxu na stránce registrace uživatelů zobrazují ve špatném pořadí.

Ohákovaná písmena (tedy i Českou republiku) tam mám až pod Z, takže někteří uživatelé ji považují za nenalezitelnou, a pak mi tam vyplňují různé Angory, Afghánistány, Barmy atd.

Napadlo mě, že by to mohlo být špatným collation, které je u některých tabulek utf8_czech_ci (defaultní nastaveni databáze), ale u některých utf_unicode_ci (k čemuž asi došlo kdysi při upgradu verzí, jinak si to nedovedu vysvětlit).

Nevíte, ve které tabulce by ten seznam zemí z toho listboxu mohl být?

Moodle 1.8.2+ na Debianu, mySQL 5.032, PHP 5.2.0.8.11

Díky za rady a podněty

Jakub Šerých


Počet hodnocení: -
V odpovědi na Jakub Šerých

Re: Špatné řazení zemí při registraci uživatelů

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři
To je častá chyba a popravdě přesně nevím, čím to je. Ale seznam zemí se dle mě načítá z jazykového baličku a ne z databáze (collation si nicméně opravte, tím nic nezkazíte).
Pokud je za řazení zemí z jazykového balíčku zodpovědné PHP, bude řazení ovlivněné nastavením locales. Možná je potřeba rozšíření mbstring? Opravdu teď jen hádám.

--mudrd8mz
V odpovědi na David Mudrák

Re: Špatné řazení zemí při registraci uživatelů

autor Peter Svec -
Super tip! Zoznam zemi sa nacitava z jazykoveho balicku zo suboru countries.php.

Chybne radenie sposobuje zle (resp. nevhodne) nastavenie locales. V pripade, ze nastavim napr. en_US tak to bude zoradovat tak ako pisete.

Ked nastavim cs_CZ tak budu tie s 'hackami' prve. No nemusia to aspon hladat úsměv

No a nakoniec nastavenie locale na cs_CZ.UTF-8 ponukne spravne abecedne zoradenie.

Locale sa v moodle definuje v Administratíva / ▶ Jazyk / ▶ Jazykové nastavenia / Premenná locale

peter
V odpovědi na Peter Svec

Re: Špatné řazení zemí při registraci uživatelů

autor Daniel Mikšík -
Podle dokumentace by ale locale v nastavení instalace mělo zůstat prázdné, protože přinejmenším od 1.8 je locale definováno přímo v každém jazykovém balíčku (v souboru langconfig.php), a nemá tedy smysl nastavovat ho natvrdo pro celý server (předpokládá se – předpokládám ;) –, že se změnou jazyka si uživatel přepíná i způsob řazení).

Chyba je (byla) přímo ve funkci pro řazení zemí. V souboru lib/moodlelib.php hledejte funkci get_list_of_countries(). Pro větev 1.8 STABLE je pro řazení seznamu použita funkce asort($string), kdežto ve větvi 1.9 STABLE je od verze souboru 1.960.2.39 použita funkce uasort($string, 'strcoll'). Přenesete-li řádek z větve 1.9 do souboru z větve 1.8, bude řazení fungovat správně i v Moodlu 1.8.x.
V odpovědi na Daniel Mikšík

Re: Špatné řazení zemí při registraci uživatelů

autor Jakub Šerých -
>Pro větev 1.8 STABLE je pro řazení seznamu použita funkce asort($string), kdežto ve větvi 1.9 STABLE je od verze souboru 1.960.2.39 použita funkce uasort($string, 'strcoll'). Přenesete-li řádek z větve 1.9 do souboru z větve 1.8, bude řazení fungovat správně i v Moodlu 1.8.x.

Trefa do černého, už to fachá.

Díky moc

Jakub Šerých
V odpovědi na Peter Svec

Re: Špatné řazení zemí při registraci uživatelů

autor Jakub Šerých -
Tak jsem z toho nějaký zmatený. Jednak to po změně locale v nastaveni Moodlu nadále nefunguje a jednak jsem v celém adresáři moodlu našel jediný soubor countries.php a sice v lang/en_utf8/ a v něm sice skutečně jsou země, ale jen v angličtině, takže to ten moodle musí brát odněkud z jiného místa smutek

Ale i tak díky za radu

Jakub Šerých
V odpovědi na Jakub Šerých

Re: Špatné řazení zemí při registraci uživatelů

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři
Odkud to bere je jasné - z jazykového balíčku, který není v adresáři se zdrojáky Moodlu, ale jeho datovém adresáři - přesněji v
$CFG->dataroot/lang/cs_utf8/countries.php
Ve vašem případě bych se řídil Danovou radou a upravil si zdrojový kód funkce get_list_of_countries()

--mudrd8mz
V odpovědi na Jakub Šerých

Re: Špatné řazení zemí při registraci uživatelů

autor Peter Svec -
No je pravda, ze som to skusal na moodle 1.9 (neuvedomil som si ze mate 1.8).

Subor countries.php daneho jazyka treba hladat v moodledata.

peter
V odpovědi na David Mudrák

Re: Špatné řazení zemí při registraci uživatelů

autor Petr Janeček -
Tak mám stejný problém, akorát na verzi 1.9.4+ (20090225) běžící na linuxu.
Stejná verze instalace na Windows stroji řadí země bez problémů, tak bych to přičítal nějakému nastavení dané instalace.
Nenapadne, prosím, někoho po čem se koukat? Zřejmě to bude souviset s nastavením PHP nebo Apache?
V odpovědi na Petr Janeček

Re: Špatné řazení zemí při registraci uživatelů

autor Zdeněk Pytela -
Apache httpd do toho určitě nemluví, php nejspíš taky ne. Jaké máte nastavení systému?
$ locale
LANG=cs_CZ.UTF-8
LC_CTYPE="cs_CZ.UTF-8"
...