- $has_new = false;
- foreach ($sn_new as $typeid => $sn) {
- if (isset($sn['pub'])) {
- if (isset($sn_old[$typeid]) && ($sn_old[$typeid]['fullname'] == $sn['fullname'] && $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 ($update_new
- || (isset($sn_old[$typeid]) && compare_basename($sn_old[$typeid]['fullname'], $sn['fullname']))) {
- XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid)
- VALUES ({?}, {?}, {?}, {?})",
- $sn['particle'], $sn['name'], $typeid, $pid);
- unset($sn_old[$typeid]);
- } else {
- $has_new = true;
- }
- } else {
- if ($sn['fullname'] != '') {
- XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid)
- VALUES ('', {?}, {?}, {?})",
- $sn['fullname'], $typeid, $pid);
- }
- $i = 0;
- while (isset($sn[$i])) {
- XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid)
- VALUES ('', {?}, {?}, {?})",
- $sn[$i], $typeid, $pid);
- $i++;
- }
- }
- }
- if (count($sn_old) > 0) {
- if (!$update_new) {
- $has_new = true;
- foreach ($sn_old as $typeid => $sn) {
- XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid)
- VALUES ({?}, {?}, {?}, {?})",
- $sn['particle'], $sn['name'], $typeid, $pid);
- }
- } else {
- foreach ($sn_old as $typeid => $sn) {
- XDB::execute("DELETE FROM profile_name
- WHERE pid = {?} AND id = {?}",
- $pid, $sn['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_public_names AS ppn ON (ppn.pid = ap.pid)
+ INNER JOIN profile_display AS pd ON (pd.pid = ap.pid)
+ SET a.lastname = IF(ppn.lastname_ordinary = '', ppn.lastname_main, ppn.lastname_ordinary),
+ a.firstname = IF(ppn.firstname_ordinary = '', ppn.firstname_main, ppn.firstname_ordinary),
+ a.full_name = pd.short_name, a.directory_name = pd.directory_name
+ WHERE a.uid = {?}",
+ $uid);
+}
+
+function update_display_names(Profile $profile, array $public_names, array $private_names = null)
+{
+ if (is_null($private_names)) {
+ $private_names = XDB::fetchAllAssoc('SELECT type, name
+ FROM profile_private_names
+ WHERE pid = {?}
+ ORDER BY type, id',
+ $profile->id());