Commit | Line | Data |
---|---|---|
2e649a44 SJ |
1 | #!/usr/bin/php5 |
2 | <?php | |
3 | include 'connect.db.inc.php'; | |
4 | include '../../include/name.func.inc.php'; | |
5 | ||
6 | // Returns the lower-cased name; if proper capitalization rule was not known, | |
7 | // warns the user, and returns the initial name. | |
8 | function capitalize_name_checked($name) | |
9 | { | |
10 | $capitalized = capitalize_name($name); | |
11 | if (!$capitalized) { | |
12 | echo "WARNING: Unable to capitalize '$name'.\n"; | |
13 | return $name; | |
14 | } | |
15 | if (mb_strtolower($name, 'UTF-8') != mb_strtolower($capitalized, 'UTF-8')) { | |
16 | echo "WARNING: Capitalization of '$name' is unexpected: '$capitalized'\n"; | |
17 | return $name; | |
18 | } | |
19 | ||
20 | return $capitalized; | |
21 | } | |
22 | ||
23 | // Returns true iff the @p name looks like it should be properly recapitalized. | |
24 | function needs_conversion($name) | |
25 | { | |
26 | if (strlen($name) == 0) { | |
27 | return false; | |
28 | } | |
29 | if ($name == mb_strtoupper($name, 'UTF-8')) { | |
30 | return true; | |
31 | } | |
32 | ||
33 | $name_length = mb_strlen($name, 'UTF-8'); | |
34 | $name_capitals = preg_replace('/\P{Lu}/u', '', $name); | |
35 | return (mb_strlen($name_capitals, 'UTF-8') > 0.4 * $name_length); | |
36 | } | |
37 | ||
38 | // Retrieves all the names to convert. | |
39 | $conversions = 0; | |
40 | $names = XDB::iterRow('SELECT pid, lastname_initial, lastname_main, lastname_marital, lastname_ordinary, | |
41 | firstname_initial, firstname_main, firstname_ordinary, pseudonym | |
42 | FROM profile_public_names'); | |
43 | $name_list = array('lastname_initial', 'lastname_main', 'lastname_marital', 'lastname_ordinary', | |
44 | 'firstname_initial', 'firstname_main', 'firstname_ordinary', 'pseudonym'); | |
45 | while ($item = $names->next()) { | |
46 | foreach ($name_list as $type) { | |
47 | if ($item[$type] != '') { | |
48 | $item[$type] = capitalize_name_checked($item[$type]); | |
49 | } | |
50 | } | |
51 | ||
52 | XDB::execute('UPDATE profile_public_names | |
53 | SET lastname_initial = {?}, lastname_main = {?}, lastname_marital = {?}, lastname_ordinary = {?}, | |
54 | firstname_initial = {?}, firstname_main = {?}, firstname_ordinary = {?}, pseudonym = {?} | |
55 | WHERE pid = {?}', | |
56 | $item['lastname_initial'], $item['lastname_main'], $item['lastname_marital'], $item['lastname_ordinary'], | |
57 | $item['firstname_initial'], $item['firstname_main'], $item['firstname_ordinary'], $item['pseudonym'], | |
58 | $item['pid']); | |
59 | $profile = Profile::get($pid); | |
60 | update_display_names($profile, $item); | |
61 | ||
62 | $conversions++; | |
63 | unset($item, $profile); | |
64 | } | |
65 | ||
66 | echo "$conversions names from profiles properly recapitalized.\n"; | |
67 | ||
68 | $conversions = 0; | |
69 | $names = XDB::iterRow('SELECT uid, firstname, lastname | |
70 | FROM accounts | |
71 | WHERE NOT EXISTS (SELECT 1 | |
72 | FROM account_profiles | |
73 | WHERE account_profiles.uid = accounts.uid)'); | |
74 | ||
75 | while ($item = $names->next()) { | |
76 | $lastname = capitalize_name_checked($item['lastname']); | |
77 | $firstname = capitalize_name_checked($item['firstname']); | |
78 | ||
79 | $full_name = build_full_name($firstname, $lastname); | |
80 | $directory_name = build_directory_name($firstname, $lastname); | |
81 | $sort_name = build_sort_name($firstname, $lastname); | |
82 | ||
83 | XDB::execute('UPDATE accounts | |
84 | SET firstname = {?}, lastname = {?}, full_name = {?}, directory_name = {?}, sort_name = {?} | |
85 | WHERE uid = {?}', | |
86 | $firstname, $lastname, $full_name, $directory_name, $sort_name); | |
87 | ||
88 | $conversions++; | |
89 | unset($item); | |
90 | } | |
91 | ||
92 | echo "$conversions names from accounts properly recapitalized.\n"; | |
93 | ||
94 | // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: | |
95 | ?> |