Can't search nickname on public search
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Mon, 23 Apr 2007 17:33:39 +0000 (17:33 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Mon, 23 Apr 2007 17:33:39 +0000 (17:33 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1732 839d8a87-29fc-0310-9880-83ba4fa771e5

bin/search.rebuild_db.php
include/user.func.inc.php
modules/search/classes.inc.php
upgrade/0.9.14/06_search.sql

index 829d032..9d46bdf 100755 (executable)
@@ -32,9 +32,10 @@ $res = XDB::iterRow('SELECT  auth_user_md5.user_id, nom, prenom, nom_usage, prof
                   LEFT JOIN auth_user_quick USING(user_id)');
 $i = 0;
 $muls = array(1, 1, 1, 0.2);
+$pub  = array(true, true, true, false);
 while ($tmp = $res->next()) {
     $uid = array_shift($tmp);
-    _user_reindex($uid, $tmp, $muls);
+    _user_reindex($uid, $tmp, $muls, $pub);
     printf("\r%u / %u",  ++$i, $res->total());
 }
 
index ae26305..03e437e 100644 (file)
@@ -730,7 +730,7 @@ function set_user_details($uid, $details) {
 // }}}
 // {{{ function _user_reindex
 
-function _user_reindex($uid, $keys, $muls)
+function _user_reindex($uid, $keys, $muls, $pubs)
 {
     foreach ($keys as $i => $key) {
         if ($key == '') {
@@ -742,9 +742,9 @@ function _user_reindex($uid, $keys, $muls)
         while ($toks) {
             $token = strtolower(replace_accent(array_pop($toks) . $token));
             $score = ($toks ? 0 : 10 + $first) * $muls[$i];
-            XDB::execute("REPLACE INTO  search_name (token, uid, soundex, score)
-                                VALUES  ({?}, {?}, {?}, {?})",
-                         $token, $uid, soundex_fr($token), $score);
+            XDB::execute("REPLACE INTO  search_name (token, uid, soundex, score, flags)
+                                VALUES  ({?}, {?}, {?}, {?}, {?})",
+                         $token, $uid, soundex_fr($token), $score, $pubs[$i] ? 'public' : '');
             $first = 0;
         }
     }
@@ -774,11 +774,11 @@ 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));
+      _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));
+          _user_reindex($uid, $res->fetchOneRow(), array(1,1,1), array(true, true, true));
       }
     }
 }
index d4405c0..e650e57 100644 (file)
@@ -284,8 +284,12 @@ class QuickSearch extends SField
     function get_select_statement()
     {
         $join = "";
+        $and  = '';
         foreach ($this->strings as $i => $s) {
-            $join .= "INNER JOIN search_name AS sn$i ON (u.user_id = sn$i.uid)\n";
+            if (!S::logged()) {
+                $and = "AND FIND_IN_SET('public', sn$i.flags)";
+            } 
+            $join .= "INNER JOIN search_name AS sn$i ON (u.user_id = sn$i.uid $and)\n";
         }
         return $join;
     }
index e47a7c4..32b6d7a 100644 (file)
@@ -1,4 +1,5 @@
 alter table search_name add column soundex char(4) not null;
 alter table search_name add key soundex (soundex);
+alter table search_name add flags set('public') not null default '';
 
 # vim:set syntax=mysql: