X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fname.func.inc.php;h=d9542635c48b4eadc1a0a03e7b85abdd416dea60;hb=ea9cfc3e5b2ff56855a3a63f6526026b421b32c4;hp=7b761da9f03fc9caac4c6d49e0b3575f856e2dcf;hpb=e8a7cf31258ca08662a91f7db64f17d056d8a6a4;p=platal.git diff --git a/include/name.func.inc.php b/include/name.func.inc.php index 7b761da..d954263 100644 --- a/include/name.func.inc.php +++ b/include/name.func.inc.php @@ -126,7 +126,7 @@ function build_private_name(&$search_names, &$sn_types) $i++; } if (isset($search_names[$sn_types['name_other']]) - || isset($search_names[$sn_types['name_other']])) { + || isset($search_names[$sn_types['firstname_other']])) { $name .= ", "; } } @@ -189,7 +189,7 @@ function build_sort_name(&$search_names, &$sn_types) return $name; } -function set_profile_display(&$display_names, $pid) +function set_profile_display(&$display_names, Profile $profile) { XDB::execute("UPDATE profile_display SET public_name = {?}, private_name = {?}, @@ -197,7 +197,15 @@ function set_profile_display(&$display_names, $pid) WHERE pid = {?}", $display_names['public_name'], $display_names['private_name'], $display_names['directory_name'], $display_names['short_name'], - $display_names['sort_name'], $pid); + $display_names['sort_name'], $profile->id()); + + $owner = $profile->owner(); + if ($owner) { + XDB::execute('UPDATE accounts + SET full_name = {?}, directory_name = {?} + WHERE uid = {?}', + $display_names['public_name'], $display_names['directory_name'], $owner->id()); + } } function build_sn_pub($pid) @@ -220,6 +228,25 @@ function build_sn_pub($pid) return $sn_old; } +/** Transform a name to its canonical value so it can be compared + * to another form (different case, with accents or with - instead + * of blanks). + * @see compare_basename to compare + */ +function name_to_basename($value) { + $value = mb_strtoupper(replace_accent($value)); + return preg_replace('/[^A-Z]/', ' ', $value); +} + +/** Compares two strings and check if they are two forms of the + * same name (different case, with accents or with - instead of + * blanks). + * @see name_to_basename to retreive the compared string + */ +function compare_basename($a, $b) { + 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) { $has_new = false; @@ -232,7 +259,7 @@ function set_alias_names(&$sn_new, $sn_old, $pid, $uid, $update_new = false, $ne $sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], $pid); unset($sn_old[$typeid]); } elseif ($update_new - || (isset($sn_old[$typeid]) && $sn_old[$typeid]['fullname'] == $sn['fullname'])) { + || (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);