Merge commit 'origin/master' into fusionax
authorStéphane Jacob <sj@m4x.org>
Fri, 13 Nov 2009 19:24:01 +0000 (20:24 +0100)
committerStéphane Jacob <sj@m4x.org>
Fri, 13 Nov 2009 19:24:01 +0000 (20:24 +0100)
17 files changed:
1  2 
ChangeLog
bin/cron/checkdb.php
classes/xnetpage.php
configs/platal.ini
include/notifs.inc.php
include/user.func.inc.php
include/userset.inc.php
modules/admin.php
modules/email.php
modules/events.php
modules/newsletter.php
modules/profile.php
modules/register.php
modules/search.php
modules/search/classes.inc.php
modules/search/search.inc.php
templates/survey/show_root.tpl

diff --cc ChangeLog
+++ b/ChangeLog
@@@ -1,23 -1,10 +1,28 @@@
  ================================================================================
- VERSION 0.10.2                                                        XX XX XXXX
 +VERSION 0.f.0                                                         XX XX XXXX
 +
 +New:
 +    * Core:
 +        - Centralises email management through an email combobox           -JAC
 +
 +Bug/Wish:
 +    * Profile:
 +        - #16, #528, #917: Changes job interface, updates business sectors -JAC
 +        - #188: Adds informations about the Corps d'État                   -JAC
 +        - #209: Thoroughly changes education's implementation              -JAC
 +        - #373: User now chooses the name we use to talk to him/her        -JAC
 +        - #386: Adds the possibility to fill in multiple nationalities     -JAC
 +        - #443: Adds concept of ordinary firstname                         -JAC
 +        - #450: Adds marital name, thus ordinary name can be any name      -JAC
 +        - #891: Improves education display                                 -JAC
 +
 +================================================================================
+ VERSION 0.10.3                                                        XX XX XXXX
+ New:
+ ================================================================================
+ VERSION 0.10.2                                                        13 11 2009
  
  New:
  
Simple merge
Simple merge
Simple merge
@@@ -146,23 -146,22 +146,24 @@@ function select_notifs($mail, $uid=null
  // {{{
  
  global $prf_desc;
 -$prf_desc = array('nom'         => 'Son patronyme',
 -                  'freetext'    => 'Le texte libre',
 -                  'mobile'      => 'Son numéro de téléphone portable',
 -                  'nationalite' => 'Sa nationalité',
 -                  'nick'        => 'Son surnom',
 -                  'web'         => "L'adresse de son site web",
 -                  'appli1'      => "Son école d'application",
 -                  'appli2'      => 'Son école de post-application',
 -                  'addresses'   => 'Ses adresses',
 -                  'section'     => 'Sa section sportive',
 -                  'binets'      => 'La liste de ses binets',
 -                  'medals'      => 'Ses décorations',
 -                  'cv'          => 'Son curriculum vitae',
 -                  'jobs'        => 'Ses informations professionnelles',
 -                  'photo'       => 'Sa photographie',
 +$prf_desc = array('search_names' => 'L\'un de ses noms',
-                   'freetext' => 'Le texte libre',
-                   'mobile' => 'Son numéro de téléphone portable',
-                   'nationalite' => 'Sa nationalité',
++                  'freetext'     => 'Le texte libre',
++                  'mobile'       => 'Son numéro de téléphone portable',
++                  'nationalite'  => 'Sa nationalité',
 +                  'nationalite2' => 'Sa seconde nationalité',
 +                  'nationalite3' => 'Sa troisième nationalité',
-                   'nick' => 'Son surnom',
-                   'networking' => 'La liste de ses adresses de networking',
-                   'edus' => 'Ses formations',
-                   'addresses' => 'Ses adresses',
-                   'section' => 'Sa section sportive',
-                   'binets' => 'La liste de ses binets',
-                   'medals' => 'Ses décorations',
-                   'cv' => 'Son Curriculum Vitae',
-                   'corps' => 'Son Corps d\'État',
-                   'jobs' => 'Ses informations professionnelles',
-                   'photo' => 'Sa photographie');
++                  'nick'         => 'Son surnom',
++                  'networking'   => 'La liste de ses adresses de networking',
++                  'edus'         => 'Ses formations',
++                  'addresses'    => 'Ses adresses',
++                  'section'      => 'Sa section sportive',
++                  'binets'       => 'La liste de ses binets',
++                  'medals'       => 'Ses décorations',
++                  'cv'           => 'Son Curriculum Vitae',
++                  'corps'        => 'Son Corps d\'État',
++                  'jobs'         => 'Ses informations professionnelles',
++                  'photo'        => 'Sa photographie',
+                   'broken'      => "Il n'a plus d'adresse de redirection valide");
  
  function get_profile_change_details($event, $limit) {
      global $prf_desc;
@@@ -41,8 -41,8 +41,8 @@@ function user_clear_all_subs($user_id, 
                               'user_id' => array('requests', 'user_changes'));
  
      if ($really_del) {
-         array_push($tables_to_clear['uid'], 'emails', 'groupex.membres', 'contacts', 'adresses', 'profile_phones',
-                                             'photo', 'perte_pass', 'langues_ins', 'forums.abos', 'forums.profils');
 -        array_push($tables_to_clear['uid'], 'emails', '#groupex#.membres', 'contacts', 'adresses', 'tels',
 -                                            'photo', 'perte_pass', 'langues_ins', '#forums#.abos', '#forums#.profils');
++        array_push($tables_to_clear['uid'], 'emails', '#groupex#.membres', 'contacts', 'adresses', 'profile_phones',
++                                            'photo', 'perte_pass', 'langues_ins', '#forums#.abos', 'forums.profils');
          array_push($tables_to_clear['user_id'], 'newsletter_ins', 'auth_user_quick', 'binets_ins');
          $tables_to_clear['id'] = array('aliases');
          $tables_to_clear['contact'] = array('contacts');
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -397,15 -360,11 +396,11 @@@ class ProfileModule extends PLModul
         }
      }
  
 -    function handler_applis_js(&$page)
 +    function handler_education_js(&$page)
      {
-         header('Content-Type: text/javascript; charset=utf-8');
-         header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
-         header('Last-Modified:' . gmdate('D, d M Y H:i:s') . ' GMT');
-         header('Cache-Control: no-cache, must-revalidate');
-         header('Pragma: no-cache');
+         pl_cached_content_headers("text/javascript", "utf-8");
 -        $page->changeTpl('profile/applis.js.tpl', NO_SKIN);
 -        require_once "applis.func.inc.php";
 +        $page->changeTpl('profile/education.js.tpl', NO_SKIN);
-         require_once "education.func.inc.php";
++        require_once 'education.func.inc.php';
      }
  
      function handler_grades_js(&$page)
          $page->assign('medal_list', $mlist);
      }
  
 -    function handler_ajax_address(&$page, $adid)
 +    function handler_ajax_address(&$page, $id)
      {
-         header('Content-Type: text/html; charset=utf-8');
+         pl_content_headers("text/html");
          $page->changeTpl('profile/adresses.address.tpl', NO_SKIN);
 -        $page->assign('i', $adid);
 -        $page->assign('adr', array());
 +        $page->assign('i', $id);
 +        $page->assign('address', array());
      }
  
 -    function handler_ajax_tel(&$page, $adid, $telid)
 +    function handler_ajax_tel(&$page, $prefid, $prefname, $telid)
      {
-         header('Content-Type: text/html; charset=utf-8');
+         pl_content_headers("text/html");
 -        $page->changeTpl('profile/adresses.tel.tpl', NO_SKIN);
 -        $page->assign('i', $adid);
 -        $page->assign('adid', "addresses_$adid");
 -        $page->assign('adpref', "addresses[$adid]");
 -        $page->assign('t', $telid);
 +        $page->changeTpl('profile/phone.tpl', NO_SKIN);
 +        $page->assign('prefid', $prefid);
 +        $page->assign('prefname', $prefname);
 +        $page->assign('telid', $telid);
          $page->assign('tel', array());
      }
  
 +    function handler_ajax_edu(&$page, $eduid, $class)
 +    {
 +        header('Content-Type: text/html; charset=utf-8');
 +        $page->changeTpl('profile/general.edu.tpl', NO_SKIN);
 +        $res = XDB::iterator("SELECT  id, field
 +                                FROM  profile_education_field_enum
 +                            ORDER BY  field");
 +        $page->assign('edu_fields', $res->fetchAllAssoc());
 +        $page->assign('eduid', $eduid);
 +        $page->assign('class', $class);
 +        require_once "education.func.inc.php";
 +    }
 +
      function handler_ajax_medal(&$page, $id)
      {
-         header('Content-Type: text/html; charset=utf-8');
+         pl_content_headers("text/html");
          $page->changeTpl('profile/deco.medal.tpl', NO_SKIN);
          $page->assign('id', $id);
          $page->assign('medal', array('valid' => 0, 'grade' => 0));
          $page->assign('i', $id);
          $page->assign('job', array());
          $page->assign('new', true);
 -        $res = XDB::query("SELECT  id, label
 -                             FROM  emploi_secteur");
 -        $page->assign('secteurs', $res->fetchAllAssoc());
 -        $res = XDB::query("SELECT  id, fonction_fr, FIND_IN_SET('titre', flags) AS title
 -                             FROM  fonctions_def
 -                         ORDER BY  id");
 -        $page->assign('fonctions', $res->fetchAllAssoc());
 +        $res = XDB::query("SELECT  id, name AS label
 +                             FROM  profile_job_sector_enum");
 +        $page->assign('sectors', $res->fetchAllAssoc());
 +        require_once "emails.combobox.inc.php";
 +        fill_email_combobox($page);
      }
  
 -    function handler_ajax_secteur(&$page, $id, $sect, $ssect = -1)
 +    function handler_ajax_sector(&$page, $id, $jobid, $jobpref, $sect, $ssect = -1)
      {
-         header('Content-Type: text/html; charset=utf-8');
+         pl_content_headers("text/html");
 -        $res = XDB::iterator("SELECT  id, label
 -                                FROM  emploi_ss_secteur
 -                               WHERE  secteur = {?}", $sect);
 -        $page->changeTpl('profile/jobs.secteur.tpl', NO_SKIN);
 +        $res = XDB::iterator("SELECT  id, name, FIND_IN_SET('optgroup', flags) AS optgroup
 +                                FROM  profile_job_subsector_enum
 +                               WHERE  sectorid = {?}", $sect);
 +        $page->changeTpl('profile/jobs.sector.tpl', NO_SKIN);
          $page->assign('id', $id);
 -        $page->assign('ssecteurs', $res);
 +        $page->assign('subSectors', $res);
          $page->assign('sel', $ssect);
 +        if ($id != -1) {
 +            $page->assign('change', 1);
 +            $page->assign('jobid', $jobid);
 +            $page->assign('jobpref', $jobpref);
 +        }
 +    }
 +
 +    function handler_ajax_sub_sector(&$page, $id, $ssect, $sssect = -1)
 +    {
 +        header('Content-Type: text/html; charset=utf-8');
 +        $res = XDB::iterator("SELECT  id, name
 +                                FROM  profile_job_subsubsector_enum
 +                               WHERE  subsectorid = {?}", $ssect);
 +        $page->changeTpl('profile/jobs.sub_sector.tpl', NO_SKIN);
 +        $page->assign('id', $id);
 +        $page->assign('subSubSectors', $res);
 +        $page->assign('sel', $sssect);
 +    }
 +
 +    function handler_ajax_alternates(&$page, $id, $sssect)
 +    {
 +        header('Content-Type: text/html; charset=utf-8');
 +        $res = XDB::iterator('SELECT  name
 +                                FROM  profile_job_alternates
 +                               WHERE  subsubsectorid = {?}
 +                            ORDER BY  id',
 +                             $sssect);
 +        $page->changeTpl('profile/jobs.alternates.tpl', NO_SKIN);
 +        $alternate  = $res->next();
 +        $alternates = $alternate['name'];
 +        while ($alternate  = $res->next()) {
 +            $alternates .= ', ' . $alternate['name'];
 +        }
 +        $page->assign('alternates', $alternates);
      }
  
      function handler_ajax_skill(&$page, $cat, $id)
  
      function handler_ref_sect(&$page, $sect)
      {
-         header('Content-Type: text/html; charset=utf-8');
+         pl_content_headers("text/html");
          $page->changeTpl('include/field.select.tpl', NO_SKIN);
 -        $page->assign('onchange', 'setSSecteurs()');
 +        $page->assign('onchange', 'setSSectors()');
          $page->assign('id', 'ssect_field');
 -        $page->assign('name', 'ss_secteur');
 -        $it = XDB::iterator("SELECT  id,label AS field
 -                               FROM  emploi_ss_secteur
 -                              WHERE  secteur = {?}", $sect);
 +        $page->assign('name', 'subSector');
 +        $it = XDB::iterator("SELECT  id, name AS field
 +                               FROM  profile_job_subsector_enum
 +                              WHERE  sectorid = {?}", $sect);
          $page->assign('list', $it);
      }
  
      function handler_ref_country(&$page, $sect, $ssect = '')
      {
-         header('Content-Type: text/html; charset=utf-8');
+         pl_content_headers("text/html");
          $page->changeTpl('include/field.select.tpl', NO_SKIN);
          $page->assign('name', 'pays_sel');
 -        $where = ($ssect ? ' AND ms.ss_secteur = {?}' : '');
 -        $it = XDB::iterator("SELECT  a2 AS id, pays AS field
 -                              FROM  geoloc_pays AS g
 -                        INNER JOIN  mentor_pays AS mp ON (mp.pid = g.a2)
 -                        INNER JOIN  mentor_secteurs AS ms ON (ms.uid = mp.uid)
 -                             WHERE  ms.secteur = {?} $where
 -                          GROUP BY  a2
 -                          ORDER BY  pays", $sect, $ssect);
 +        $where = ($ssect ? ' AND ms.subsectorid = {?}' : '');
 +        $it = XDB::iterator("SELECT  gc.iso_3166_1_a2 AS id, gc.countryFR AS field
 +                               FROM  geoloc_countries       AS gc
 +                         INNER JOIN  profile_mentor_country AS mp ON (mp.country = gc.iso_3166_1_a2)
 +                         INNER JOIN  profile_mentor_sector  AS ms ON (ms.uid = mp.uid)
 +                              WHERE  ms.sectorid = {?} " . $where . "
 +                           GROUP BY  iso_3166_1_a2
 +                           ORDER BY  countryFR", $sect, $ssect);
          $page->assign('list', $it);
      }
  
Simple merge
@@@ -164,21 -161,17 +164,21 @@@ class SearchModule extends PLModul
              $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' => 'iso_3166_1_a2', 'table' => 'geoloc_countries', 'text' => 'countryFR',
 +                                           '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' => 'iso_3166_1_a2', 'table' => 'geoloc_countries', 
 +                                           'text' => 'nationalityFR', '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',
++                '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' => 'profile_education_enum', 'text' => 'name', 'exact' => false),
 +                'city'            => array('table' => 'geoloc_localities', 'text' => 'name', 'exact' => false)
              );
              if (!Env::has('page')) {
                  S::logger()->log('search', 'adv=' . var_export($_GET, true));
@@@ -379,15 -340,8 +379,15 @@@ class QuickSearch extends SFiel
              $join .= "LEFT JOIN emails AS ems ON (ems.uid = u.user_id)";
          }
          if (!empty($this->ip)) {
-             $join .= "INNER JOIN logger.sessions AS ls ON (ls.uid = u.user_id)\n";
+             $join .= "INNER JOIN #logger#.sessions AS ls ON (ls.uid = u.user_id)\n";
          }
 +        if (!empty($this->phone)) {
 +            if (!S::logged()) {
 +                $join .= "INNER JOIN profile_phones AS t ON (t.uid = u.user_id AND t.pub = 'public')";
 +            } else {
 +                $join .= "INNER JOIN profile_phones AS t ON (t.uid = u.user_id)";
 +            }
 +        }
          return $join;
      }
      // }}}
@@@ -28,63 -28,58 +28,63 @@@ function getAddressJoin($table) 
  function advancedSearchFromInput()
  {
      if ($with_soundex = Env::has('with_soundex')) {
 -        $nameField      = new RefWithSoundexSField('name',array('rn.nom1_soundex','rn.nom2_soundex','rn.nom3_soundex'),'recherche_soundex','rn','u.matricule = rn.matricule');
 -        $firstnameField = new RefWithSoundexSField('firstname',array('rp.prenom1_soundex','rp.prenom2_soundex'),'recherche_soundex','rp','u.matricule = rp.matricule');
 +        $nameField      = new RefWithSoundexSField('name', array('n.soundex'), 'search_name',
 +                                                   'n', 'u.user_id = n.uid');
      } else {
 -        $nameField      = new NameSField('name',array('u.nom','u.nom_usage'),'');
 -        $firstnameField = new StringSField('firstname',array('u.prenom'),'');
 +        $nameField      = new NameSField('name', array('n.token'), 'search_name', 'n', 'u.user_id = n.uid');
      }
 -    $nicknameField   = new StringSField('nickname',array('q.profile_nick'),'');
  
 -    $promo1Field     = new PromoSField('promo1','egal1',array('u.promo'),'');
 -    $promo2Field     = new PromoSField('promo2','egal2',array('u.promo'),'');
 -    $womanField      = new RefSField('woman',array('FIND_IN_SET(\'femme\',u.flags)+1'),'','','');
 -    $subscriberField = new RefSField('subscriber',array('!(u.perms IN (\'admin\',\'user\'))+1'),'','','');
 -    $aliveField      = new RefSField('alive',array('(u.deces!=0)+1'),'','','');
 +    $promo1Field        = new PromoSField('promo1', 'egal1', array('u.promo'), '');
 +    $promo2Field        = new PromoSField('promo2', 'egal2', array('u.promo'), '');
 +    $womanField         = new RefSField('woman', array('FIND_IN_SET(\'femme\', u.flags) + 1'), '', '', '');
 +    $subscriberField    = new RefSField('subscriber', array('!(u.perms IN (\'admin\', \'user\')) + 1'), '', '', '');
 +    $aliveField         = new RefSField('alive', array('(u.deces != 0) + 1'), '', '', '');
      if (Env::v('only_referent') == 'on') {
 -        $referentField = new RefSField('only_referent', array('"on"'), 'mentor', 'mt', 'mt.expertise != "" AND mt.uid=u.user_id');
 +        $referentField  = new RefSField('only_referent', array('"on"'), 'mentor', 'mt', 'mt.expertise != "" AND mt.uid = u.user_id');
      } else {
 -        $referentField = null;
 +        $referentField  = null;
      }
  
 -    if (!Env::i('cityid')) {
 -        $townField  = new RefSField('city',array('ac.city', 'ac.postcode'),'adresses','ac',getadr_join('ac'),false);
 -    } else {
 -        $townField  = new RefSField('cityid',array('av.cityid', 'av.postcode'),'adresses','av',getadr_join('av'));
 -    }
 -    $countryField   = new RefSField('country',array('ap.country'),'adresses','ap',getadr_join('ap'));
 -    $regionField    = new RefSField('region',array('ar.region'),'adresses','ar',getadr_join('ar'));
 -    $mapField       = new MapSField('mapid', array('sgcim.map_id'), array('adresses','geoloc_city_in_maps'), array('amp','sgcim'), array(getadr_join('amp'), 'amp.cityid = sgcim.city_id'));
 +    $townField          = new RefSField('city', array('av.localityId', 'av.postalCode'), 'profile_addresses',
 +                                        'av', getAddressJoin('av'));
 +    $countryField       = new RefSField('country', array('ap.countryId'), 'profile_addresses', 'ap', getAddressJoin('ap'));
 +    $regionField        = new RefSField('region',array('ar.administrativeAreaId'), 'profile_addresses', 'ar', getAddressJoin('ar'));
  
 -    $entrepriseField = new RefSField('entreprise',array('ee.entreprise'),'entreprises','ee','u.user_id=ee.uid',false);
 -    $posteField      = new RefSField('poste',array('ep.poste'),'entreprises','ep','u.user_id=ep.uid', false);
 -    $fonctionField = new RefSField('fonction',array('en.fonction'),'entreprises','en','u.user_id=en.uid');
 -    $secteurField    = new RefSField('secteur',array('fm.secteur'),'entreprises','fm','u.user_id=fm.uid');
 -    $cvField         = new RefSField('cv',array('u.cv'),'','','',false);
 +    $entrepriseField    = new RefSField('entreprise', array('je.name'), '', '','');
 +    $posteField         = new RefSField('poste', array('ep.description'), 'profile_job', 'ep', 'u.user_id = ep.uid', false);
 +    $fonctionField      = new RefSField('fonction', array('en.fonction_fr'), 'fonctions_def', 'en',
 +                                        'u.user_id = profile_job.uid AND fonctions_def.id = profile_job.functionid');
 +    $secteurField       = new RefSField('secteur', array('fm.sectorid'), 'profile_job', 'fm', 'u.user_id = fm.uid');
 +    $cvField            = new RefSField('cv', array('u.cv'), '', '', '', false);
  
 -    $natField        = new RefSField('nationalite',array('u.nationalite'),'','','');
 -    $binetField      = new RefSField('binet',array('b.binet_id'),'binets_ins','b','u.user_id=b.user_id');
 -    $groupexField    = new RefSField('groupex',array('g.id'),array('#groupex#.asso', '#groupex#.membres'),array('g', 'gm'),
 -                                     array("(g.cat = 'GroupesX' OR g.cat = 'Institutions') AND g.pub = 'public'",
 -                                           'gm.asso_id = g.id AND u.user_id=gm.uid'));
 -    $sectionField    = new RefSField('section',array('u.section'),'','','');
 -    $schoolField     = new RefSField('school',array('as.aid'),'applis_ins','`as`','u.user_id=as.uid');
 -    $diplomaField    = new RefSField('diploma',array('ad.type'),'applis_ins','ad','u.user_id=ad.uid');
 +    $natField           = new RefSField('nationalite', array('u.nationalite', 'u.nationalite2', 'u.nationalite3'), '', '', '');
 +    $binetField         = new RefSField('binet', array('b.binet_id'), 'binets_ins', 'b', 'u.user_id=b.user_id');
-     $groupexField       = new RefSField('groupex', array('g.id'), array('groupex.asso', 'groupex.membres'), array('g', 'gm'),
++    $groupexField       = new RefSField('groupex', array('g.id'), array('#groupex#.asso', '#groupex#.membres'), array('g', 'gm'),
 +                                        array("(g.cat = 'GroupesX' OR g.cat = 'Institutions') AND g.pub = 'public'",
 +                                              'gm.asso_id = g.id AND u.user_id = gm.uid'));
 +    $sectionField       = new RefSField('section', array('u.section'), '', '', '');
 +    $schoolField        = new RefSField('school', array('edu.eduid'), 'profile_education', 'edu', 'u.user_id = edu.uid');
 +    $diplomaField       = new RefSField('diploma', array('edd.degreeid'), 'profile_education', 'edd', 'u.user_id = edd.uid');
  
 -    $freeField       = new RefSField('free',array('q.profile_freetext'),'','','',false);
 +    $freeField          = new RefSField('free', array('q.profile_freetext'), '', '', '', false);
  
 +    $nwAddressField     = new RefSField('networking_address', array('nw.address'), 'profile_networking', 'nw', 'nw.uid=u.user_id', false);
 +    if (Env::v('networking_address') == '') {
 +        $nwTypeField    = new IndexSField('networking_type', array('nwe.network_type'), array('profile_networking', 'profile_networking_enum'),
 +                                          array('nw', 'nwe'), array('nw.uid = u.user_id', 'nwe.network_type = nw.network_type'));
 +    } else {
 +        $nwTypeField    = new IndexSField('networking_type',
 +                                          array('nwe.network_type'), 'profile_networking_enum', 'nwe', 'nwe.network_type = nw.network_type');
 +    }
 +    $nwPhoneField       = new PhoneSField('phone_number', array('t.search_tel'), 'profile_phones', 't', 't.uid = u.user_id');
      return array(
 -                $nameField, $firstnameField, $nicknameField, $promo1Field,
 -                $promo2Field, $womanField, $subscriberField, $aliveField, $referentField,
 -                $townField, $countryField, $regionField, $mapField, $entrepriseField,
 +                $nameField, $promo1Field,
 +                $promo2Field, $womanField, $subscriberField, $aliveField,
 +                $townField, $countryField, $regionField, $entrepriseField,
                  $posteField, $secteurField, $cvField, $natField, $binetField,
                  $groupexField, $sectionField, $schoolField, $diplomaField,
 -                $freeField, $fonctionField);
 +                $freeField, $fonctionField, $nwAddressField, $nwTypeField,
 +                $nwPhoneField, $referentField);
  }
  
  // }}}
          <td class="titre">Type de sondage&nbsp;:</td>
          <td>{$survey_modes[$survey.mode]}</td>
        </tr>
 -      {if $survey.mode != Survey::MODE_ALL} 
 +      {if $survey.mode != Survey::MODE_ALL}
        <tr>
 -        <td class="titre">Promotions&nbsp;:</td> 
 +        <td class="titre">Promotions&nbsp;:</td>
          <td>
-           {if $survey.promos eq "#"}
-           erreur
-           {elseif $survey.promos eq ""}
-           aucune restriction
-           {else}
-           {$survey.promos}
+           {if $survey.promos eq "#"} 
+           <span class="erreur">erreur</span>
+           {elseif $survey.promos eq ""} 
+           aucune restriction 
+           {else} 
+           {$survey.promos} 
            {/if}
          </td>
        </tr>