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