// 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);
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:
$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']));
$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: */
?>