X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fname.func.inc.php;h=d9542635c48b4eadc1a0a03e7b85abdd416dea60;hb=bdbda592dfa0fe34eb359adf1f90082ec313b8fb;hp=968e251e7db882b5710423d401ffd1ea73e302ee;hpb=dced83b45e8da9e0c03077d0ecca37749bc05289;p=platal.git diff --git a/include/name.func.inc.php b/include/name.func.inc.php index 968e251..d954263 100644 --- a/include/name.func.inc.php +++ b/include/name.func.inc.php @@ -1,6 +1,6 @@ next()) { if ($pub) { - $types[$sn_type['name']] = $sn_type['id']; + $types[$sn_type['type']] = $sn_type['id']; } else { - $types[$sn_type['id']] = $sn_type['name']; + $types[$sn_type['id']] = $sn_type['name']; } } return $types; } -function build_full_name(&$search_names, &$sn_types) +function build_full_name(&$search_names, &$sn_types, $isFemale) { $name = ""; - if (isset($search_names[$sn_types['Nom usuel']])) { - $name .= $search_names[$sn_types['Nom usuel']]['fullname'] . " (" - . $search_names[$sn_types['Nom patronymique']]['fullname'] . ")"; + if (isset($search_names[$sn_types['lastname_ordinary']])) { + $name .= $search_names[$sn_types['lastname_ordinary']]['fullname'] . " (" + . $search_names[$sn_types['lastname']]['fullname'] . ")"; } else { - $name .= $search_names[$sn_types['Nom patronymique']]['fullname']; + $name .= $search_names[$sn_types['lastname']]['fullname']; } - if (isset($search_names[$sn_types['Nom marital']]) - || isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) { + if (isset($search_names[$sn_types['lastname_marital']]) + || isset($search_names[$sn_types['pseudonym']])) { $name .= " ("; - if (isset($search_names[$sn_types['Nom marital']])) { - $user = S::user(); - if ($user->isFemale()) { + if (isset($search_names[$sn_types['lastname_marital']])) { + if ($isFemale) { $name .= "Mme "; } else { $name .= "M "; } - $name .= $search_names[$sn_types['Nom marital']]['fullname']; - if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) { + $name .= $search_names[$sn_types['lastname_marital']]['fullname']; + if (isset($search_names[$sn_types['pseudonym']])) { $name .= ", "; } } - if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) { - $name .= $search_names[$sn_types['Pseudonyme (nom de plume)']]['fullname']; + if (isset($search_names[$sn_types['pseudonym']])) { + $name .= $search_names[$sn_types['pseudonym']]['fullname']; } $name .= ")"; } @@ -109,44 +108,44 @@ function build_full_name(&$search_names, &$sn_types) function build_public_name(&$search_names, &$sn_types, $full_name) { - return $search_names[$sn_types['Prénom']]['fullname'] . " " . $full_name; + return $search_names[$sn_types['firstname']]['fullname'] . " " . $full_name; } function build_private_name(&$search_names, &$sn_types) { $name = ""; - if (isset($search_names[$sn_types['Surnom']]) - || (isset($search_names[$sn_types['Autre prénom']]) - || isset($search_names[$sn_types['Autre nom']]))) { + if (isset($search_names[$sn_types['nickname']]) + || (isset($search_names[$sn_types['name_other']]) + || isset($search_names[$sn_types['name_other']]))) { $name .= " ("; - if (isset($search_names[$sn_types['Surnom']])) { - $name .= "alias " . $search_names[$sn_types['Surnom']]['fullname']; + if (isset($search_names[$sn_types['nickname']])) { + $name .= "alias " . $search_names[$sn_types['nickname']]['fullname']; $i = 0; - while (isset($search_names[$sn_types['Surnom']][$i])) { - $name .= ", " . $search_names[$sn_types['Surnom']][$i]; + while (isset($search_names[$sn_types['nickname']][$i])) { + $name .= ", " . $search_names[$sn_types['nickname']][$i]; $i++; } - if (isset($search_names[$sn_types['Autre prénom']]) - || isset($search_names[$sn_types['Autre nom']])) { + if (isset($search_names[$sn_types['name_other']]) + || isset($search_names[$sn_types['firstname_other']])) { $name .= ", "; } } - if (isset($search_names[$sn_types['Autre prénom']])) { - $name .= "autres prénoms : " . $search_names[$sn_types['Autre prénom']]['fullname']; + if (isset($search_names[$sn_types['firstname_other']])) { + $name .= "autres prénoms : " . $search_names[$sn_types['firstname_other']]['fullname']; $i = 0; - while (isset($search_names[$sn_types['Autre prénom']][$i])) { - $name .= ", " . $search_names[$sn_types['Autre prénom']][$i]; + while (isset($search_names[$sn_types['firstname_other']][$i])) { + $name .= ", " . $search_names[$sn_types['firstname_other']][$i]; $i++; } - if (isset($search_names[$sn_types['Autre nom']])) { + if (isset($search_names[$sn_types['name_other']])) { $name .= ", "; } } - if (isset($search_names[$sn_types['Autre nom']])) { - $name .= "autres noms : " . $search_names[$sn_types['Autre nom']]['fullname']; + if (isset($search_names[$sn_types['name_other']])) { + $name .= "autres noms : " . $search_names[$sn_types['name_other']]['fullname']; $i = 0; - while (isset($search_names[$sn_types['Autre nom']][$i])) { - $name .= ", " . $search_names[$sn_types['Autre nom']][$i]; + while (isset($search_names[$sn_types['name_other']][$i])) { + $name .= ", " . $search_names[$sn_types['name_other']][$i]; $i++; } } @@ -157,23 +156,23 @@ function build_private_name(&$search_names, &$sn_types) function build_directory_name(&$search_names, &$sn_types, $full_name) { - return $full_name . " " . $search_names[$sn_types['Prénom']]['fullname']; + return $full_name . " " . $search_names[$sn_types['firstname']]['fullname']; } function build_short_name(&$search_names, &$sn_types, &$alias = null) { - if (isset($search_names[$sn_types['Nom usuel']])) { - $lastname = $search_names[$sn_types['Nom usuel']]['fullname']; + if (isset($search_names[$sn_types['lastname_ordinary']])) { + $lastname = $search_names[$sn_types['lastname_ordinary']]['fullname']; } else { - $lastname = $search_names[$sn_types['Nom patronymique']]['fullname']; + $lastname = $search_names[$sn_types['lastname']]['fullname']; } - if (isset($search_names[$sn_types['Prénom usuel']])) { - $firstname = $search_names[$sn_types['Prénom usuel']]['fullname']; + if (isset($search_names[$sn_types['firstname_ordinary']])) { + $firstname = $search_names[$sn_types['firstname_ordinary']]['fullname']; } else { - $firstname = $search_names[$sn_types['Prénom']]['fullname']; + $firstname = $search_names[$sn_types['firstname']]['fullname']; } if ($alias) { - $alias = make_username($firstname, $lastname); + $alias = PlUser::makeUserName($firstname, $lastname); } return $firstname . " " . $lastname; } @@ -181,16 +180,16 @@ function build_short_name(&$search_names, &$sn_types, &$alias = null) function build_sort_name(&$search_names, &$sn_types) { $name = ""; - if (isset($search_names[$sn_types['Nom usuel']])) { - $name .= $search_names[$sn_types['Nom usuel']]['name']; + if (isset($search_names[$sn_types['lastname_ordinary']])) { + $name .= $search_names[$sn_types['lastname_ordinary']]['name']; } else { - $name .= $search_names[$sn_types['Nom patronymique']]['name']; + $name .= $search_names[$sn_types['lastname']]['name']; } - $name .= " " . $search_names[$sn_types['Prénom']]['fullname']; + $name .= " " . $search_names[$sn_types['firstname']]['fullname']; return $name; } -function set_profile_display(&$display_names) +function set_profile_display(&$display_names, Profile $profile) { XDB::execute("UPDATE profile_display SET public_name = {?}, private_name = {?}, @@ -198,19 +197,27 @@ function set_profile_display(&$display_names) WHERE pid = {?}", $display_names['public_name'], $display_names['private_name'], $display_names['directory_name'], $display_names['short_name'], - $display_names['sort_name'], S::v('uid')); + $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() +function build_sn_pub($pid) { $res = XDB::iterator("SELECT CONCAT(sn.particle, sn.name) AS fullname, sn.typeid, sn.particle, sn.name, sn.id - FROM profile_name_search AS sn - INNER JOIN profile_name_search_enum AS e ON (e.id = sn.typeid) + FROM profile_name AS sn + INNER JOIN profile_name_enum AS e ON (e.id = sn.typeid) WHERE sn.pid = {?} AND NOT FIND_IN_SET('not_displayed', e.flags) AND FIND_IN_SET('public', e.flags) ORDER BY NOT FIND_IN_SET('always_displayed', e.flags), e.id, sn.name", - S::i('uid')); + $pid); $sn_old = array(); while ($old = $res->next()) { $sn_old[$old['typeid']] = array('fullname' => $old['fullname'], @@ -221,31 +228,57 @@ function build_sn_pub() return $sn_old; } -function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = null) +/** 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; 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_search + XDB::execute("UPDATE profile_name SET particle = {?}, name = {?}, typeid = {?} WHERE id = {?} AND pid = {?}", - $sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], S::i('uid')); + $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'])) { - XDB::execute("INSERT INTO profile_name_search (particle, name, typeid, pid) + || (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, S::i('uid')); + $sn['particle'], $sn['name'], $typeid, $pid); unset($sn_old[$typeid]); } else { $has_new = true; } } else { if ($sn['fullname'] != '') { - XDB::execute("INSERT INTO profile_name_search (particle, name, typeid, pid) + XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid) VALUES ('', {?}, {?}, {?})", - $sn['fullname'], $typeid, S::i('uid')); + $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++; } } } @@ -253,30 +286,29 @@ function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = nu if (!$update_new) { $has_new = true; foreach ($sn_old as $typeid => $sn) { - XDB::execute("INSERT INTO profile_name_search (particle, name, typeid, pid) + XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid) VALUES ({?}, {?}, {?}, {?})", - $sn['particle'], $sn['name'], $typeid, S::i('uid')); + $sn['particle'], $sn['name'], $typeid, $pid); } } else { foreach ($sn_old as $typeid => $sn) { - XDB::execute("DELETE FROM profile_name_search + XDB::execute("DELETE FROM profile_name WHERE pid = {?} AND id = {?}", - S::i('uid'), $sn['id']); + $pid, $sn['id']); } } } if ($update_new) { XDB::execute("DELETE FROM aliases - WHERE FIND_IN_SET('usage', flags) AND id = {?}", - S::i('uid')); + WHERE FIND_IN_SET('usage', flags) AND uid = {?}", + $uid); } if ($new_alias) { - XDB::execute("INSERT INTO aliases (alias, type, flags, id) + XDB::execute("INSERT INTO aliases (alias, type, flags, uid) VALUES ({?}, 'alias', 'usage', {?})", - $new_alias, S::i('uid')); + $new_alias, $uid); } - /*require_once('user.func.inc.php'); - user_reindex($uid);*/ + Profile::rebuildSearchTokens($pid); return $has_new; }