Oops, I pushed too fast. These are a fexs fixes to last commit.
authorStéphane Jacob <sj@m4x.org>
Mon, 18 Apr 2011 20:07:27 +0000 (22:07 +0200)
committerStéphane Jacob <sj@m4x.org>
Mon, 18 Apr 2011 20:07:27 +0000 (22:07 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
include/name.func.inc.php
upgrade/1.1.1/06_accounts.sql
upgrade/1.1.1/accounts.php [changed mode: 0644->0755]

index 2c9b079..1f78daf 100644 (file)
@@ -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);
index 4327491..2919fa3 100644 (file)
@@ -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:
old mode 100644 (file)
new mode 100755 (executable)
index 3d2f35a..59d9f7f
@@ -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: */
 ?>