Merge remote branch 'origin/platal-1.0.0'
[platal.git] / modules / search.php
index bc32293..67b4ba3 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2009 Polytechnique.org                              *
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -25,10 +25,10 @@ class SearchModule extends PLModule
     {
         return array(
             'search'              => $this->make_hook('quick',          AUTH_PUBLIC),
-            'search/adv'          => $this->make_hook('advanced',       AUTH_COOKIE),
+            'search/adv'          => $this->make_hook('advanced',       AUTH_COOKIE, 'directory_ax'),
             'advanced_search.php' => $this->make_hook('redir_advanced', AUTH_PUBLIC),
-            'search/autocomplete' => $this->make_hook('autocomplete',   AUTH_COOKIE, 'user', NO_AUTH),
-            'search/list'         => $this->make_hook('list',           AUTH_COOKIE, 'user', NO_AUTH),
+            'search/autocomplete' => $this->make_hook('autocomplete',   AUTH_COOKIE, 'directory_ax', NO_AUTH),
+            'search/list'         => $this->make_hook('list',           AUTH_COOKIE, 'directory_ax', NO_AUTH),
         );
     }
 
@@ -47,18 +47,21 @@ class SearchModule extends PLModule
     {
         global $globals;
 
-        $res = XDB::query("SELECT  MIN(diminutif), MAX(diminutif)
-                             FROM  #groupex#.asso
-                            WHERE  cat = 'Promotions'");
-        list($min, $max) = $res->fetchOneRow();
-        $page->assign('promo_min', $min);
-        $page->assign('promo_max', $max);
-
         if (Env::has('quick') || $action == 'geoloc') {
-            $quick = trim(Env::v('quick'));
+            $quick = Env::t('quick');
             if (S::logged() && !Env::has('page')) {
                 S::logger()->log('search', 'quick=' . $quick);
             }
+
+            if ($quick == '') {
+                $page->trigWarning('Aucun critère de recherche n\'est spécifié.');
+                $page->changeTpl('search/index.tpl');
+                $page->setTitle('Annuaire');
+                $page->assign('formulaire', 1);
+                $page->addJsLink('ajax.js');
+                return;
+            }
+
             $list = 'profile|prf|fiche|fic|referent|ref|mentor';
             if (S::admin()) {
                 $list .= '|admin|adm|ax';
@@ -91,6 +94,17 @@ class SearchModule extends PLModule
                 $url .= 'action=search&q=' . urlencode(substr($quick, 4));
                 $url .= '&group=' . urlencode('-Equipe,-Main,-PmWiki,-Site,-Review');
                 pl_redirect($url);
+            } elseif (strpos($quick, 'trombi:') === 0) {
+                $promo = substr($quick, 7);
+                $res = XDB::query("SELECT  diminutif
+                                     FROM  groups
+                                    WHERE  cat = 'Promotions' AND diminutif = {?}",
+                                  $promo);
+                if ($res->numRows() == 0) {
+                    $page->trigWarning("La promotion demandée n'est pas valide: $promo");
+                } else {
+                    http_redirect('http://www.polytechnique.net/login/' . $promo . '/annuaire/trombi');
+                }
             }
 
             $page->assign('formulaire', 0);
@@ -111,18 +125,17 @@ class SearchModule extends PLModule
                 return;
             }
             if (!S::logged() && $nb_tot > $globals->search->public_max) {
-                new ThrowError('Votre recherche a généré trop de résultats pour un affichage public.');
+                $page->trigError('Votre recherche a généré trop de résultats pour un affichage public.');
             } elseif ($nb_tot > $globals->search->private_max) {
-                new ThrowError('Recherche trop générale. Une <a href="search/adv">recherche avancée</a> permet de préciser la recherche.');
+                $page->trigError('Recherche trop générale. Une <a href="search/adv">recherche avancée</a> permet de préciser la recherche.');
             } elseif (empty($nb_tot)) {
-                new ThrowError('Il n\'existe personne correspondant à ces critères dans la base !');
+                $page->trigError('Il n\'existe personne correspondant à ces critères dans la base !');
             }
         } else {
             $page->assign('formulaire',1);
             $page->addJsLink('ajax.js');
         }
 
-        $this->load('search.inc.php');
         $page->changeTpl('search/index.tpl');
         $page->setTitle('Annuaire');
     }
@@ -131,7 +144,6 @@ class SearchModule extends PLModule
     {
         global $globals;
         require_once 'geocoding.inc.php';
-        $this->load('search.inc.php');
         $page->assign('advanced',1);
         $page->addJsLink('jquery.autocomplete.js');
 
@@ -156,7 +168,10 @@ class SearchModule extends PLModule
             $nb_tot = $view->count();
             if ($nb_tot > $globals->search->private_max) {
                 $this->form_prepare();
-                new ThrowError('Recherche trop générale.');
+                $page->trigError('Recherche trop générale.');
+            } else if ($nb_tot == 0) {
+                $this->form_prepare();
+                $page->trigError('Il n\'existe personne correspondant à ces critères dans la base !');
             }
         }
 
@@ -195,7 +210,6 @@ class SearchModule extends PLModule
             die();
         }
 
-        require_once 'directory.enums.inc.php';
         $enums = array(
             'binetTxt'           => DirEnum::BINETS,
             'groupexTxt'         => DirEnum::GROUPESX,
@@ -207,9 +221,9 @@ class SearchModule extends PLModule
             'secteurTxt'         => DirEnum::SECTORS,
             'description'        => DirEnum::JOBDESCRIPTION,
             'nationaliteTxt'     => DirEnum::NATIONALITIES,
-            'schoolTxt'          => DirEnum::SCHOOLS,
+            'schoolTxt'          => DirEnum::EDUSCHOOLS,
         );
-        if (!array_key_exists($enums, $type)) {
+        if (!array_key_exists($type, $enums)) {
             exit();
         }
 
@@ -242,50 +256,53 @@ class SearchModule extends PLModule
 
     function handler_list(&$page, $type = null, $idVal = null)
     {
+        $page->assign('name', $type);
+        $page->assign('with_text_value', true);
+        $page->assign('onchange', "document.forms.recherche.{$type}Txt.value = this.options[this.selectedIndex].text");
+
         // Give the list of all values possible of type and builds a select input for it
         $ids = null;
-        require_once 'directory.enums.inc.php';
 
         switch ($type) {
         case 'binet':
-            $ids = DirEnum::getOptions(DirEnum::BINETS);
+            $ids = DirEnum::getOptionsIter(DirEnum::BINETS);
             break;
           case 'networking_type':
-            $ids = DirEnum::getOptions(DirEnum::NETWORKS);
+            $ids = DirEnum::getOptionsIter(DirEnum::NETWORKS);
             break;
           case 'country':
-            $ids = DirEnum::getOptions(DirEnum::COUNTRIES);
+            $ids = DirEnum::getOptionsIter(DirEnum::COUNTRIES);
             $page->assign('onchange', 'changeCountry(this.value)');
             break;
           case 'diploma':
             if (Env::has('school') && Env::i('school') != 0) {
-              $ids = DirEnum::getOptions(DirEnum::DEGREES, Env::i('school'));
+              $ids = DirEnum::getOptionsIter(DirEnum::EDUDEGREES, Env::i('school'));
             } else {
-              $ids = DirEnum::getOptions(DirEnum::DEGREES);
+              $ids = DirEnum::getOptionsIter(DirEnum::EDUDEGREES);
             }
             break;
           case 'groupex':
-            $ids = DirEnum::getOptions(DirEnum::GROUPESX);
+            $ids = DirEnum::getOptionsIter(DirEnum::GROUPESX);
             break;
           case 'nationalite':
-            $ids = DirEnum::getOptions(DirEnum::NATIONALITIES);
+            $ids = DirEnum::getOptionsIter(DirEnum::NATIONALITIES);
             break;
-        case 'region':
-            if ($isset($_REQUEST['country'])) {
-                $ids = DirEnum::getOptions(DirEnum::ADMINAREAS, $_REQUEST['country']);
+          case 'region':
+            if (Env::has('country')) {
+                $ids = DirEnum::getOptionsIter(DirEnum::ADMINAREAS, Env::v('country'));
             } else {
-                $ids = DirEnum::getOptions(DirEnum::ADMINAREAS);
+                $ids = DirEnum::getOptionsIter(DirEnum::ADMINAREAS);
             }
             break;
           case 'school':
-            $ids = DirEnum::getOptions(DirEnum::SCHOOLS);
+            $ids = DirEnum::getOptionsIter(DirEnum::EDUSCHOOLS);
             $page->assign('onchange', 'changeSchool(this.value)');
             break;
           case 'section':
-            $ids = DirEnum::getOptions(DirEnum::SECTIONS);
+            $ids = DirEnum::getOptionsIter(DirEnum::SECTIONS);
             break;
           case 'secteur':
-            $ids = DirEnum::getOptions(DirEnum::SECTORS);
+            $ids = DirEnum::getOptionsIter(DirEnum::SECTORS);
             break;
           default: exit();
         }
@@ -296,10 +313,7 @@ class SearchModule extends PLModule
         }
         pl_content_headers("text/xml");
         $page->changeTpl('include/field.select.tpl', NO_SKIN);
-        $page->assign('name', $type);
         $page->assign('list', $ids);
-        $page->assign('with_text_value', true);
-        $page->assign('onchange', "document.forms.recherche.{$type}Txt.value = this.options[this.selectedIndex].text");
     }
 }