================================================================================
- 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:
// {{{
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;
'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');
}
}
- 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);
}
$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));
$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;
}
// }}}
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 :</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 :</td>
+ <td class="titre">Promotions :</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>