From dced83b45e8da9e0c03077d0ecca37749bc05289 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Wed, 14 Jan 2009 07:31:04 +0100 Subject: [PATCH] Adds name validation and new alias creation. --- htdocs/javascript/profile.js | 1 - include/name.func.inc.php | 180 ++++++++++++++++----- .../{nomusage.inc.php => names.inc.php} | 97 ++++++----- modules/profile.php | 46 +----- modules/profile/general.inc.php | 107 ++++++------ ...orm.valid.nomusage.tpl => form.valid.names.tpl} | 28 ++-- templates/profile/nomusage.tpl | 131 --------------- 7 files changed, 267 insertions(+), 323 deletions(-) rename include/validations/{nomusage.inc.php => names.inc.php} (50%) rename templates/include/{form.valid.nomusage.tpl => form.valid.names.tpl} (75%) delete mode 100644 templates/profile/nomusage.tpl diff --git a/htdocs/javascript/profile.js b/htdocs/javascript/profile.js index b54277f..b882b2d 100644 --- a/htdocs/javascript/profile.js +++ b/htdocs/javascript/profile.js @@ -155,7 +155,6 @@ function updateNameDisplay() for (var i = 0; i < 10; i++) { if ($('#search_name_' + i).find(':text').val()) { searchnames += $('#search_name_' + i).find('[name*=typeid]').val() + ';'; - searchnames += $('#search_name_' + i).find(':checked').length-1 + ';'; searchnames += $('#search_name_' + i).find(':text').val() + ';;'; } } diff --git a/include/name.func.inc.php b/include/name.func.inc.php index 53d4241..968e251 100644 --- a/include/name.func.inc.php +++ b/include/name.func.inc.php @@ -19,36 +19,39 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -function build_names_display($data) +function build_javascript_names($data) { $data_array = explode(';;', $data); $n = count($data_array); $n--; for ($i = 0; $i < $n; $i++) { $searchname = explode(';', $data_array[$i]); - if ($searchname[1] != 0) { - list($particle, $name) = explode(' ', $searchname[2], 2); - if (!$name) { - list($particle, $name) = explode('\'', $searchname[2], 2); - } - } else { - $particle = ''; - $name = $searchname[2]; - } - if (!isset($search_names[$searchname[0]])) { - $search_names[$searchname[0]] = array($searchname[2], $name); + if (isset($search_names[$searchname[0]])) { + $search_names[$searchname[0]][] = $searchname[1]; } else { - $search_names[$searchname[0]] = array_merge($search_names[$searchname[0]], array($name)); + $search_names[$searchname[0]] = array('fullname' => $searchname[1]); } } + $sn_types_public = build_types('public'); $sn_types_private = build_types('private'); $full_name = build_full_name($search_names, $sn_types_public); return build_public_name($search_names, $sn_types_public, $full_name) . ';' . - build_private_name($search_names, $sn_types_private); + build_private_name($search_names, $sn_types_private); +} + +function build_display_names(&$display_names, $search_names, $private_name_end = null, &$alias = null) +{ + $sn_types_public = build_types('public'); + $full_name = build_full_name($search_names, $sn_types_public); + $display_names['public_name'] = build_public_name($search_names, $sn_types_public, $full_name); + $display_names['private_name'] = $display_names['public_name'] . $private_name_end; + $display_names['directory_name'] = build_directory_name($search_names, $sn_types_public, $full_name); + $display_names['short_name'] = build_short_name($search_names, $sn_types_public, $alias); + $display_names['sort_name'] = build_sort_name($search_names, $sn_types_public); } -function build_types($pub) +function build_types($pub = null) { if ($pub == 'public') { $sql_pub = "AND FIND_IN_SET('public', flags)"; @@ -63,7 +66,11 @@ function build_types($pub) $sn_types = XDB::iterator($sql); $types = array(); while ($sn_type = $sn_types->next()) { - $types[$sn_type['name']] = $sn_type['id']; + if ($pub) { + $types[$sn_type['name']] = $sn_type['id']; + } else { + $types[$sn_type['id']] = $sn_type['name']; + } } return $types; } @@ -72,10 +79,10 @@ function build_full_name(&$search_names, &$sn_types) { $name = ""; if (isset($search_names[$sn_types['Nom usuel']])) { - $name .= $search_names[$sn_types['Nom usuel']][0] . " (" - . $search_names[$sn_types['Nom patronymique']][0] . ")"; + $name .= $search_names[$sn_types['Nom usuel']]['fullname'] . " (" + . $search_names[$sn_types['Nom patronymique']]['fullname'] . ")"; } else { - $name .= $search_names[$sn_types['Nom patronymique']][0]; + $name .= $search_names[$sn_types['Nom patronymique']]['fullname']; } if (isset($search_names[$sn_types['Nom marital']]) || isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) { @@ -87,13 +94,13 @@ function build_full_name(&$search_names, &$sn_types) } else { $name .= "M "; } - $name .= $search_names[$sn_types['Nom marital']][0]; + $name .= $search_names[$sn_types['Nom marital']]['fullname']; if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) { $name .= ", "; } } if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) { - $name .= $search_names[$sn_types['Pseudonyme (nom de plume)']][0]; + $name .= $search_names[$sn_types['Pseudonyme (nom de plume)']]['fullname']; } $name .= ")"; } @@ -102,7 +109,7 @@ 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']][0] . " " . $full_name; + return $search_names[$sn_types['Prénom']]['fullname'] . " " . $full_name; } function build_private_name(&$search_names, &$sn_types) @@ -113,8 +120,8 @@ function build_private_name(&$search_names, &$sn_types) || isset($search_names[$sn_types['Autre nom']]))) { $name .= " ("; if (isset($search_names[$sn_types['Surnom']])) { - $name .= "alias " . $search_names[$sn_types['Surnom']][0]; - $i = 2; + $name .= "alias " . $search_names[$sn_types['Surnom']]['fullname']; + $i = 0; while (isset($search_names[$sn_types['Surnom']][$i])) { $name .= ", " . $search_names[$sn_types['Surnom']][$i]; $i++; @@ -125,8 +132,8 @@ function build_private_name(&$search_names, &$sn_types) } } if (isset($search_names[$sn_types['Autre prénom']])) { - $name .= "autres prénoms : " . $search_names[$sn_types['Autre prénom']][0]; - $i = 2; + $name .= "autres prénoms : " . $search_names[$sn_types['Autre prénom']]['fullname']; + $i = 0; while (isset($search_names[$sn_types['Autre prénom']][$i])) { $name .= ", " . $search_names[$sn_types['Autre prénom']][$i]; $i++; @@ -136,8 +143,8 @@ function build_private_name(&$search_names, &$sn_types) } } if (isset($search_names[$sn_types['Autre nom']])) { - $name .= "autres noms : " . $search_names[$sn_types['Autre nom']][0]; - $i = 2; + $name .= "autres noms : " . $search_names[$sn_types['Autre nom']]['fullname']; + $i = 0; while (isset($search_names[$sn_types['Autre nom']][$i])) { $name .= ", " . $search_names[$sn_types['Autre nom']][$i]; $i++; @@ -150,37 +157,128 @@ 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']][0]; + return $full_name . " " . $search_names[$sn_types['Prénom']]['fullname']; } -function short_name(&$search_names, &$sn_types) +function build_short_name(&$search_names, &$sn_types, &$alias = null) { - $name = ""; if (isset($search_names[$sn_types['Nom usuel']])) { - $name .= $search_names[$sn_types['Nom usuel']][0]; + $lastname = $search_names[$sn_types['Nom usuel']]['fullname']; } else { - $name .= $search_names[$sn_types['Nom patronymique']][0]; + $lastname = $search_names[$sn_types['Nom patronymique']]['fullname']; } - $name = " "; if (isset($search_names[$sn_types['Prénom usuel']])) { - $name .= $search_names[$sn_types['Prénom usuel']][0]; + $firstname = $search_names[$sn_types['Prénom usuel']]['fullname']; } else { - $name .= $search_names[$sn_types['Prénom']][0]; + $firstname = $search_names[$sn_types['Prénom']]['fullname']; } - return $name; + if ($alias) { + $alias = make_username($firstname, $lastname); + } + return $firstname . " " . $lastname; } -function sort_name(&$search_names, &$sn_types) +function build_sort_name(&$search_names, &$sn_types) { $name = ""; if (isset($search_names[$sn_types['Nom usuel']])) { - $name .= $search_names[$sn_types['Nom usuel']][1]; + $name .= $search_names[$sn_types['Nom usuel']]['name']; } else { - $name .= $search_names[$sn_types['Nom patronymique']][1]; + $name .= $search_names[$sn_types['Nom patronymique']]['name']; } - $name .= $search_names[$sn_types['Prénom']][0]; + $name .= " " . $search_names[$sn_types['Prénom']]['fullname']; return $name; } +function set_profile_display(&$display_names) +{ + 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'], S::v('uid')); +} + +function build_sn_pub() +{ + $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) + 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')); + $sn_old = array(); + while ($old = $res->next()) { + $sn_old[$old['typeid']] = array('fullname' => $old['fullname'], + 'name' => $old['name'], + 'particle' => $old['particle'], + 'id' => $old['id']); + } + return $sn_old; +} + +function set_alias_names(&$sn_new, $sn_old, $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 + SET particle = {?}, name = {?}, typeid = {?} + WHERE id = {?} AND pid = {?}", + $sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], S::i('uid')); + 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) + VALUES ({?}, {?}, {?}, {?})", + $sn['particle'], $sn['name'], $typeid, S::i('uid')); + unset($sn_old[$typeid]); + } else { + $has_new = true; + } + } else { + if ($sn['fullname'] != '') { + XDB::execute("INSERT INTO profile_name_search (particle, name, typeid, pid) + VALUES ('', {?}, {?}, {?})", + $sn['fullname'], $typeid, S::i('uid')); + } + } + } + if (count($sn_old) > 0) { + if (!$update_new) { + $has_new = true; + foreach ($sn_old as $typeid => $sn) { + XDB::execute("INSERT INTO profile_name_search (particle, name, typeid, pid) + VALUES ({?}, {?}, {?}, {?})", + $sn['particle'], $sn['name'], $typeid, S::i('uid')); + } + } else { + foreach ($sn_old as $typeid => $sn) { + XDB::execute("DELETE FROM profile_name_search + WHERE pid = {?} AND id = {?}", + S::i('uid'), $sn['id']); + } + } + } + if ($update_new) { + XDB::execute("DELETE FROM aliases + WHERE FIND_IN_SET('usage', flags) AND id = {?}", + S::i('uid')); + } + if ($new_alias) { + XDB::execute("INSERT INTO aliases (alias, type, flags, id) + VALUES ({?}, 'alias', 'usage', {?})", + $new_alias, S::i('uid')); + } + /*require_once('user.func.inc.php'); + user_reindex($uid);*/ + return $has_new; +} + // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?> diff --git a/include/validations/nomusage.inc.php b/include/validations/names.inc.php similarity index 50% rename from include/validations/nomusage.inc.php rename to include/validations/names.inc.php index 77b964b..b5b62ff 100644 --- a/include/validations/nomusage.inc.php +++ b/include/validations/names.inc.php @@ -19,50 +19,57 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -// {{{ class UsageReq +// {{{ class NamesReq4 -class UsageReq extends Validate +class NamesReq extends Validate { // {{{ properties public $unique = true; - public $nom_usage; - public $alias = ''; + public $sn_old; + public $sn_new; + public $display_names; + public $old_alias; + public $new_alias; + public $sn_types; - public $oldusage; - public $oldalias; - - public $homonyme; - public $reason; - - public $rules = "Refuser - tout ce qui n'est visiblement pas un nom de famille (ce qui est - extremement rare car à peu près n'importe quoi peut être un nom de - famille...)"; + public $rules = "Refuser tout ce qui n'est visiblement pas un nom de famille (ce qui est extremement rare car à peu près n'importe quoi peut être un nom de famille)."; // }}} // {{{ constructor - public function __construct(User &$_user, $_usage, $_reason) + public function __construct(User &$_user, $_search_names, $_private_name_end) { parent::__construct($_user, true, 'usage'); - $this->nom_usage = $_usage; - $this->reason = $_reason; - - $res = XDB::query("SELECT prenom FROM auth_user_md5 WHERE user_id = {?}", $this->user->id()); - $this->alias = make_username($res->fetchOneCell(), $this->nom_usage); - if (!$this->nom_usage) { - $this->alias = ""; + require_once 'name.func.inc.php'; + + $this->sn_types = build_types(); + $this->sn_old = build_sn_pub(); + $this->sn_new = $_search_names; + $this->new_alias = true; + $this->display_names = array(); + + build_display_names($this->display_names, $_search_names, $_private_name_end, $this->new_alias); + foreach ($this->sn_new AS $key => &$sn) { + if (!isset($sn['pub'])) { + unset($this->sn_new[$key]); + } + } + $res = XDB::query("SELECT alias + FROM aliases + WHERE id = {?} AND type = 'alias' AND FIND_IN_SET('usage', flags)", + $this->user->id()); + $this->old_alias = $res->fetchOneCell(); + if ($this->old_alias != $this->new_alias) { + $res = XDB::query("SELECT id + FROM aliases + WHERE alias = {?}", + $this->new_alias); + if ($res->fetchOneCell()) { + $this->new_alias = null; + } } - - $res = XDB::query(" - SELECT e.alias, u.nom_usage, a.id - FROM auth_user_md5 as u - LEFT JOIN aliases as e ON(e.type='alias' AND FIND_IN_SET('usage',e.flags) AND e.id = u.user_id) - LEFT JOIN aliases as a ON(a.alias = {?} AND a.id != u.user_id) - WHERE u.user_id = {?}", $this->alias, $this->user->id()); - list($this->oldalias, $this->oldusage, $this->homonyme) = $res->fetchOneRow(); } // }}} @@ -70,7 +77,7 @@ class UsageReq extends Validate public function formu() { - return 'include/form.valid.nomusage.tpl'; + return 'include/form.valid.names.tpl'; } // }}} @@ -78,7 +85,7 @@ class UsageReq extends Validate protected function _mail_subj() { - return "[Polytechnique.org/USAGE] Changement de nom d'usage"; + return "[Polytechnique.org/NOMS] Changement de noms"; } // }}} @@ -88,23 +95,25 @@ class UsageReq extends Validate { global $globals; if ($isok) { - $res = " Le changement de nom d'usage que tu as demandé vient d'être effectué."; - if ($this->oldalias) { - $res .= "\n\n Les alias {$this->oldalias}@{$globals->mail->domain} et @{$globals->mail->domain2} ont été supprimés."; - } - if ($this->nom_usage) { - $res .= "\n\n Les alias {$this->alias}@{$globals->mail->domain} et @{$globals->mail->domain2} sont maintenant à ta disposition !"; + $res = " Le changement de nom que tu as demandé vient d'être effectué."; + if ($this->old_alias != $this->new_alias) { + if ($this->old_alias) { + $res .= "\n\n Les alias {$this->old_alias}@{$globals->mail->domain} et @{$globals->mail->domain2} ont été supprimés."; + } + if ($this->new_alias) { + $res .= "\n\n Les alias {$this->new_alias}@{$globals->mail->domain} et @{$globals->mail->domain2} sont maintenant à ta disposition !"; + } } if ($globals->mailstorage->googleapps_domain) { require_once 'googleapps.inc.php'; $account = new GoogleAppsAccount($this->user); if ($account->active()) { - $res .= "\n\n Si tu utilises Google Apps, tu peux changer ton nom d'usage sur https://mail.google.com/a/polytechnique.org/#settings/accounts"; + $res .= "\n\n Si tu utilises Google Apps, tu peux changer ton nom d'usage sur https://mail.google.com/a/polytechnique.org/#settings/accounts."; } } return $res; } else { - return " La demande de changement de nom d'usage que tu avais faite a été refusée."; + return " La demande de changement de nom que tu avais faite a été refusée."; } } @@ -114,9 +123,11 @@ class UsageReq extends Validate public function commit() { require_once 'notifs.inc.php'; - register_watch_op($this->user->id(), WATCH_FICHE, '', 'nom'); - require_once('user.func.inc.php'); - set_new_usage($this->user->id(), $this->nom_usage, $this->alias); + require_once('name.func.inc.php'); + + register_watch_op($this->user->id(), WATCH_FICHE, '', 'search_names'); + set_profile_display($this->display_names); + set_alias_names($this->sn_new, $this->sn_old, true, $this->new_alias); return true; } diff --git a/modules/profile.php b/modules/profile.php index 66343b5..da107c2 100644 --- a/modules/profile.php +++ b/modules/profile.php @@ -48,7 +48,6 @@ class ProfileModule extends PLModule 'profile/medal' => $this->make_hook('medal', AUTH_PUBLIC), 'profile/name_info' => $this->make_hook('name_info', AUTH_PUBLIC), 'profile/orange' => $this->make_hook('p_orange', AUTH_MDP), - 'profile/usage' => $this->make_hook('p_usage', AUTH_MDP), 'referent' => $this->make_hook('referent', AUTH_COOKIE), 'emploi' => $this->make_hook('ref_search', AUTH_COOKIE), @@ -556,7 +555,7 @@ class ProfileModule extends PLModule header('Content-Type: text/html; charset=utf-8'); $page->changeTpl('profile/general.buildnames.tpl', NO_SKIN); require_once 'name.func.inc.php'; - $page->assign('names', build_names_display($data)); + $page->assign('names', build_javascript_names($data)); } function handler_p_orange(&$page) @@ -745,49 +744,6 @@ class ProfileModule extends PLModule $page->assign('list', $it); } - function handler_p_usage(&$page) - { - $page->changeTpl('profile/nomusage.tpl'); - - require_once 'validations.inc.php'; - - $res = XDB::query( - "SELECT u.nom, u.nom_usage, u.flags, e.alias - FROM auth_user_md5 AS u - LEFT JOIN aliases AS e ON(u.user_id = e.id - AND FIND_IN_SET('usage', e.flags)) - WHERE user_id={?}", S::v('uid')); - - list($nom, $usage_old, $flags, $alias_old) = $res->fetchOneRow(); - $flags = new PlFlagSet($flags); - $page->assign('usage_old', $usage_old); - $page->assign('alias_old', $alias_old); - - $nom_usage = replace_accent(trim(Env::v('nom_usage'))); - $nom_usage = strtoupper($nom_usage); - $page->assign('usage_req', $nom_usage); - - if (Env::has('submit') && ($nom_usage != $usage_old)) { - S::assert_xsrf_token(); - - // on vient de recevoir une requete, differente de l'ancien nom d'usage - if ($nom_usage == $nom) { - $page->trigWarning('Le nom d\'usage que tu demandes est identique à ton nom à l\'X, ' - . 'aucune modification n\'a donc été effectuée.'); - $page->assign('same', true); - } else { // le nom de mariage est distinct du nom à l'X - // on calcule l'alias pour l'afficher - $reason = Env::v('reason'); - if ($reason == 'other') { - $reason = Env::v('other_reason'); - } - $myusage = new UsageReq(S::user(), $nom_usage, $reason); - $myusage->submit(); - $page->assign('myusage', $myusage); - } - } - } - function handler_xnet(&$page) { $page->changeTpl('profile/groupesx.tpl'); diff --git a/modules/profile/general.inc.php b/modules/profile/general.inc.php index 7fd9816..3de46fb 100644 --- a/modules/profile/general.inc.php +++ b/modules/profile/general.inc.php @@ -21,11 +21,8 @@ class ProfileSearchNames implements ProfileSetting { - private $public_name; - private $private_name; - private $directory_name; - private $short_name; - private $sort_name; + private $private_name_end; + private $search_names; private function matchWord($old, $new, $newLen) { return ($i = strpos($old, $new)) !== false @@ -42,8 +39,8 @@ class ProfileSearchNames implements ProfileSetting private function prepare(ProfilePage &$page, $field, $value, $init, &$success) { $success = true; - $ini = $this->prepareField($init); - $new = $this->prepareField($value); + $ini = $this->prepareField($init); + $new = $this->prepareField($value); $newLen = strlen($new); $success = $this->matchWord($ini, $new, $newLen) || ($field == 'Nom patronymique' && $new == 'DE ' . $ini); @@ -57,7 +54,7 @@ class ProfileSearchNames implements ProfileSetting public function value(ProfilePage &$page, $field, $value, &$success) { - $success = true; + $success = true; $success_tmp = true; if (is_null($value)) { $sn_all = XDB::iterator("SELECT CONCAT(sn.particle, sn.name) AS name, @@ -105,71 +102,81 @@ class ProfileSearchNames implements ProfileSetting $initial = array(); $initial['Nom patronymique'] = $res[0]['particle'] . $res[0]['name']; $initial['Prénom'] = $res[1]['name']; - $search_names = array(); - foreach ($value as $key => &$sn) { + $this->search_names = array(); + foreach ($value as &$sn) { $sn['name'] = trim($sn['name']); if ($sn['type'] == 'Prénom' || $sn['type'] == 'Nom patronymique') { $sn['name'] = $this->prepare($page, $sn['type'], $sn['name'], $initial[$sn['type']], $success_tmp); $success = $success && $success_tmp; } + if ($sn['pub']) { + if (isset($sn['particle']) && ($sn['particle'] != '')) { + list($particle, $name) = explode(' ', $sn['name'], 2); + $particle = trim($particle) . ' '; + if (!$name) { + list($particle, $name) = explode('\'', $sn['name'], 2); + $particle = trim($particle); + } + } else { + $particle = ''; + $name = $sn['name']; + } + } if ($sn['name'] != '') { - if (!isset($search_names[$sn['typeid']])) { - $search_names[$sn['typeid']] = array($sn['name'], $name); + if ($sn['pub']) { + $this->search_names[$sn['typeid']] = array('fullname' => $sn['name'], + 'name' => $name, + 'particle' => $particle, + 'pub' => $sn['pub']); } else { - $search_names[$sn['typeid']] = array_merge($search_names[$sn['typeid']], array($name)); + if (isset($this->search_names[$sn['typeid']])) { + $this->search_names[$sn['typeid']][] = $sn['name']; + } else { + $this->search_names[$sn['typeid']] = array('fullname' => $sn['name']); + } } } } - require_once 'name.func.inc.php'; - $sn_types_public = build_types('public'); - $sn_types_private = build_types('private'); - $full_name = build_full_name($search_names, $sn_types_public); - $this->directory_name = build_directory_name($search_names, $sn_types_public, $full_name); - $this->short_name = short_name($search_names, $sn_types_public); - $this->sort_name = short_name($search_names, $sn_types_public); - $this->public_name = build_public_name($search_names, $sn_types_public, $full_name); - $this->private_name = $this->public_name . build_private_name($search_names, $sn_types_private); - Platal::page()->assign('public_name', $this->public_name); - Platal::page()->assign('private_name', $this->private_name); + $res = XDB::query("SELECT public_name, private_name + FROM profile_display + WHERE pid = {?}", + S::v('uid')); + list($public_name, $private_name) = $res->fetchOneRow(); + if ($success) { + require_once 'name.func.inc.php'; + $sn_types_private = build_types('private'); + $this->private_name_end = build_private_name($this->search_names, $sn_types_private); + $private_name = $public_name . $this->private_name_end; + } + Platal::page()->assign('public_name', $public_name); + Platal::page()->assign('private_name', $private_name); } return $value; } public function save(ProfilePage &$page, $field, $value) { + require_once 'name.func.inc.php'; + $sn_old = build_sn_pub(); XDB::execute("DELETE FROM s USING profile_name_search AS s INNER JOIN profile_name_search_enum AS e ON (s.typeid = e.id) WHERE s.pid = {?} AND NOT FIND_IN_SET('not_displayed', e.flags)", S::i('uid')); - foreach ($value as $sn) { - if ($sn['name'] != '') { - if ($sn['particle']) { - list($particle, $name) = explode(' ', $sn['name'], 2); - $particle = trim($particle) . ' '; - if (!$name) { - list($particle, $name) = explode('\'', $sn['name'], 2); - $particle = trim($particle); - } - } else { - $particle = ''; - $name = $sn['name']; - } - $name = trim($name); - XDB::execute("INSERT INTO profile_name_search (particle, name, typeid, pid) - VALUES ({?}, {?}, {?}, {?})", - $particle, $name, $sn['typeid'], S::i('uid')); - } + $has_new = set_alias_names($this->search_names, $sn_old); + + // Only requires validation if modification in public names + if ($has_new) { + $new_names = new NamesReq(S::user(), $this->search_names, $this->private_name_end); + $new_names->submit(); + Platal::page()->trigWarning("La demande de modification de tes noms a bien été prises en compte." . + " Tu recevras un email dès que ces changements auront été effectués."); + } else { + $display_names = array(); + build_display_names($display_names, $this->search_names, $this->private_name_end); + set_profile_display($display_names); } - XDB::execute("UPDATE profile_display - SET public_name = {?}, private_name = {?}, - directory_name = {?}, short_name = {?}, sort_name = {?} - WHERE pid = {?}", - $this->public_name, $this->private_name, $this->directory_name, - $this->short_name, $this->sort_name, S::v('uid')); - /*require_once('user.func.inc.php'); - user_reindex(S::v('uid'));*/ } } diff --git a/templates/include/form.valid.nomusage.tpl b/templates/include/form.valid.names.tpl similarity index 75% rename from templates/include/form.valid.nomusage.tpl rename to templates/include/form.valid.names.tpl index 7f034b3..4e9d58b 100644 --- a/templates/include/form.valid.nomusage.tpl +++ b/templates/include/form.valid.names.tpl @@ -22,25 +22,29 @@ - Nom d'usage : - {$valid->nom_usage} + Ancien alias : + {$valid->old_alias} - Nouvel alias : - {$valid->alias|default:"suppression"} + Nouvel alias : + {$valid->new_alias} +{foreach from=$valid->sn_new item=sn key=typeid} - Raison : - {$valid->reason} + *{$valid->sn_types.$typeid} : + {$sn.name} -{if $valid->homonyme} +{/foreach} +{foreach from=$valid->sn_old item=sn key=typeid} - - Probleme d'homonymie ! - {$valid->homonyme} - + †{$valid->sn_types.$typeid} : + {$sn.name} + +{/foreach} + + + * nouveau nom ; † ancien nom -{/if} {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *} diff --git a/templates/profile/nomusage.tpl b/templates/profile/nomusage.tpl deleted file mode 100644 index edefb1d..0000000 --- a/templates/profile/nomusage.tpl +++ /dev/null @@ -1,131 +0,0 @@ -{**************************************************************************} -{* *} -{* Copyright (C) 2003-2009 Polytechnique.org *} -{* http://opensource.polytechnique.org/ *} -{* *} -{* This program is free software; you can redistribute it and/or modify *} -{* it under the terms of the GNU General Public License as published by *} -{* the Free Software Foundation; either version 2 of the License, or *} -{* (at your option) any later version. *} -{* *} -{* This program is distributed in the hope that it will be useful, *} -{* but WITHOUT ANY WARRANTY; without even the implied warranty of *} -{* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *} -{* GNU General Public License for more details. *} -{* *} -{* You should have received a copy of the GNU General Public License *} -{* along with this program; if not, write to the Free Software *} -{* Foundation, Inc., *} -{* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *} -{* *} -{**************************************************************************} - -

Nom d'usage

- -{if $same} -

- Tu peux soit refaire une demande de nom d'usage, soit retourner à l'édition de ton profil. -

-{else} - {if $myusage} - {if $usage_old} -

- Ta demande de suppression de ton nom d'usage ainsi que de tes - alias {$alias_old}@{#globals.mail.domain#} et - {$alias_old}@{#globals.mail.domain2#} a bien été enregistrée. -

- {/if} - - {if $myusage->alias} -

- Ta demande d'ajout de ton nom d'usage a bien été enregistrée. Sa - validation engendrera la création des alias - {$myusage->alias}@{#globals.mail.domain#} et - {$myusage->alias}@{#globals.mail.domain2#}. -

- {/if} - -

- Tu recevras un email dès que les changements demandés auront été effectués. - Encore merci de nous faire confiance pour tes emails ! -

- - {else} - -

-Le nom d'usage est un patronyme qui doit être reconnu par la - loi (nom du conjoint, d'un de ses parents, ou bien plus -exceptionnellement sur changement de l'état civil, ...). -

- -

-Les surnoms sont systématiquement refusés. Pour -utiliser une adresse personnalisée, il faut se tourner vers -l'alias @{#globals.mail.alias_dom#}. -

- -

- Afin d'être joignable à la fois sous ton nom à l'X et sous ton nom d'usage, tu peux - saisir ici ce dernier. Il apparaîtra alors dans l'annuaire et tu disposeras - des adresses correspondantes @{#globals.mail.domain#} et @{#globals.mail.domain2#}, en plus de - celles que tu possèdes déjà. -

- -
- -{literal} -
-{/literal} - {xsrf_token_field} - - - - - - - - - - - - - - - - -
Nom d'usage
- - -
Raison du changement de nom
-
- {if $usage_old} -
- {/if} -
-
- -
- {if !$usage_old} - - {else} - - - {/if} -
-
- {/if} -{/if} - - -{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *} -- 2.1.4