From db8e6a405da8964085cd31a5dcc8030b78911f58 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Mon, 18 Apr 2011 22:07:27 +0200 Subject: [PATCH] Oops, I pushed too fast. These are a fexs fixes to last commit. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- include/name.func.inc.php | 32 +++++++++++++++++--------------- upgrade/1.1.1/06_accounts.sql | 32 +++++++++++++++++--------------- upgrade/1.1.1/accounts.php | 16 ++++++++++++---- 3 files changed, 46 insertions(+), 34 deletions(-) mode change 100644 => 100755 upgrade/1.1.1/accounts.php diff --git a/include/name.func.inc.php b/include/name.func.inc.php index 2c9b079..1f78daf 100644 --- a/include/name.func.inc.php +++ b/include/name.func.inc.php @@ -320,23 +320,25 @@ function set_alias_names(&$sn_new, $sn_old, $pid, PlUser $user, $update_new = fa // XXX: Improve this when we optimize names handling. // Updates accounts firt and last names. - XDB::execute('UPDATE TABLE accounts AS a - INNER JOIN profile_name_enum AS le ON (le.type = \'lastname\') - INNER JOIN profile_name_enum AS ce ON (ce.type = \'lastname_ordinary\') - INNER JOIN profile_name AS l ON (a.uid = l.uid AND le.id = l.typeid) - LEFT JOIN profile_name AS c ON (a.uid = c.uid AND ce.id = c.typeid) - SET a.lastname = IF(c.uid IS NULL, IF(l.particle != \'\', l.name, CONCAT(l.particle, \' \', l.name)) - IF(c.particle != \'\', c.name, CONCAT(c.particle, \' \', c.name))) - WHERE a.uid = {?}', + XDB::execute('UPDATE accounts AS a + INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET(\'owner\', ap.perms)) + INNER JOIN profile_name_enum AS le ON (le.type = \'lastname\') + INNER JOIN profile_name_enum AS ce ON (ce.type = \'lastname_ordinary\') + INNER JOIN profile_name AS l ON (ap.pid = l.pid AND le.id = l.typeid) + LEFT JOIN profile_name AS c ON (ap.pid = c.pid AND ce.id = c.typeid) + SET a.lastname = IF(c.pid IS NULL, IF(l.particle != \'\', l.name, CONCAT(l.particle, \' \', l.name)), + IF(c.particle != \'\', c.name, CONCAT(c.particle, \' \', c.name))) + WHERE a.uid = {?}', $user->id()); - XDB::execute('UPDATE TABLE accounts AS a - INNER JOIN profile_name_enum AS fe ON (fe.type = \'firstname\') - INNER JOIN profile_name_enum AS ce ON (ce.type = \'firstname_ordinary\') - INNER JOIN profile_name AS f ON (a.uid = f.uid AND fe.id = f.typeid) - LEFT JOIN profile_name AS c ON (a.uid = c.uid AND ce.id = c.typeid) - SET a.firstname = IF(c.uid IS NULL, f.name, c.name) - WHERE a.uid = {?}', + XDB::execute('UPDATE accounts AS a + INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET(\'owner\', ap.perms)) + INNER JOIN profile_name_enum AS fe ON (fe.type = \'firstname\') + INNER JOIN profile_name_enum AS ce ON (ce.type = \'firstname_ordinary\') + INNER JOIN profile_name AS f ON (ap.pid = f.pid AND fe.id = f.typeid) + LEFT JOIN profile_name AS c ON (ap.pid = c.pid AND ce.id = c.typeid) + SET a.firstname = IF(c.pid IS NULL, f.name, c.name) + WHERE a.uid = {?}', $user->id()); Profile::rebuildSearchTokens($pid, false); diff --git a/upgrade/1.1.1/06_accounts.sql b/upgrade/1.1.1/06_accounts.sql index 4327491..2919fa3 100644 --- a/upgrade/1.1.1/06_accounts.sql +++ b/upgrade/1.1.1/06_accounts.sql @@ -1,21 +1,23 @@ ALTER TABLE accounts ADD COLUMN firstname VARCHAR(255) DEFAULT NULL AFTER email; ALTER TABLE accounts ADD COLUMN lastname VARCHAR(255) DEFAULT NULL AFTER firstname; -UPDATE TABLE accounts AS a - INNER JOIN profile_name_enum AS le ON (le.type = 'lastname') - INNER JOIN profile_name_enum AS ce ON (ce.type = 'lastname_ordinary') - INNER JOIN profile_name AS l ON (a.uid = l.uid AND le.id = l.typeid) - LEFT JOIN profile_name AS c ON (a.uid = c.uid AND ce.id = c.typeid) - SET a.lastname = IF(c.uid IS NULL, IF(l.particle != '', l.name, CONCAT(l.particle, ' ', l.name)) - IF(c.particle != '', c.name, CONCAT(c.particle, ' ', c.name))) - WHERE a.type IN ('x', 'master', 'phd'); + UPDATE accounts AS a +INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms)) +INNER JOIN profile_name_enum AS le ON (le.type = 'lastname') +INNER JOIN profile_name_enum AS ce ON (ce.type = 'lastname_ordinary') +INNER JOIN profile_name AS l ON (ap.pid = l.pid AND le.id = l.typeid) + LEFT JOIN profile_name AS c ON (ap.pid = c.pid AND ce.id = c.typeid) + SET a.lastname = IF(c.pid IS NULL, IF(l.particle != '', l.name, CONCAT(l.particle, ' ', l.name)), + IF(c.particle != '', c.name, CONCAT(c.particle, ' ', c.name))) + WHERE a.type IN ('x', 'master', 'phd'); -UPDATE TABLE accounts AS a - INNER JOIN profile_name_enum AS fe ON (fe.type = 'firstname') - INNER JOIN profile_name_enum AS ce ON (ce.type = 'firstname_ordinary') - INNER JOIN profile_name AS f ON (a.uid = f.uid AND fe.id = f.typeid) - LEFT JOIN profile_name AS c ON (a.uid = c.uid AND ce.id = c.typeid) - SET a.firstname = IF(c.uid IS NULL, f.name, c.name) - WHERE a.type IN ('x', 'master', 'phd'); + UPDATE accounts AS a +INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms)) +INNER JOIN profile_name_enum AS fe ON (fe.type = 'firstname') +INNER JOIN profile_name_enum AS ce ON (ce.type = 'firstname_ordinary') +INNER JOIN profile_name AS f ON (ap.pid = f.pid AND fe.id = f.typeid) + LEFT JOIN profile_name AS c ON (ap.pid = c.pid AND ce.id = c.typeid) + SET a.firstname = IF(c.pid IS NULL, f.name, c.name) + WHERE a.type IN ('x', 'master', 'phd'); -- vim:set syntax=mysql: diff --git a/upgrade/1.1.1/accounts.php b/upgrade/1.1.1/accounts.php old mode 100644 new mode 100755 index 3d2f35a..59d9f7f --- a/upgrade/1.1.1/accounts.php +++ b/upgrade/1.1.1/accounts.php @@ -5,14 +5,17 @@ require_once 'connect.db.inc.php'; $globals->debug = 0; // Do not store backtraces. -$it = XDN::rawIterator('SELECT uid, full_name, email, type +$it = XDB::rawIterator('SELECT uid, full_name, email, type FROM accounts WHERE type NOT IN (\'x\', \'master\', \'phd\')'); +$total = $it->total(); +$done = 0; + while ($item = $it->next()) { if ($item['type'] == 'virtual') { $firstname = ''; $lastname = $item['full_name']; - } elseif (strpos(' ', $item['full_name'])) { + } elseif ($item['full_name'] && strpos(' ', $item['full_name'])) { list($firstname, $lastname) = explode(' ', $item['full_name']); } else { list($local_part, ) = explode('@', strtolower($item['email'])); @@ -25,10 +28,15 @@ while ($item = $it->next()) { $lastname = ucwords(implode(' ', array_slice($parts, 1))); } } + XDB::execute('UPDATE accounts - SET firstname = {?}, lastname = {?}', - $firstname, $lastname); + SET firstname = {?}, lastname = {?} + WHERE uid = {?}', + $firstname, $lastname, $item['uid']); + ++$done; + printf("\r%u / %u", $done, $total); } +print "\n\nDone.\n"; /* vim:set et sw=4 sts=4 ts=4: */ ?> -- 2.1.4