$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,
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;
}
$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');
}
// 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';
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)));
$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);
}
$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) {
</th>
</tr>
<tr>
- <td class="titre">Nom complet<br />
- <span class="smaller">Prénom NOM</span>
- </td>
- <td>{if $hasProfile}{$user->fullName()}{else}<input type="text" name="full_name" maxlength="255" value="{$user->fullName()}" />{/if}</td>
+ <td class="titre">Nom complet</td>
+ <td>{$user->fullName()}</td>
</tr>
<tr>
- <td class="titre">Nom annuaire<br />
- <span class="smaller">NOM Prénom</span>
- </td>
- <td>{if $hasProfile}{$user->directoryName()}{else}<input type="text" name="directory_name" maxlength="255" value="{$user->directoryName()}" />{/if}</td>
+ <td class="titre">Nom annuaire</td>
+ <td>{$user->directoryName()}</td>
</tr>
+ {if !$hasProfile}
+ <tr>
+ <td class="titre">Nom</td>
+ <td><input type="text" name="lastname" maxlength="255" value="{$user->lastname}" /></td>
+ </tr>
+ {if $user->type neq 'virtual'}
+ <tr>
+ <td class="titre">Prénom</td>
+ <td><input type="text" name="firstname" maxlength="255" value="{$user->firstname}" /></td>
+ </tr>
+ {/if}
+ {/if}
+ {if $user->type neq 'virtual'}
<tr>
<td class="titre">Nom affiché</td>
<td>{if $hasProfile}{$user->displayName()}{else}<input type="text" name="display_name" maxlength="255" value="{$user->displayName()}" />{/if}</td>
</tr>
+ {/if}
<tr>
<td class="titre">Sexe</td>
<td>
<form method="post" action="{$platal->ns}edit">
{xsrf_token_field}
<table cellpadding="0" cellspacing="0" class='tinybicol'>
- <tr id="prenom" class="impair">
- <td class="titre">
- Nom affiché :
- </td>
+ <tr class="impair">
+ <td class="titre">Nom complet :</td>
+ <td>{$user->fullName()}</td>
+ </tr>
+ <tr class="impair">
+ <td class="titre">Nom annuaire :</td>
+ <td>{$user->directoryName()}</td>
+ <tr class="impair">
+ <td class="titre">Nom :</td>
<td>
- <input type="text" value="{$user->displayName()}" name="display_name" size="40" />
+ <input type="text" value="{$user->lastname}" name="lastname" size="40" />
</td>
</tr>
<tr class="impair">
- <td class="titre">
- Nom complet :
- </td>
+ <td class="titre">Prénom :</td>
<td>
- <input type="text" value="{$user->fullName()}" name="full_name" size="40" />
+ <input type="text" value="{$user->firstname}" name="firstname" size="40" />
</td>
</tr>
- <tr class="impair">
+ <tr id="prenom" class="impair">
<td class="titre">
- Nom annuaire :
+ Nom affiché :
</td>
<td>
- <input type="text" value="{$user->directoryName()}" name="directory_name" size="40" />
+ <input type="text" value="{$user->displayName()}" name="display_name" size="40" />
</td>
</tr>
<tr id="sexe" class="impair">
</select>
</td>
</tr>
- <tr id="prenom" class="impair" {if $user->type eq "virtual"}style="display: none"{/if}>
- <td class="titre">
- Nom affiché :
- </td>
+ <tr class="impair">
+ <td class="titre">Nom complet :</td>
+ <td>{$user->fullName()}</td>
+ </tr>
+ <tr class="impair">
+ <td class="titre">Nom annuaire :</td>
+ <td>{$user->directoryName()}</td>
+ </tr>
+ <tr class="impair">
+ <td class="titre">Nom :</td>
<td>
- <input type="text" value="{$user->displayName()}" name="display_name" size="40" />
+ <input type="text" value="{$user->lastname}" name="lastname" size="40" />
</td>
</tr>
+ {if $user->type neq "virtual"}
<tr class="impair">
- <td class="titre">
- Nom complet :
- </td>
+ <td class="titre">Prénom :</td>
<td>
- <input type="text" value="{$user->fullName()}" name="full_name" size="40" />
+ <input type="text" value="{$user->firstname}" name="firstname" size="40" />
</td>
</tr>
<tr class="impair">
- <td class="titre">
- Nom annuaire :
- </td>
+ <td class="titre">Nom affiché :</td>
<td>
- <input type="text" value="{$user->directoryName()}" name="directory_name" size="40" />
+ <input type="text" value="{$user->displayName()}" name="display_name" size="40" />
</td>
</tr>
+ {/if}
<tr id="sexe" class="impair" {if $user->type eq "virtual"}style="display: none"{/if}>
<td class="titre">
Sexe :
--- /dev/null
+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:
--- /dev/null
+#!/usr/bin/php5
+<?php
+
+require_once 'connect.db.inc.php';
+
+$globals->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: */
+?>