X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fuser.func.inc.php;h=7da7ada2c8e3b0dce0aeacd7df3bc1a180468c97;hb=47fe1bc45bf78554c0861a083609ec5674e41481;hp=00307704218e824bcec4ca66d90880b66b1e7634;hpb=d75f57dac58ca37ea8cd1b7849b0b879ad65c76f;p=platal.git diff --git a/include/user.func.inc.php b/include/user.func.inc.php index 0030770..7da7ada 100644 --- a/include/user.func.inc.php +++ b/include/user.func.inc.php @@ -82,227 +82,6 @@ function user_clear_all_subs($user_id, $really_del=true) } // }}} -// {{{ function get_user_login() - -// Defaut callback to call when a login is not found -function _default_user_callback($login) -{ - Platal::page()->trigError("Il n'y a pas d'utilisateur avec l'identifiant : $login"); - return; -} - -function _silent_user_callback($login) -{ - return; -} - -// Returns an unique identifier corresponding to the @p data. This piece of data -// can be a numerical id, an hruid, an email alias (any), or a redirection -// email address. If @p get_forlife is set to true, the user's forlife is -// returned, otherwise the user's hruid is returned. -// When no user is found, calls @p callback, and eventually returns false. -function get_user_login($data, $get_forlife = false, $callback = '_default_user_callback') -{ - global $globals; - - // In order to reduce the code size & complexity, we define once for all the - // field to be returned. By convention if will be "u.hruid" for the hruid - // (thus implying the auth_user_md5 will be aliased on u), and "a.alias" for - // the forlife (thus implying the forlife aliases table will be aliased on a). - $field = ($get_forlife ? "CONCAT(a.alias, '@" . $globals->mail->domain . "')" : "u.hruid"); - - // If $data is an integer, fetches directly the result. - if (is_numeric($data)) { - $res = XDB::query("SELECT $field - FROM auth_user_md5 AS u - LEFT JOIN aliases AS a ON (a.id = u.user_id AND type = 'a_vie') - WHERE u.user_id = {?}", $data); - if ($res->numRows()) { - return $res->fetchOneCell(); - } - - call_user_func($callback, $data); - return false; - } - - // Checks whether $data is a valid hruid or not. - $res = XDB::query("SELECT $field - FROM auth_user_md5 AS u - LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') - WHERE u.hruid = {?}", $data); - if ($res->numRows()) { - return $res->fetchOneCell(); - } - - // From now, $data can only by an email alias, or an email redirection. - // If it doesn't look like a valid address, appends the plat/al's main domain. - $data = trim(strtolower($data)); - if (strstr($data, '@')===false) { - $data = $data . '@' . $globals->mail->domain; - } - - // Checks if $data is a valid alias on the main domains. - list($mbox, $fqdn) = explode('@', $data); - if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) { - $res = XDB::query("SELECT $field - FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') - INNER JOIN aliases AS b ON (b.id = u.user_id AND b.type IN ('alias', 'a_vie')) - WHERE b.alias = {?}", $mbox); - if ($res->numRows()) { - return $res->fetchOneCell(); - } - - if (preg_match('/^(.*)\.([0-9]{4})$/u', $mbox, $matches)) { - $res = XDB::query("SELECT a.alias - FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') - INNER JOIN aliases AS b ON (b.id = u.user_id AND b.type IN ('alias', 'a_vie')) - WHERE b.alias = {?} AND u.promo = {?}", $matches[1], $matches[2]); - if ($res->numRows() == 1) { - return $res->fetchOneCell(); - } - } - - call_user_func($callback, $data); - return false; - - // Looks for $data as an email alias from the dedicated alias domain. - } elseif ($fqdn == $globals->mail->alias_dom || $fqdn == $globals->mail->alias_dom2) { - $res = XDB::query("SELECT redirect - FROM virtual_redirect - INNER JOIN virtual USING(vid) - WHERE alias = {?}", $mbox . '@' . $globals->mail->alias_dom); - if ($redir = $res->fetchOneCell()) { - list($alias, $alias_fqdn) = explode('@', $redir); - if ($get_forlife) { - // It might happen that the "secondary" forlife alias (the one - // based on the secondary domaine name) is used as a target; we - // then need to canonicalize it to the main domain. - if ($alias_fqdn == $globals->mail->domain2) { - return $alias . "@" . $globals->mail->domain; - } - return $redir; - } - - // We now have a valid alias, which has to be translated to an hruid. - $res = XDB::query("SELECT u.hruid - FROM auth_user_md5 AS u - LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type IN ('alias', 'a_vie')) - WHERE a.alias = {?}", $alias); - if ($res->numRows()) { - return $res->fetchOneCell(); - } - } - - call_user_func($callback, $data); - return false; - - // Otherwise, we do suppose $data is an email redirection. - } else { - $res = XDB::query("SELECT $field - FROM auth_user_md5 AS u - LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') - LEFT JOIN emails AS e ON (e.uid = u.user_id) - WHERE e.email = {?}", $data); - if ($res->numRows() == 1) { - return $res->fetchOneCell(); - } else if ($res->numRows() > 0) { - if (S::has_perms()) { - Platal::page()->trigError("Il y a $user_count utilisateurs avec cette adresse mail : " . join(', ', $res->fetchColumn())); - } else { - $res->free(); - } - } else { - call_user_func($callback, $data); - } - - return false; - } - - return false; -} - -// }}} -// {{{ function get_users_login_list() - -// Returns an array of valid forlife/hruid based on the @p members list. The -// list can be an array (in this case the ouput will retain the keys), or a -// space separated list. -// The @p strict indicates if the input alias should be retain in output when -// no valid forlife is found (incompatible with $get_forlife = false). -function get_users_login_list($members, $strict = false, $get_forlife = false, $callback = '_default_user_callback') -{ - if (!$get_forlife) { - $strict = true; - } - - if (!is_array($members)) { - if (strlen(trim($members)) == 0) { - return null; - } - $members = split("[; ,\r\n\|]+", $members); - } - - if ($members) { - $list = array(); - foreach ($members as $i => $alias) { - $alias = trim($alias); - if (empty($alias)) { - continue; - } - if (($login = get_user_login($alias, $get_forlife, $callback)) !== false) { - $list[$i] = $login; - } else if (!$strict) { - $list[$i] = $alias; - } else { - global $globals; - if (strpos($alias, '@') !== false) { - list($user, $dom) = explode('@', $alias); - if ($dom != $globals->mail->domain && $dom != $globals->mail->domain2) { - $list[$i] = $alias; - } - } - } - } - return $list; - } - return null; -} - -// }}} -// {{{ function get_user_forlife() - -function get_user_forlife($data, $callback = '_default_user_callback') -{ - return get_user_login($data, true, $callback); -} - -// }}} -// {{{ function get_users_forlife_list() - -function get_users_forlife_list($members, $strict = false, $callback = '_default_user_callback') -{ - return get_users_login_list($members, $strict, true, $callback); -} - -// }}} -// {{{ function get_user_hruid() - -function get_user_hruid($data, $callback = '_default_user_callback') -{ - return get_user_login($data, false, $callback); -} - -// }}} -// {{{ function get_users_hruid_list() - -function get_users_hruid_list($members, $strict = false, $callback = '_default_user_callback') -{ - return get_users_login_list($members, true, false, $callback); -} - -// }}} // {{{ function has_user_right() function has_user_right($pub, $view = 'private') { if ($pub == $view) return true; @@ -435,6 +214,7 @@ function get_user_details_adr($uid, $view = 'private') { gp.pays AS countrytxt,a.region, a.regiontxt, FIND_IN_SET('active', a.statut) AS active, a.adrid, FIND_IN_SET('res-secondaire', a.statut) AS secondaire, + FIND_IN_SET('courrier', a.statut) AS courier, a.pub, gp.display FROM adresses AS a LEFT JOIN geoloc_pays AS gp ON (gp.a2=a.country)