Merge commit 'origin/fusionax' into account
[platal.git] / include / user.func.inc.php
index 1f250f9..c1872ce 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2008 Polytechnique.org                              *
+ *  Copyright (C) 2003-2009 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -104,8 +104,10 @@ function get_not_registered_user($login, $iterator = false)
         return null;
     }
     @list($prenom, $nom, $promo) = explode('.', $login);
-    $where = 'REPLACE(REPLACE(REPLACE(nom, " ", ""), "-", ""), "\'", "") LIKE CONCAT("%", {?}, "%")
-          AND  REPLACE(REPLACE(REPLACE(prenom, " ", ""), "-", ""), "\'", "") LIKE CONCAT("%", {?}, "%")';
+    $where = 'REPLACE(REPLACE(REPLACE(nom, " ", ""), "-", ""), "\'", "")
+              LIKE CONCAT("%", REPLACE(REPLACE(REPLACE({?}, " ", ""), "-", ""), "\'", ""), "%")
+              AND  REPLACE(REPLACE(REPLACE(prenom, " ", ""), "-", ""), "\'", "")
+              LIKE CONCAT("%", REPLACE(REPLACE(REPLACE({?}, " ", ""), "-", ""), "\'", ""), "%")';
     if ($promo) {
         if (preg_match('/^[0-9]{2}$/', $promo)) {
             $where .= 'AND MOD(promo, 100) = {?}';
@@ -257,7 +259,7 @@ function get_user_details_adr($uid, $view = 'private') {
 
 function &get_user_details($login, $from_uid = '', $view = 'private')
 {
-    $reqsql = "SELECT  u.user_id, d.promo_display, u.prenom, u.nom, u.nom_usage, u.date, u.cv,
+    $reqsql = "SELECT  u.user_id, d.promo, u.prenom, u.nom, u.nom_usage, u.date, u.cv,
                        u.perms IN ('admin','user','disabled') AS inscrit,  FIND_IN_SET('femme', u.flags) AS sexe, u.deces != 0 AS dcd, u.deces,
                        q.profile_nick AS nickname, q.profile_from_ax, q.profile_freetext AS freetext,
                        q.profile_freetext_pub AS freetext_pub,
@@ -271,7 +273,7 @@ function &get_user_details($login, $from_uid = '', $view = 'private')
                        u.matricule_ax,
                        m.expertise != '' AS is_referent,
                        (COUNT(e.email) > 0 OR FIND_IN_SET('googleapps', u.mail_storage) > 0) AS actif,
-                       nd.display AS name_display, nd.tooltip AS name_tooltip
+                       d.public_name, d.private_name
                  FROM  auth_user_md5         AS u
            INNER JOIN  auth_user_quick       AS q   USING(user_id)
            INNER JOIN  aliases               AS a   ON (u.user_id = a.id AND a.type = 'a_vie')
@@ -285,8 +287,7 @@ function &get_user_details($login, $from_uid = '', $view = 'private')
             LEFT JOIN  photo                 AS p   ON (p.uid = u.user_id)
             LEFT JOIN  profile_mentor        AS m   ON (m.uid = u.user_id)
             LEFT JOIN  emails                AS e   ON (e.uid = u.user_id AND e.flags='active')
-           INNER JOIN  profile_names_display AS nd  ON (nd.user_id = u.user_id)
-           INNER JOIN  profile_display       AS d   ON (d.uid = u.user_id)
+           INNER JOIN  profile_display       AS d   ON (d.pid = u.user_id)
                 WHERE  a.alias = {?}
              GROUP BY  u.user_id";
     $res  = XDB::query($reqsql, $from_uid, $login);
@@ -599,8 +600,10 @@ function set_user_details_addresses($uid, $adrs) {
         $adrid = 0;
     }
     foreach ($adrs as $adr) {
-        add_user_address($uid, $adrid, $adr);
-        ++$adrid;
+        if (!@$adr['remove']) {
+            add_user_address($uid, $adrid, $adr);
+            ++$adrid;
+        }
     }
     require_once 'geoloc.inc.php';
     localize_addresses($uid);
@@ -618,8 +621,10 @@ function set_user_details_pro($uid, $pros)
         $entrid = 0;
     }
     foreach ($pros as $pro) {
-        add_user_pro($uid, $entrid, $pro);
-        ++$entrid;
+        if (!@$pro['remove']) {
+            add_user_pro($uid, $entrid, $pro);
+            ++$entrid;
+        }
     }
 }
 
@@ -681,57 +686,40 @@ function set_user_details($uid, $details) {
 // }}}
 // {{{ function _user_reindex
 
-function _user_reindex($uid, $keys, $muls, $pubs)
+function _user_reindex($uid, $keys)
 {
     foreach ($keys as $i => $key) {
-        if ($key == '') {
+        if ($key['name'] == '') {
             continue;
         }
-        $toks  = preg_split('/[ \'\-]+/', $key);
+        $toks  = preg_split('/[ \'\-]+/', $key['name']);
         $token = "";
         $first = 5;
         while ($toks) {
             $token = strtolower(replace_accent(array_pop($toks) . $token));
-            $score = ($toks ? 0 : 10 + $first) * $muls[$i];
+            $score = ($toks ? 0 : 10 + $first) * ($key['score'] / 10);
             XDB::execute("REPLACE INTO  search_name (token, uid, soundex, score, flags)
                                 VALUES  ({?}, {?}, {?}, {?}, {?})",
-                         $token, $uid, soundex_fr($token), $score, $pubs[$i] ? 'public' : '');
+                         $token, $uid, soundex_fr($token), $score, $key['public']);
             $first = 0;
         }
     }
-    $res = XDB::query("SELECT  nom_ini, nom, nom_usage, prenom_ini, prenom, promo, matricule
-                         FROM  auth_user_md5
-                        WHERE  user_id = {?}", $uid);
-    if (!$res->numRows()) {
-        unset($res);
-        return;
-    }
-    $array = $res->fetchOneRow();
-    $promo = intval(array_pop($array));
-    $mat   = array_shift($array);
-    array_walk($array, 'soundex_fr');
-    XDB::execute("REPLACE INTO  recherche_soundex
-                           SET  matricule = {?}, nom1_soundex = {?}, nom2_soundex= {?}, nom3_soundex = {?},
-                                prenom1_soundex = {?}, prenom2_soundex= {?}, promo = {?}",
-                 $mat, $array[0], $array[1], $array[2], $array[3], $array[4], $promo);
-    unset($res);
-    unset($array);
 }
 
 // }}}
 // {{{ function user_reindex
 
 function user_reindex($uid) {
-    XDB::execute("DELETE FROM search_name WHERE uid={?}", $uid);
-    $res = XDB::query("SELECT prenom, nom, nom_usage, profile_nick FROM auth_user_md5 INNER JOIN auth_user_quick USING(user_id) WHERE auth_user_md5.user_id = {?}", $uid);
-    if ($res->numRows()) {
-      _user_reindex($uid, $res->fetchOneRow(), array(1,1,1,0.2), array(true, true, true, false));
-    } else { // not in auth_user_quick => still "pending"
-      $res = XDB::query("SELECT prenom, nom, nom_usage FROM auth_user_md5 WHERE auth_user_md5.user_id = {?}", $uid);
-      if ($res->numRows()) {
-          _user_reindex($uid, $res->fetchOneRow(), array(1,1,1), array(true, true, true));
-      }
-    }
+    XDB::execute("DELETE FROM  search_name
+                        WHERE  uid = {?}",
+                 $uid);
+    $res = XDB::iterator("SELECT  CONCAT(n.particle, n.name) AS name, e.score,
+                                  FIND_IN_SET('public', e.flags) AS public
+                            FROM  profile_name      AS n
+                      INNER JOIN  profile_name_enum AS e ON (n.typeid = e.id)
+                           WHERE  n.pid = {?}",
+                         $uid);
+    _user_reindex($uid, $res);
 }
 
 // }}}