From: Stéphane Jacob Date: Mon, 18 Apr 2011 15:17:38 +0000 (+0200) Subject: Adds first and last names to accounts. X-Git-Tag: xorg/1.1.1~90 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=b7753795d0f18daffebc809da1db886365dc461c;p=platal.git Adds first and last names to accounts. Signed-off-by: Stéphane Jacob --- diff --git a/classes/user.php b/classes/user.php index cc82689..801fe39 100644 --- a/classes/user.php +++ b/classes/user.php @@ -159,7 +159,7 @@ class User extends PlUser $uids = array_map(array('XDB', 'escape'), $uids); - return XDB::iterator('SELECT a.uid, a.hruid, a.registration_date, h.uid IS NOT NULL AS homonym, + return XDB::iterator('SELECT a.uid, a.hruid, a.registration_date, h.uid IS NOT NULL AS homonym, a.firstname, a.lastname, IF(ef.email IS NULL, NULL, CONCAT(ef.email, \'@\', mf.name)) AS forlife, IF(ef.email IS NULL, NULL, CONCAT(ef.email, \'@\', df.name)) AS forlife_alternate, IF(eb.email IS NULL, NULL, CONCAT(eb.email, \'@\', mb.name)) AS bestalias, diff --git a/include/name.func.inc.php b/include/name.func.inc.php index d2cbe65..2c9b079 100644 --- a/include/name.func.inc.php +++ b/include/name.func.inc.php @@ -317,6 +317,28 @@ function set_alias_names(&$sn_new, $sn_old, $pid, PlUser $user, $update_new = fa WHERE name = {?}', $new_alias, $user->id(), $user->mainEmailDomain()); } + + // 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 = {?}', + $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 = {?}', + $user->id()); + Profile::rebuildSearchTokens($pid, false); return $has_new; } diff --git a/modules/admin.php b/modules/admin.php index a8e62eb..fd22950 100644 --- a/modules/admin.php +++ b/modules/admin.php @@ -450,15 +450,27 @@ class AdminModule extends PLModule $to_update['weak_password'] = null; } else if (Post::has('update_account')) { if (!$user->hasProfile()) { - if (Post::s('full_name') != $user->fullName()) { - $to_update['full_name'] = Post::s('full_name'); + $name_update = false; + if (Post::s('lastname') != $user->lastname) { + $to_update['lastname'] = Post::s('lastname'); + $name_update = true; + } + if (Post::s('type') != 'virtual' && Post::s('firstname') != $user->firstname) { + $to_update['firstname'] = Post::s('firstname'); + $name_update = true; + } + if ($name_update) { + if (Post::s('type') != 'virtual') { + $to_update['full_name'] = Post::s('firstname') . ' ' . Post::s('lastname'); + $to_update['directory_name'] = mb_strtoupper(Post::s('lastname')) . ' ' . Post::s('firstname'); + } else { + $to_update['full_name'] = Post::s('lastname'); + $to_update['directory_name'] = mb_strtoupper(Post::s('lastname')); + } } if (Post::s('display_name') != $user->displayName()) { $to_update['display_name'] = Post::s('display_name'); } - if (Post::s('directory_name') != $user->directoryName()) { - $to_update['directory_name'] = Post::s('directory_name'); - } } if (Post::s('sex') != ($user->isFemale() ? 'female' : 'male')) { $to_update['sex'] = Post::s('sex'); diff --git a/modules/xnet.php b/modules/xnet.php index 12c961c..bd95e38 100644 --- a/modules/xnet.php +++ b/modules/xnet.php @@ -395,11 +395,14 @@ Email envoyé à " . Post::t('login')); } // Update user info + $full_name = Post::t('firstname') . ' ' . Post::t('lastname'); + $directory_name = mb_strtoupper(Post::t('lastname')) . ' ' . Post::t('firstname'); XDB::query('UPDATE accounts SET full_name = {?}, directory_name = {?}, display_name = {?}, - sex = {?}, email = {?} + firstname = {?}, lastname = {?}, sex = {?}, email = {?} WHERE uid = {?}', - Post::t('full_name'), Post::t('directory_name'), Post::t('display_name'), + $full_name, $directory_name, Post::t('display_name'), + Post::t('firstname'), Post::t('lastname'), (Post::t('sex') == 'male') ? 'male' : 'female', Post::t('email'), $user->id()); if (XDB::affectedRows()) { require_once 'emails.inc.php'; diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 7b46cfd..6b06bcd 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -719,7 +719,8 @@ class XnetGrpModule extends PLModule if (empty($user)) { $parts = explode('.', $mbox); if (count($parts) == 1) { - $display_name = $full_name = $directory_name = ucfirst($mbox); + $lastname = $display_name = $full_name = $directory_name = ucfirst($mbox); + $firstname = ''; } else { $firstname = ucfirst($parts[0]); $lastname = ucwords(implode(' ', array_slice($parts, 1))); @@ -727,9 +728,9 @@ class XnetGrpModule extends PLModule $full_name = "$firstname $lastname"; $directory_name = strtoupper($lastname) . " " . $firstname; } - XDB::execute('INSERT INTO accounts (hruid, display_name, full_name, directory_name, email, type, state) + XDB::execute('INSERT INTO accounts (hruid, display_name, full_name, directory_name, firstname, lastname, email, type, state) VALUES ({?}, {?}, {?}, {?}, {?}, \'xnet\', \'disabled\')', - $hruid, $display_name, $full_name, $directory_name, $email); + $hruid, $display_name, $full_name, $directory_name, $firstname, $lastname, $email); $user = User::get($hruid); } @@ -1007,11 +1008,21 @@ class XnetGrpModule extends PLModule $email_changed = (!$user->profile() && strtolower($user->forlifeEmail()) != strtolower(Post::v('email'))); $from_email = $user->forlifeEmail(); if ($user->type == 'virtual' || ($user->type == 'xnet' && !$user->perms)) { + $lastname = Post::s('lastname'); + if (Post::s('type') != 'virtual') { + $firstname = Post::s('firstname'); + $full_name = $firstname . ' ' . $lastname; + $directory_name = mb_strtoupper($lastname) . ' ' . $firstname; + } else { + $firstname = ''; + $full_name = $lastname; + $directory_name = mb_strtoupper($lastname); + } XDB::query('UPDATE accounts SET full_name = {?}, directory_name = {?}, display_name = {?}, - sex = {?}, email = {?}, type = {?} + firstname = {?}, lastname = {?}, sex = {?}, email = {?}, type = {?} WHERE uid = {?}', - Post::t('full_name'), Post::t('directory_name'), Post::t('display_name'), + $full_name, $directory_name, Post::t('display_name'), $firstname, $lastname, (Post::t('sex') == 'male') ? 'male' : 'female', Post::t('email'), (Post::t('type') == 'xnet') ? 'xnet' : 'virtual', $user->id()); } else if (!$user->perms) { diff --git a/templates/admin/user.tpl b/templates/admin/user.tpl index b369443..c3b7c64 100644 --- a/templates/admin/user.tpl +++ b/templates/admin/user.tpl @@ -137,21 +137,31 @@ $(function() { - Nom complet
- Prénom NOM - - {if $hasProfile}{$user->fullName()}{else}{/if} + Nom complet + {$user->fullName()} - Nom annuaire
- NOM Prénom - - {if $hasProfile}{$user->directoryName()}{else}{/if} + Nom annuaire + {$user->directoryName()} + {if !$hasProfile} + + Nom + + + {if $user->type neq 'virtual'} + + Prénom + + + {/if} + {/if} + {if $user->type neq 'virtual'} Nom affiché {if $hasProfile}{$user->displayName()}{else}{/if} + {/if} Sexe diff --git a/templates/xnet/edit.tpl b/templates/xnet/edit.tpl index d1bd875..30d2d50 100644 --- a/templates/xnet/edit.tpl +++ b/templates/xnet/edit.tpl @@ -27,28 +27,31 @@
{xsrf_token_field} - - + + + + + + + + + - + - + diff --git a/templates/xnetgrp/membres-edit.tpl b/templates/xnetgrp/membres-edit.tpl index a3347d2..c7ac026 100644 --- a/templates/xnetgrp/membres-edit.tpl +++ b/templates/xnetgrp/membres-edit.tpl @@ -102,30 +102,34 @@ - type eq "virtual"}style="display: none"{/if}> - + + + + + + + + + + + {if $user->type neq "virtual"} - + - + + {/if} type eq "virtual"}style="display: none"{/if}>
- Nom affiché : -
Nom complet :{$user->fullName()}
Nom annuaire :{$user->directoryName()}
Nom : - +
- Nom complet : - Prénom : - +
- Nom annuaire : + Nom affiché : - +
- Nom affiché : -
Nom complet :{$user->fullName()}
Nom annuaire :{$user->directoryName()}
Nom : - +
- Nom complet : - Prénom : - +
- Nom annuaire : - Nom affiché : - +
Sexe : diff --git a/upgrade/1.1.1/06_accounts.sql b/upgrade/1.1.1/06_accounts.sql new file mode 100644 index 0000000..4327491 --- /dev/null +++ b/upgrade/1.1.1/06_accounts.sql @@ -0,0 +1,21 @@ +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 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'); + +-- vim:set syntax=mysql: diff --git a/upgrade/1.1.1/accounts.php b/upgrade/1.1.1/accounts.php new file mode 100644 index 0000000..3d2f35a --- /dev/null +++ b/upgrade/1.1.1/accounts.php @@ -0,0 +1,34 @@ +#!/usr/bin/php5 +debug = 0; // Do not store backtraces. + +$it = XDN::rawIterator('SELECT uid, full_name, email, type + FROM accounts + WHERE type NOT IN (\'x\', \'master\', \'phd\')'); +while ($item = $it->next()) { + if ($item['type'] == 'virtual') { + $firstname = ''; + $lastname = $item['full_name']; + } elseif (strpos(' ', $item['full_name'])) { + list($firstname, $lastname) = explode(' ', $item['full_name']); + } else { + list($local_part, ) = explode('@', strtolower($item['email'])); + $parts = explode('.', $local_part); + if (count($parts) == 1) { + $lastname = ucfirst($local_part); + $firstname = ''; + } else { + $firstname = ucfirst($parts[0]); + $lastname = ucwords(implode(' ', array_slice($parts, 1))); + } + } + XDB::execute('UPDATE accounts + SET firstname = {?}, lastname = {?}', + $firstname, $lastname); +} + +/* vim:set et sw=4 sts=4 ts=4: */ +?>