Merge branch 'xorg/maint'
[platal.git] / upgrade / 1.1.5 / name.php
CommitLineData
2e649a44
SJ
1#!/usr/bin/php5
2<?php
c8d0a532
SJ
3require_once 'connect.db.inc.php';
4require_once '../../include/name.func.inc.php';
2e649a44
SJ
5
6// Returns the lower-cased name; if proper capitalization rule was not known,
7// warns the user, and returns the initial name.
8function capitalize_name_checked($name)
9{
c8d0a532
SJ
10 if ($name == '') {
11 return '';
12 }
13
2e649a44
SJ
14 $capitalized = capitalize_name($name);
15 if (!$capitalized) {
c8d0a532 16 echo " - WARNING: Unable to capitalize '$name'.\n";
2e649a44
SJ
17 return $name;
18 }
19 if (mb_strtolower($name, 'UTF-8') != mb_strtolower($capitalized, 'UTF-8')) {
c8d0a532 20 echo " - WARNING: Capitalization of '$name' is unexpected: '$capitalized'\n";
2e649a44
SJ
21 return $name;
22 }
23
24 return $capitalized;
25}
26
27// Returns true iff the @p name looks like it should be properly recapitalized.
28function 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;
c8d0a532
SJ
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');
2e649a44
SJ
47$name_list = array('lastname_initial', 'lastname_main', 'lastname_marital', 'lastname_ordinary',
48 'firstname_initial', 'firstname_main', 'firstname_ordinary', 'pseudonym');
c8d0a532 49$total = $names->total();
2e649a44
SJ
50while ($item = $names->next()) {
51 foreach ($name_list as $type) {
c8d0a532 52 $item[$type] = capitalize_name_checked($item[$type]);
2e649a44
SJ
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']);
c8d0a532 62 $profile = Profile::get($item['pid']);
2e649a44
SJ
63 update_display_names($profile, $item);
64
c8d0a532 65 printf("\r%u / %u", $conversions, $total);
2e649a44
SJ
66 $conversions++;
67 unset($item, $profile);
68}
69
c8d0a532
SJ
70printf("\r%u / %u", $conversions, $total);
71echo "\n$conversions names from profiles properly recapitalized.\n";
2e649a44
SJ
72
73$conversions = 0;
c8d0a532
SJ
74$names = XDB::iterator('SELECT uid, firstname, lastname
75 FROM accounts
76 WHERE NOT EXISTS (SELECT 1
2e649a44
SJ
77 FROM account_profiles
78 WHERE account_profiles.uid = accounts.uid)');
79
c8d0a532 80$total = $names->total();
2e649a44
SJ
81while ($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 = {?}',
c8d0a532 92 $firstname, $lastname, $full_name, $directory_name, $sort_name, $item['uid']);
2e649a44 93
c8d0a532 94 printf("\r%u / %u", $conversions, $total);
2e649a44
SJ
95 $conversions++;
96 unset($item);
97}
c8d0a532 98printf("\r%u / %u", $conversions, $total);
2e649a44 99
c8d0a532 100echo "\n$conversions names from accounts properly recapitalized.\n";
2e649a44 101
448c8cdc 102// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
2e649a44 103?>