Some clean up.
[platal.git] / modules / search / classes.inc.php
index af91c2a..d51ebe3 100644 (file)
@@ -19,8 +19,6 @@
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-require_once("xorg.misc.inc.php");
-
 // {{{ Global variables used for the search Queries
 
 @$globals->search->result_fields = '
@@ -32,10 +30,14 @@ require_once("xorg.misc.inc.php");
     u.perms != \'pending\' AS wasinscrit,
     FIND_IN_SET(\'femme\', u.flags) AS sexe,
     a.alias AS forlife,
-    ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
-    ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
+    ede0.name AS eduname0, ede0.url AS eduurl0, edd0.degree AS edudegree0, edu0.grad_year AS edugrad_year0, f0.field AS edufield0,
+    ede1.name AS eduname1, ede1.url AS eduurl1, edd1.degree AS edudegree1, edu1.grad_year AS edugrad_year1, f1.field AS edufield1,
+    ede2.name AS eduname2, ede2.url AS eduurl2, edd2.degree AS edudegree2, edu2.grad_year AS edugrad_year2, f2.field AS edufield2,
+    ede3.name AS eduname3, ede3.url AS eduurl3, edd3.degree AS edudegree3, edu3.grad_year AS edugrad_year3, f3.field AS edufield3,
     es.label AS secteur, ef.fonction_fr AS fonction,
-    IF(n.nat=\'\',n.pays,n.nat) AS nat, n.a2 AS iso3166,
+    IF(n1.nat=\'\',n1.pays,n1.nat) AS nat1, n1.a2 AS iso3166_1,
+    IF(n2.nat=\'\',n2.pays,n2.nat) AS nat2, n2.a2 AS iso3166_2,
+    IF(n3.nat=\'\',n3.pays,n3.nat) AS nat3, n3.a2 AS iso3166_3,
     (COUNT(em.email) > 0 OR FIND_IN_SET("googleapps", u.mail_storage) > 0) AS actif,';
 // hide private information if not logged
 if (S::logged())
@@ -48,27 +50,41 @@ if (S::logged())
 else
     $globals->search->result_fields .="
         IF(q.profile_freetext_pub='public', q.profile_freetext, '') AS freetext,
-        IF(adr.pub='public', adr.city, '') AS city,
-        IF(adr.pub='public', gp.pays, '') AS countrytxt,
-        IF(adr.pub='public', gr.name, '') AS region,
+        IF(adr.pub='public', adr.city, '')   AS city,
+        IF(adr.pub='public', gp.pays, '')    AS countrytxt,
+        IF(adr.pub='public', gr.name, '')    AS region,
         IF(e.pub='public', e.entreprise, '') AS entreprise,
-        IF(nw.pub='public', nw.address, '') AS networking_address,
-        IF(nw.pub='public', nwe.name, '') AS networking_name,";
+        IF(nw.pub='public', nw.address, '')  AS networking_address,
+        IF(nw.pub='public', nwe.name, '')    AS networking_name,";
 @$globals->search->result_where_statement = '
-    LEFT JOIN  applis_ins              AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
-    LEFT JOIN  applis_def              AS ad0 ON (ad0.id = ai0.aid)
-    LEFT JOIN  applis_ins              AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
-    LEFT JOIN  applis_def              AS ad1 ON (ad1.id = ai1.aid)
-    LEFT JOIN  entreprises             AS e   ON (e.entrid = 0 AND e.uid = u.user_id)
-    LEFT JOIN  emploi_secteur          AS es  ON (e.secteur = es.id)
-    LEFT JOIN  fonctions_def           AS ef  ON (e.fonction = ef.id)
-    LEFT JOIN  geoloc_pays             AS n   ON (u.nationalite = n.a2)
-    LEFT JOIN  adresses                AS adr ON (u.user_id = adr.uid AND FIND_IN_SET(\'active\',adr.statut))
-    LEFT JOIN  geoloc_pays             AS gp  ON (adr.country = gp.a2)
-    LEFT JOIN  geoloc_region           AS gr  ON (adr.country = gr.a2 AND adr.region = gr.region)
-    LEFT JOIN  emails                  AS em  ON (em.uid = u.user_id AND em.flags = \'active\')
-    LEFT JOIN  profile_networking      AS nw  ON (nw.uid = u.user_id)
-    LEFT JOIN  profile_networking_enum AS nwe ON (nwe.network_type = nw.network_type)';
+    LEFT JOIN  profile_education             AS edu0 ON (u.user_id = edu0.uid AND edu0.id = 0)
+    LEFT JOIN  profile_education_enum        AS ede0 ON (ede0.id = edu0.eduid)
+    LEFT JOIN  profile_education_degree_enum AS edd0 ON (edd0.id = edu0.degreeid)
+    LEFT JOIN  profile_education_field_enum  AS f0   ON (f0.id = edu0.fieldid)
+    LEFT JOIN  profile_education             AS edu1 ON (u.user_id = edu1.uid AND edu1.id = 1)
+    LEFT JOIN  profile_education_enum        AS ede1 ON (ede1.id = edu1.eduid)
+    LEFT JOIN  profile_education_degree_enum AS edd1 ON (edd1.id = edu1.degreeid)
+    LEFT JOIN  profile_education_field_enum  AS f1   ON (f1.id = edu1.fieldid)
+    LEFT JOIN  profile_education             AS edu2 ON (u.user_id = edu2.uid AND edu2.id = 2)
+    LEFT JOIN  profile_education_enum        AS ede2 ON (ede2.id = edu2.eduid)
+    LEFT JOIN  profile_education_degree_enum AS edd2 ON (edd2.id = edu2.degreeid)
+    LEFT JOIN  profile_education_field_enum  AS f2   ON (f2.id = edu2.fieldid)
+    LEFT JOIN  profile_education             AS edu3 ON (u.user_id = edu3.uid AND edu3.id = 3)
+    LEFT JOIN  profile_education_enum        AS ede3 ON (ede3.id = edu3.eduid)
+    LEFT JOIN  profile_education_degree_enum AS edd3 ON (edd3.id = edu3.degreeid)
+    LEFT JOIN  profile_education_field_enum  AS f3   ON (f3.id = edu3.fieldid)
+    LEFT JOIN  entreprises                   AS e    ON (e.entrid = 0 AND e.uid = u.user_id)
+    LEFT JOIN  emploi_secteur                AS es   ON (e.secteur = es.id)
+    LEFT JOIN  fonctions_def                 AS ef   ON (e.fonction = ef.id)
+    LEFT JOIN  geoloc_pays                   AS n1   ON (u.nationalite = n1.a2)
+    LEFT JOIN  geoloc_pays                   AS n2   ON (u.nationalite2 = n2.a2)
+    LEFT JOIN  geoloc_pays                   AS n3   ON (u.nationalite3 = n3.a2)
+    LEFT JOIN  adresses                      AS adr  ON (u.user_id = adr.uid AND FIND_IN_SET(\'active\',adr.statut))
+    LEFT JOIN  geoloc_pays                   AS gp   ON (adr.country = gp.a2)
+    LEFT JOIN  geoloc_region                 AS gr   ON (adr.country = gr.a2 AND adr.region = gr.region)
+    LEFT JOIN  emails                        AS em   ON (em.uid = u.user_id AND em.flags = \'active\')
+    LEFT JOIN  profile_networking            AS nw   ON (nw.uid = u.user_id)
+    LEFT JOIN  profile_networking_enum       AS nwe  ON (nwe.network_type = nw.network_type)';
 
 // }}}
 // {{{ class ThrowError
@@ -94,9 +110,10 @@ class ThrowError
      */
     private static function defaultHandler($explain)
     {
-        global $page, $globals;
+        global $globals;
+        $page =& Platal::page();
         $page->changeTpl('search/index.tpl');
-        $page->assign('xorg_title','Polytechnique.org - Annuaire');
+        $page->setTitle('Polytechnique.org - Annuaire');
         $page->assign('baseurl', $globals->baseurl);
         $page->trigError($explain);
         $page->run();
@@ -257,8 +274,7 @@ class QuickSearch extends SField
         $s = preg_replace('!\d+!', ' ', $s);
         $this->strings = preg_split("![^a-zA-Z%]+!",$s, -1, PREG_SPLIT_NO_EMPTY);
         if (count($this->strings) > 5) {
-            global $page;
-            $page->trigWarning("Tu as indiqué trop d'éléments dans ta recherche, seuls les 5 premiers seront pris en compte");
+            Platal::page()->trigWarning("Tu as indiqué trop d'éléments dans ta recherche, seuls les 5 premiers seront pris en compte");
             $this->strings = array_slice($this->strings, 0, 5);
         }
 
@@ -289,6 +305,8 @@ class QuickSearch extends SField
             if (Env::i('with_soundex') && strlen($s) > 1) {
                 $t = soundex_fr($s);
                 $where[] = "sn$i.soundex = '$t'";
+            } elseif (Env::i('exact')) {
+                $where[] = "sn$i.token = '$s'";
             } else {
                 $t = str_replace('*', '%', $s).'%';
                 $t = str_replace('%%', '%', $t);
@@ -467,6 +485,7 @@ class RefSField extends SField
     function compare()
     {
         $val = addslashes($this->value);
+        if (Env::i('exact')) return "='$val'";
         return $this->exact ? "='$val'" : " LIKE '%$val%'";
     }
 
@@ -638,7 +657,9 @@ class StringSField extends SField
      * @param field nom de champ de la bdd concerné par la clause */
     function get_single_where_statement($field)
     {
-        $regexp = strtr(addslashes($this->value), '-*', '_%');
+        $val = addslashes($this->value);
+        if (Env::i('exact')) return "$field = '$val'";
+        $regexp = strtr($val, '-*', '_%');
         return "$field LIKE '$regexp%'";
     }
 
@@ -669,7 +690,9 @@ class NameSField extends StringSField
 
     function get_single_where_statement($field)
     {
-        $regexp = strtr(addslashes($this->value), '-*', '_%');
+        $val = addslashes($this->value);
+        if (Env::i('exact')) return "$field = '$val'";
+        $regexp = strtr($val, '-*', '_%');
         return "$field LIKE '$regexp%' OR $field LIKE '% $regexp%' OR $field LIKE '%-$regexp%'";
     }