- 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']);
- }
- }
+ $display_names = build_display_names($public_names, $private_names, $profile->isFemale());
+
+ XDB::execute('UPDATE profile_display
+ SET public_name = {?}, private_name = {?},
+ directory_name = {?}, short_name = {?}, sort_name = {?}
+ WHERE pid = {?}',
+ $display_names['public_name'], $display_names['private_name'],
+ $display_names['directory_name'], $display_names['short_name'],
+ $display_names['sort_name'], $profile->id());
+
+ Profile::rebuildSearchTokens($profile->id(), false);
+
+ if ($profile->owner()) {
+ update_account_from_profile($profile->owner()->id());
+ }
+}
+
+function update_public_names($pid, array $public_names)
+{
+ XDB::execute('UPDATE profile_public_names
+ SET lastname_main = {?}, lastname_marital = {?}, lastname_ordinary = {?},
+ firstname_main = {?}, firstname_ordinary = {?}, pseudonym = {?}
+ WHERE pid = {?}',
+ $public_names['lastname_main'], $public_names['lastname_marital'], $public_names['lastname_ordinary'],
+ $public_names['firstname_main'], $public_names['firstname_ordinary'], $public_names['pseudonym'], $pid);
+}
+
+// Returns the @p name with all letters in lower case, but the first one.
+function mb_ucfirst($name)
+{
+ return mb_strtoupper(mb_substr($name, 0, 1)) . mb_substr($name, 1);
+}
+
+// Capitalizes the @p name using French typographic rules. Returns
+// false when capitalization rule is not known for the name format.
+function capitalize_name($name)
+{
+ // Some suffixes should not be captitalized either, eg 's' in Bennett's.
+ static $suffixes = array('h', 's', 't');
+
+ // Extracts the first token of the name.
+ if (!preg_match('/^(\pL+)(([\' -])(.*))?$/ui', $name, $m)) {
+ return false;
+ }
+
+ $token = mb_strtolower($m[1]);
+ $separator = (isset($m[3]) ? $m[3] : false);
+ $tail = (isset($m[4]) ? $m[4] : false);
+
+ // Special case for "Malloc'h".
+ if ($separator == "'" && in_array(strtolower($tail[0]), $suffixes) &&
+ (strlen($tail) == 1 || $tail[1] == ' ')) {
+ $token .= "'" . strtolower($tail[0]);
+ $separator = (strlen($tail) == 1 ? false : $tail[1]);
+ $tail = (strlen($tail) > 2 ? substr($tail, 2) : false);