Merge commit 'origin/master' into fusionax
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Mon, 5 Jan 2009 20:21:24 +0000 (21:21 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Mon, 5 Jan 2009 20:21:24 +0000 (21:21 +0100)
Conflicts:

modules/search.php

Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
1  2 
modules/admin.php
modules/search.php

diff --combined modules/admin.php
@@@ -622,6 -622,7 +622,7 @@@ class AdminModule extends PLModul
  
                  // User re-registration.
                  case "u_kill":
+                     require_once('user.func.inc.php');
                      user_clear_all_subs($user->id());
                      $globals->updateNbIns();
                      $page->trigSuccess("'" . $user->id() . "' a été désinscrit !");
                  $action = Env::v('valid_promo') == 'Ajouter des membres' ? 'add' : 'ax';
                  pl_redirect('admin/promo/' . $action . '/' . Env::i('promo'));
              } else {
 -                $page->trigError('Promo non valide');
 +                $page->trigError('Promotion non valide.');
              }
          }
  
diff --combined modules/search.php
@@@ -24,11 -24,11 +24,11 @@@ class SearchModule extends PLModul
      function handlers()
      {
          return array(
 -            'search'     => $this->make_hook('quick', AUTH_PUBLIC),
 -            'search/adv' => $this->make_hook('advanced', AUTH_COOKIE),
 +            'search'              => $this->make_hook('quick',          AUTH_PUBLIC),
 +            'search/adv'          => $this->make_hook('advanced',       AUTH_COOKIE),
              '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, 'user', NO_AUTH),
 +            'search/list'         => $this->make_hook('list',           AUTH_COOKIE, 'user', NO_AUTH),
          );
      }
  
              $school = Env::i('school');
          }
  
 -        if (!is_null($school)) {
 -            $sql = 'SELECT type FROM applis_def WHERE id=' . $school;
 +        if ((!is_null($school)) && ($school != '')) {
 +            $sql = 'SELECT  degreeid
 +                      FROM  profile_education_degree
 +                     WHERE  eduid=' . $school;
          } else {
 -            $sql = 'DESCRIBE applis_def type';
 +            $sql = 'SELECT  id
 +                      FROM  profile_education_degree_enum
 +                  ORDER BY  id';
          }
  
          $res = XDB::query($sql);
 -        $row = $res->fetchOneRow();
 -        if (!is_null($school)) {
 -            $types = $row[0];
 -        } else {
 -            $types = explode('(',$row[1]);
 -            $types = str_replace("'","",substr($types[1],0,-1));
 -        }
 -        Platal::page()->assign('choix_diplomas', explode(',',$types));
 +        Platal::page()->assign('choix_diplomas', $res->fetchColumn());
 +
 +        $sql = 'SELECT  degree
 +                  FROM  profile_education_degree_enum
 +              ORDER BY  id';
 +        $res = XDB::query($sql);
 +        Platal::page()->assign('name_diplomas', $res->fetchColumn());
      }
  
      function handler_quick(&$page, $action = null, $subaction = null)
              $this->form_prepare();
          } else {
              $textFields = array(
 -                'country' => array('field' => 'a2', 'table' => 'geoloc_pays', 'text' => 'pays', 'exact' => false),
 -                'fonction' => array('field' => 'id', 'table' => 'fonctions_def', 'text' => 'fonction_fr', 'exact' => true),
 -                'secteur' => array('field' => 'id', 'table' => 'emploi_secteur', 'text' => 'label', 'exact' => false),
 -                'nationalite' => array('field' => 'a2', 'table' => 'geoloc_pays', 'text' => 'nat', 'exact' => 'false'),
 -                'binet' => array('field' => 'id', 'table' => 'binets_def', 'text' => 'text', 'exact' => false),
 -                'groupex' => array('field' => 'id', 'table' => 'groupex.asso',
 -                                   'text' => "(cat = 'GroupesX' OR cat = 'Institutions') AND pub = 'public' AND nom",
 -                                   'exact' => false),
 -                'section' => array('field' => 'id', 'table' => 'sections', 'text' => 'text', 'exact' => false),
 -                'school' => array('field' => 'id', 'table' => 'applis_def', 'text' => 'text', 'exact' => false),
 -                'city' => array('table' => 'geoloc_city', 'text' => 'name', 'exact' => false)
 +                'country'         => array('field' => 'a2', 'table' => 'geoloc_pays', 'text' => 'pays', 'exact' => false),
 +                'fonction'        => array('field' => 'id', 'table' => 'fonctions_def', 'text' => 'fonction_fr', 'exact' => true),
 +                'secteur'         => array('field' => 'id', 'table' => 'profile_job_sector_enum', 'text' => 'name', 'exact' => false),
 +                'nationalite'     => array('field' => 'a2', 'table' => 'geoloc_pays', 'text' => 'nat', 'exact' => 'false'),
 +                'binet'           => array('field' => 'id', 'table' => 'binets_def', 'text' => 'text', 'exact' => false),
 +                'networking_type' => array('field' => 'network_type', 'table' => 'profile_networking_enum',
 +                                           'text' => 'name', 'exact' => false),
 +                'groupex'         => array('field' => 'id', 'table' => 'groupex.asso',
-                                            'text' => "(a.cat = 'GroupesX' OR a.cat = 'Institutions') AND pub = 'public' AND nom",
++                                           'text' => "(cat = 'GroupesX' OR cat = 'Institutions') AND pub = 'public' AND nom",
 +                                           'exact' => false),
 +                'section'         => array('field' => 'id', 'table' => 'sections', 'text' => 'text', 'exact' => false),
 +                'school'          => array('field' => 'id', 'table' => 'profile_education_enum', 'text' => 'name', 'exact' => false),
 +                'city'            => array('table' => 'geoloc_city', 'text' => 'name', 'exact' => false)
              );
              if (!Env::has('page')) {
                  S::logger()->log('search', 'adv=' . var_export($_GET, true));
          $beginwith = true;
          $field2 = false;
          $qsearch = str_replace(array('%', '_'), '', $q);
 +        $distinct = true;
  
          switch ($type) {
            case 'binetTxt':
              $db = '`binets_def` INNER JOIN
                     `binets_ins` ON(`binets_def`.`id` = `binets_ins`.`binet_id`)';
 -            $field='`binets_def`.`text`';
 +            $field = '`binets_def`.`text`';
              if (strlen($q) > 2)
                  $beginwith = false;
              $realid = '`binets_def`.`id`';
              break;
 +          case 'networking_typeTxt':
 +            $db = '`profile_networking_enum` INNER JOIN
 +                   `profile_networking` ON(`profile_networking`.`network_type` = `profile_networking_enum`.`network_type`)';
 +            $field = '`profile_networking_enum`.`name`';
 +            $unique = 'uid';
 +            $realid = '`profile_networking_enum`.`network_type`';
 +            break;
            case 'city':
              $db = '`geoloc_city` INNER JOIN
                     `adresses` ON(`geoloc_city`.`id` = `adresses`.`cityid`)';
            case 'countryTxt':
              $db = '`geoloc_pays` INNER JOIN
                     `adresses` ON(`geoloc_pays`.`a2` = `adresses`.`country`)';
 -            $unique='`uid`';
 +            $unique = '`uid`';
              $field = '`geoloc_pays`.`pays`';
              $field2 = '`geoloc_pays`.`country`';
 -            $realid='`geoloc_pays`.`a2`';
 +            $realid = '`geoloc_pays`.`a2`';
              break;
            case 'entreprise':
 -            $db = '`entreprises`';
 -            $field = '`entreprise`';
 -            $unique='`uid`';
 +            $db     = 'profile_job_enum INNER JOIN
 +                       profile_job ON (profile_job.jobid = profile_job_enum.id)';
 +            $field  = 'profile_job_enum.name';
 +            $unique = 'profile_job.uid';
              break;
            case 'firstname':
              $field = '`prenom`';
              $beginwith = false;
              break;
            case 'fonctionTxt':
 -            $db = '`fonctions_def` INNER JOIN
 -                   `entreprises` ON(`entreprises`.`fonction` = `fonctions_def`.`id`)';
 -            $field = '`fonction_fr`';
 -            $unique = '`uid`';
 -            $realid = '`fonctions_def`.`id`';
 +            $db        = 'fonctions_def INNER JOIN
 +                          profile_job ON (profile_job.fonctionid = fonctions_def.id)';
 +            $field     = 'fonction_fr';
 +            $unique    = 'uid';
 +            $realid    = 'fonctions_def.id';
              $beginwith = false;
              break;
            case 'groupexTxt':
              break;
            case 'nationaliteTxt':
              $db = '`geoloc_pays` INNER JOIN
 -                   `auth_user_md5` ON(`geoloc_pays`.`a2` = `auth_user_md5`.`nationalite`)';
 +                   `auth_user_md5` ON (`geoloc_pays`.`a2` = `auth_user_md5`.`nationalite` OR
 +                                       `geoloc_pays`.`a2` = `auth_user_md5`.`nationalite2` OR
 +                                       `geoloc_pays`.`a2` = `auth_user_md5`.`nationalite3`)';
              $field = 'IF(`geoloc_pays`.`nat`=\'\',
                                         `geoloc_pays`.`pays`,
                                         `geoloc_pays`.`nat`)';
              $db = '`auth_user_quick`';
              $beginwith = false;
              break;
 -          case 'poste':
 -            $db = '`entreprises`';
 -            $field = '`poste`';
 -            $unique='`uid`';
 +          case 'description':
 +            $db     = 'profile_job';
 +            $field  = 'description';
 +            $unique = 'uid';
              break;
            case 'schoolTxt':
 -            $db = '`applis_def` INNER JOIN
 -                   `applis_ins` ON(`applis_def`.`id` = `applis_ins`.`aid`)';
 -            $field='`applis_def`.`text`';
 -            $unique = '`uid`';
 -            $realid = '`applis_def`.`id`';
 +            $db = 'profile_education_enum INNER JOIN
 +                   profile_education ON (profile_education_enum.id = profile_education.eduid)';
 +            $field = 'profile_education_enum.name';
 +            $unique = 'uid';
 +            $realid = 'profile_education_enum.id';
              if (strlen($q) > 2)
                  $beginwith = false;
              break;
            case 'secteurTxt':
 -            $db = '`emploi_secteur` INNER JOIN
 -                   `entreprises` ON(`entreprises`.`secteur` = `emploi_secteur`.`id`)';
 -            $field = '`emploi_secteur`.`label`';
 -            $realid = '`emploi_secteur`.`id`';
 -            $unique = '`uid`';
 +            $db        = 'profile_job_sector_enum INNER JOIN
 +                          profile_job ON (profile_job.sectorid = profile_job_sector_enum.id)';
 +            $field     = 'profile_job_sector_enum.name';
 +            $realid    = 'profile_job_sector_enum.id';
 +            $unique    = 'uid';
 +            $beginwith = false;
 +            break;
 +          case 'sss_secteur':
 +            $db        = 'profile_job_subsubsector_enum';
 +            $field     = 'name';
              $beginwith = false;
 +            $unique    = 'name';
 +            $distinct  = false;
              break;
            case 'sectionTxt':
              $db = '`sections` INNER JOIN
              $field2_t = make_field_test($field2, $beginwith);
              $field_select = 'IF(' . $field_t . ', ' . $field . ', ' . $field2. ')';
          }
 -        $list = XDB::iterator('SELECT  ' . $field_select . ' AS field,
 -                                       COUNT(DISTINCT ' . $unique . ') AS nb
 -                                       . ($realid ? (', ' . $realid . ' AS id') : '') . '
 +        $list = XDB::iterator('SELECT  ' . $field_select . ' AS field'
 +                                       . ($distinct ? (', COUNT(DISTINCT ' . $unique . ') AS nb') : '')
 +                                       . ($realid ? (', ' . $realid . ' AS id') : '') . '
                                   FROM  ' . $db . '
                                  WHERE  ' . $field_t .
                                          ($field2 ? (' OR ' . $field2_t) : '') . '
                               GROUP BY  ' . $field_select . '
 -                             ORDER BY  nb DESC
 +                             ORDER BY  ' . ($distinct ? 'nb DESC' : $field_select) . '
                                  LIMIT  11',
                                 $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch,
                                 $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch);
 +
          $nbResults = 0;
          $res = "";
          while ($result = $list->next()) {
                  $res .= $q."|-1\n";
              } else {
                  $res .= $result['field'].'|';
 -                $res .= $result['nb'];
 +                if (isset($result['nb'])) {
 +                    $res .= $result['nb'];
 +                }
                  if (isset($result['id'])) {
                      $res  .= '|'.$result['id'];
                  }
            case 'binet':
              $db = '`binets_def`';
              break;
 +          case 'networking_type':
 +            $db = '`profile_networking_enum`';
 +            $field = '`name`';
 +            $id = '`network_type`';
 +            break;
            case 'country':
              $db = '`geoloc_pays`';
              $field = '`pays`';
              break;
            case 'nationalite':
              $db = '`geoloc_pays` INNER JOIN
 -                   `auth_user_md5` ON (`geoloc_pays`.`a2` = `auth_user_md5`.`nationalite`)';
 +                   `auth_user_md5` ON (`geoloc_pays`.`a2` = `auth_user_md5`.`nationalite` OR
 +                                       `geoloc_pays`.`a2` = `auth_user_md5`.`nationalite2` OR
 +                                       `geoloc_pays`.`a2` = `auth_user_md5`.`nationalite3`)';
              $field = 'IF(`nat`=\'\', `pays`, `nat`)';
              $id = '`a2`';
              break;
              }
              break;
            case 'school':
 -            $db = '`applis_def`';
 +            $db = 'profile_education_enum';
 +            $field = 'name';
 +            $id = 'id';
              $page->assign('onchange', 'changeSchool(this.value)');
              break;
            case 'section':
              $db = '`sections`';
              break;
            case 'secteur':
 -            $db = '`emploi_secteur`';
 -            $field = '`label`';
 +            $db    = 'profile_job_sector_enum INNER JOIN
 +                      profile_job ON (profile_job.sectorid = profile_job_sector_enum.id)';
 +            $field = 'profile_job_sector_enum.name';
 +            $id    = 'profile_job_sector_enum.id';
              break;
            default: exit();
          }