<?php
/***************************************************************************
- * Copyright (C) 2003-2010 Polytechnique.org *
+ * Copyright (C) 2003-2011 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
return $sn_old;
}
+/** Splits a name into tokens, as used in search_name.
+ * Used for search_name rebuilding and for queries.
+ */
+function split_name_for_search($name) {
+ return preg_split('/[[:space:]\'\-]+/', strtolower(replace_accent($name)),
+ -1, PREG_SPLIT_NO_EMPTY);
+}
+
/** Transform a name to its canonical value so it can be compared
* to another form (different case, with accents or with - instead
* of blanks).
return name_to_basename($a) == name_to_basename($b);
}
-function set_alias_names(&$sn_new, $sn_old, $pid, $uid, $update_new = false, $new_alias = null)
+function set_alias_names(&$sn_new, $sn_old, $pid, PlUser $user, $update_new = false, $new_alias = null)
{
$has_new = false;
foreach ($sn_new as $typeid => $sn) {
- if (isset($sn['pub'])) {
+ if (isset($sn['pub']) && !is_null($sn['fullname'])) {
if (isset($sn_old[$typeid]) && $update_new) {
XDB::execute("UPDATE profile_name
SET particle = {?}, name = {?}, typeid = {?}
WHERE id = {?} AND pid = {?}",
$sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], $pid);
unset($sn_old[$typeid]);
+ } elseif ($sn['fullname'] == $sn_old[$typeid]['fullname'] && $sn['name'] == $sn_old[$typeid]['name']) {
+ XDB::execute('INSERT INTO profile_name (particle, name, typeid, pid)
+ VALUES ({?}, {?}, {?}, {?})',
+ $sn_old[$typeid]['particle'], $sn_old[$typeid]['name'], $typeid, $pid);
+ unset($sn_old[$typeid]);
} else {
$has_new = true;
}
}
}
if ($update_new) {
- XDB::execute("DELETE FROM aliases
- WHERE FIND_IN_SET('usage', flags) AND uid = {?}",
- $uid);
+ XDB::execute('DELETE FROM email_source_account
+ WHERE FIND_IN_SET(\'usage\', flags) AND uid = {?} AND type = \'alias\'',
+ $user->id());
}
if ($new_alias) {
- XDB::execute("INSERT INTO aliases (alias, type, flags, uid)
- VALUES ({?}, 'alias', 'usage', {?})",
- $new_alias, $uid);
+ XDB::execute('INSERT INTO email_source_account (email, uid, type, flags, domain)
+ SELECT {?}, {?}, \'alias\', \'usage\', id
+ FROM email_virtual_domains
+ 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 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 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);
return $has_new;
}