From dd502514e4c52ed460753060b847df8ef155661e Mon Sep 17 00:00:00 2001 From: x2001corpet Date: Wed, 14 Jun 2006 22:51:02 +0000 Subject: [PATCH] Synchronize fiche from AX git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@315 839d8a87-29fc-0310-9880-83ba4fa771e5 --- ChangeLog | 1 + htdocs/admin/synchro_ax.php | 58 +------ htdocs/profil.php | 8 +- include/profil.func.inc.php | 241 +++++++++++++++++++++++++- include/profil/assign_general.inc.php | 3 +- include/profil/get_general.inc.php | 6 +- include/profil/update_general.inc.php | 2 +- include/synchro_ax.inc.php | 215 +++++------------------ include/user.func.inc.php | 317 ++++++++++++++++++++++++++++++++-- templates/admin/synchro_ax.tpl | 214 +++++++---------------- templates/profil/general.tpl | 16 +- 11 files changed, 685 insertions(+), 396 deletions(-) diff --git a/ChangeLog b/ChangeLog index 043a063..4ec746e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,7 @@ New : * Profile : - See fiche sent to AX. -Car + - Synchronize fiche from AX fiche. -Car * Skin : - Common file for header above title. -Car diff --git a/htdocs/admin/synchro_ax.php b/htdocs/admin/synchro_ax.php index bb64663..45205aa 100644 --- a/htdocs/admin/synchro_ax.php +++ b/htdocs/admin/synchro_ax.php @@ -1,6 +1,6 @@ $adr) { - if (Env::has('add_address'.$i)) { - $adr_adds[] = $i; - } - } - - $pro_dels = array(); - foreach ($user['adr_pro'] as $pro) { - if (Env::has('del_pro'.$pro['entrid'])) { - $pro_dels[] = $pro['entrid']; - } - } - - $pro_adds = array(); - foreach ($userax['adr_pro'] as $i => $pro) { - if (Env::has('add_pro'.$i)) { - $pro_adds[] = $i; - } - } - - import_from_ax($userax, Env::has('nom_usage'), Env::has('mobile'), $adr_dels, $adr_adds, $pro_dels, $pro_adds, Env::has('nationalite')); - - } - - $user = get_user_details($login, Session::getInt('uid')); - if ($userax) { - $user['matricule_ax'] = $userax['matricule_ax']; - unset($userax['matricule_ax']); - $user['nom'] = ucwords(strtolower($user['nom'])); - $user['nom_usage'] = ucwords(strtolower($user['nom_usage'])); + if (Env::has('importe')) { + ax_synchronize($login, Session::getInt('uid')); } - - $page->assign('watch_champs',array('nom', 'nom_usage', 'prenom', 'nationalite', 'mobile')); - $page->assign('modifiables', array(0,1,0,1,1)); + // get details from user, but looking only info that can be seen by ax + $user = get_user_details($login, Session::getInt('uid'), 'ax'); + $userax= get_user_ax($user['matricule_ax']); + require_once 'profil.func.inc.php'; + $diff = diff_user_details($userax, $user, 'ax'); $page->assign('x', $user); - $page->assign('ax', $userax); + $page->assign('diff', $diff); } $page->run(); diff --git a/htdocs/profil.php b/htdocs/profil.php index 8a968db..d8455df 100644 --- a/htdocs/profil.php +++ b/htdocs/profil.php @@ -1,6 +1,6 @@ xdb->query('UPDATE auth_user_quick SET profile_from_ax = 1 WHERE user_id = {?}', Session::getInt('uid')); +} + +if (Env::get('synchro_ax') == 'confirm') { require_once('synchro_ax.inc.php'); - copy_from_ax(Session::getInt('uid')); + ax_synchronize(Session::get('bestalias'), Session::getInt('uid')); + $page->trig('Ton profil a été synchronisé avec celui du site polytechniciens.com'); } //on met a jour $opened_tab et $new_tab qui sont le tab du POST et le tab demande diff --git a/include/profil.func.inc.php b/include/profil.func.inc.php index 6da490a..a20ce4c 100644 --- a/include/profil.func.inc.php +++ b/include/profil.func.inc.php @@ -1,6 +1,6 @@ $bvar) { + if (isset($a[$val])) { + if ($a[$val] == $bvar) + unset($c[$val]); + else { + switch ($val) { + case 'adr' : if (!($c['adr'] = diff_user_addresses($a[$val], $bvar, $view))) unset($c['adr']); break; + case 'adr_pro' : if (!($c['adr_pro'] = diff_user_pros($a[$val], $bvar, $view))) unset($c['adr_pro']); break; + case 'mobile' : if (same_tel($a[$val], $bvar)) unset($c['mobile']); break; + } + } + } + } + // don't modify mobile if you don't have the right + if (isset($b['mobile_pub']) && !has_user_right($b['mobile_pub'], $view) && isset($c['mobile'])) + unset($c['mobile']); + if (isset($b['web_pub']) && !has_user_right($b['web_pub'], $view) && isset($c['web'])) + unset($c['web']); + if (isset($b['freetext_pub']) && !has_user_right($b['freetext_pub'], $view) && isset($c['freetext'])) + unset($c['freetext']); + if (!count($c)) + return false; + return $c; +} + +function same_tel(&$a, &$b) { + $numbera = preg_replace('/[^0-9]/', '', (string) $a); + $numberb = preg_replace('/[^0-9]/', '', (string) $b); + return $numbera === $numberb; +} +function same_address(&$a, &$b) { + return + (same_field($a['adr1'],$b['adr1'])) && + (same_field($a['adr1'],$b['adr1'])) && + (same_field($a['adr1'],$b['adr1'])) && + (same_field($a['postcode'],$b['postcode'])) && + (same_field($a['city'],$b['city'])) && + (same_field($a['countrytxt'],$b['countrytxt'])) && + true; +} +function same_pro(&$a, &$b) { + return + (same_field($a['entreprise'],$b['entreprise'])) && + (same_field($a['fonction'],$b['fonction'])) && + true; +} +function same_field(&$a, &$b) { + if ($a == $b) return true; + if (is_array($a)) { + if (!is_array($b) || count($a) != count($b)) return false; + foreach ($a as $val => $avar) + if (!isset($b[$val]) || !same_field($avar, $b[$val])) return false; + return true; + } elseif (is_string($a)) + return (strtoupper($a) == strtoupper($b)); +} +function diff_user_tel(&$a, &$b) { + $c = $a; + if (isset($b['tel_pub']) && isset($a['tel_pub']) && has_user_right($b['tel_pub'], $a['tel_pub'])) + $c['tel_pub'] = $b['tel_pub']; + foreach ($b as $val => $bvar) { + if (isset($a[$val])) { + if ($a[$val] == $bvar) + unset($c[$val]); + } + } + if (!count($c)) + return false; + $c['telid'] = $a['telid']; + return $c; +} + +function diff_user_address($a, $b) { + if (isset($b['pub']) && isset($a['pub']) && has_user_right($b['pub'], $a['pub'])) + $a['pub'] = $b['pub']; + if (isset($b['tels'])) { + $bvar = $b['tels']; + + $telids_b = array(); + foreach ($bvar as $i => $telb) $telids_b[$telb['telid']] = $i; + + if (isset($a['tels'])) + $avar = $a['tels']; + else + $avar = array(); + $ctels = $avar; + foreach ($avar as $j => $tela) { + if (isset($tela['telid'])) { + // if b has a tel with the same telid, compute diff + if (isset($telids_b[$tela['telid']])) { + if (!($ctels[$j] = diff_user_tel($tela, $varb[$telids_b[$tela['adrid']]]))) + unset($ctels[$j]); + unset($telids_b[$tela['telid']]); + } + } else { + // try to find a match in b + foreach ($bvar as $i => $telb) { + if (same_tel($tela['tel'], $telb['tel'])) { + $tela['telid'] = $telb['telid']; + if (!($ctels[$j] = diff_user_tel($tela, $telb))) + unset($ctels[$j]); + unset($telids_b[$tela['telid']]); + break; + } + } + } + } + + foreach ($telids_b as $telidb => $i) + $ctels[] = array('telid' => $telidb, 'remove' => 1); + + if (!count($ctels)) { + $b['tels'] = $avar; + } else + $a['tels'] = $ctels; + } + + foreach ($a as $val => $avar) { + if (!isset($b[$val]) || !same_field($avar,$b[$val])) { + return $a; + } + } + return false; +} + +// $b need to use adrids +function diff_user_addresses(&$a, &$b) { + $c = $a; + $adrids_b = array(); + foreach ($b as $i => $adrb) $adrids_b[$adrb['adrid']] = $i; + + foreach ($a as $j => $adra) { + if (isset($adra['adrid'])) { + // if b has an address with the same adrid, compute diff + if (isset($adrids_b[$adra['adrid']])) { + if (!($c[$j] = diff_user_address($adra, $b[$adrids_b[$adra['adrid']]]))) + unset($c[$j]); + unset($adrids_b[$adra['adrid']]); + } + } else { + // try to find a match in b + foreach ($b as $i => $adrb) { + if (same_address($adra, $adrb)) { + $adra['adrid'] = $adrb['adrid']; + if (!($c[$j] = diff_user_address($adra, $adrb))) + unset($c[$j]); + if ($c[$j]) $c[$j]['adrid'] = $adra['adrid']; + unset($adrids_b[$adra['adrid']]); + break; + } + } + } + } + + foreach ($adrids_b as $adridb => $i) + $c[] = array('adrid' => $adridb, 'remove' => 1); + + if (!count($c)) return false; + return $c; +} + +function diff_user_pro($a, &$b, $view = 'private') { + if (isset($b['pub']) && isset($a['pub']) && has_user_right($b['pub'], $a['pub'])) + $a['pub'] = $b['pub']; + if (isset($b['adr_pub']) && !has_user_right($b['adr_pub'], $view)) { + unset($a['adr1']); + unset($a['adr2']); + unset($a['adr3']); + unset($a['postcode']); + unset($a['city']); + unset($a['countrytxt']); + unset($a['region']); + } + if (isset($b['adr_pub']) && isset($a['adr_pub']) && has_user_right($b['adr_pub'], $a['adr_pub'])) + $a['adr_pub'] = $b['adr_pub']; + if (isset($b['tel_pub']) && !has_user_right($b['tel_pub'], $view)) { + unset($a['tel']); + unset($a['fax']); + unset($a['mobile']); + } + if (isset($b['tel_pub']) && isset($a['tel_pub']) && has_user_right($b['tel_pub'], $a['tel_pub'])) + $a['tel_pub'] = $b['tel_pub']; + if (isset($b['email_pub']) && !has_user_right($b['email_pub'], $view)) + unset($a['email']); + if (isset($b['email_pub']) && isset($a['email_pub']) && has_user_right($b['email_pub'], $a['email_pub'])) + $a['email_pub'] = $b['email_pub']; + foreach ($a as $val => $avar) { + if (($avar && !isset($b[$val])) || !same_field($avar,$b[$val])) { + return $a; + } + } + return false; +} + +// $b need to use entrids +function diff_user_pros(&$a, &$b, $view = 'private') { + $c = $a; + $entrids_b = array(); + foreach ($b as $i => $prob) $entrids_b[$prob['entrid']] = $i; + + foreach ($a as $j => $proa) { + if (isset($proa['entrid'])) { + // if b has an address with the same adrid, compute diff + if (isset($entrids_b[$proa['entrid']])) { + if (!($c[$j] = diff_user_pro($proa, $b[$entrids_b[$proa['entrid']]], $view))) + unset($c[$j]); + unset($entrids_b[$proa['entrid']]); + } + } else { + // try to find a match in b + foreach ($b as $i => $prob) { + if (same_pro($proa, $prob)) { + $proa['entrid'] = $prob['entrid']; + if (!($c[$j] = diff_user_pro($proa, $prob, $view))) + unset($c[$j]); + if ($c[$j]) $c[$j]['entrid'] = $proa['entrid']; + unset($entrids_b[$proa['entrid']]); + break; + } + } + } + } + + foreach ($entrids_b as $entridb => $i) + $c[] = array('entrid' => $entridb, 'remove' => 1); + + if (!count($c)) return false; + return $c; +} + ?> diff --git a/include/profil/assign_general.inc.php b/include/profil/assign_general.inc.php index ef2d1c7..0c7ed74 100644 --- a/include/profil/assign_general.inc.php +++ b/include/profil/assign_general.inc.php @@ -1,6 +1,6 @@ assign('nouvellephoto', $nouvellephoto); $page->assign('nickname', $nickname); $page->assign('synchro_ax', $synchro_ax); +$page->assign('matricule_ax', $matricule_ax); ?> diff --git a/include/profil/get_general.inc.php b/include/profil/get_general.inc.php index c6c7e5a..cc78409 100644 --- a/include/profil/get_general.inc.php +++ b/include/profil/get_general.inc.php @@ -1,6 +1,6 @@ xdb->query($sql, Session::getInt('uid', -1)); list($nom, $prenom, $nom_ini, $prenom_ini, $promo, $promo_sortie, $nom_usage, $nationalite, $mobile, $mobile_pub, $web, $web_pub, $freetext, $freetext_pub, $nickname, - $synchro_ax, + $synchro_ax, $matricule_ax, $appli_id1,$appli_type1, $appli_id2,$appli_type2) = $result->fetchOneRow(); $result = $globals->xdb->query("SELECT pub FROM photo WHERE uid = {?}", Session::getInt('uid', -1)); diff --git a/include/profil/update_general.inc.php b/include/profil/update_general.inc.php index 8921abc..0b3d818 100644 --- a/include/profil/update_general.inc.php +++ b/include/profil/update_general.inc.php @@ -1,6 +1,6 @@ xdb->query( - "SELECT matricule_ax - FROM auth_user_md5 AS u - WHERE u.user_id = {?}", $uid); - $matricule_ax = $res->fetchOneCell(); - $ancien = recupere_infos_ancien($matricule_ax); $userax = Array(); $userax['matricule_ax'] = $matricule_ax; - $userax['uid'] = $uid; - $userax['nom'] = $ancien->Nom_patr(); - $userax['nom_usage'] = $ancien->Nom_usuel(); + $userax['nom'] = strtoupper($ancien->Nom_patr()); + $userax['nom_usage'] = strtoupper($ancien->Nom_usuel()); if ($userax['nom_usage'] == $userax['nom']) $userax['nom_usage'] = ''; $userax['prenom'] = $ancien->Prenom(); $userax['sexe'] = ($ancien->Civilite() != 'M')?1:0; $userax['promo'] = $ancien->Promo(); - $userax['nationalite'] = $ancien->Nationalite(); - if ($userax['nationalite'] == 'F') $userax['nationalite'] = 'Français'; +/* $userax['nationalite'] = $ancien->Nationalite(); + if ($userax['nationalite'] == 'F') $userax['nationalite'] = 'Français'; */ //$userax['date'] = substr($ancien[12], 0, 10); - $userax['mobile'] = $ancien->Mobile(0); - if ($ancien->Corps() == 'D' || $ancien->Corps() == 'Z') { - $userax['applis_join'] = "pas un corps"; + $userax['mobile'] = trim($ancien->Mobile(0)); +/* if ($ancien->Corps() == 'D' || $ancien->Corps() == 'Z') { + $userax['corps'] = false; } else { - $userax['applis_join'] = "Corps ".$ancien->Corps()." - ".$ancien->Grade(); - } - $userax['adr_pro'] = array(); + $userax['corps'] = $ancien->Corps(); + $userax['corps_grade'] = $ancien->Grade(); + } */ + $userax['adr_pro'] = array(); for ($i = 0; $i < $ancien->Num_Activite(); $i++) { $jobax = array(); $jobax['entreprise'] = $ancien->Entreprise($i); - $jobax['fonction'] = $ancien->Fonction($i); + if (!$jobax['entreprise']) + $jobax['entreprise'] = $ancien->Adresse_act_adresse1($i); + $jobax['poste'] = $ancien->Fonction($i); $jobax['adr1'] = $ancien->Adresse_act_adresse1($i); $jobax['adr2'] = $ancien->Adresse_act_adresse2($i); $jobax['adr3'] = $ancien->Adresse_act_adresse3($i); $jobax['postcode'] = $ancien->Adresse_act_code_pst($i); $jobax['city'] = $ancien->Adresse_act_ville($i); $jobax['region'] = $ancien->Adresse_act_etat_region($i); - $jobax['country'] = $ancien->Adresse_act_pays($i); + $jobax['countrytxt'] = ucwords(strtolower($ancien->Adresse_act_pays($i))); $jobax['tel'] = $ancien->Adresse_act_tel($i); $jobax['fax'] = $ancien->Adresse_act_fax($i); $jobax['mobile'] = $ancien->Adresse_act_mobile($i); + $jobax['pub'] = 'ax'; + $jobax['tel_pub'] = 'ax'; + $jobax['adr_pub'] = 'ax'; + $jobax['email_pub'] = 'ax'; $userax['adr_pro'][] = $jobax; } $userax['adr'] = array(); - foreach ($array['dump']['adresse'] as $adr) { + for($i=$ancien->Num_adresse() - 1; $i >= 0; $i--) { $adrax = array(); $adrax['adr1'] = $ancien->Adresse1($i); $adrax['adr2'] = $ancien->Adresse2($i); @@ -85,163 +85,34 @@ function get_user_ax($uid, $raw=false) $adrax['postcode'] = $ancien->Code_pst($i); $adrax['city'] = $ancien->Ville($i); $adrax['region'] = $ancien->Etat_region($i); - $adrax['country'] = $ancien->Pays($i); - $adrax['tel'] = $ancien->Tel($i); - $adrax['fax'] = $ancien->Fax($i); - $userax['adr'][] = $adrax; - } - if ($raw) { - $userax['raw'] = $ancien; - } - - return $userax; -} - -function import_from_ax($userax, $nom_usage=false, $mobile=false, $del_address=null, $add_address=null, $del_pro=null, $add_pro=null, $nationalite=false) -{ - global $globals; - - if ($nom_usage) { - $globals->xdb->execute("UPDATE auth_user_md5 SET nom_usage = {?} WHERE user_id = {?}", strtoupper($userax['nom_usage']), $userax['uid']); - } - - if ($mobile) { - $globals->xdb->execute("UPDATE auth_user_quick SET profile_mobile = {?} WHERE user_id = {?}", $userax['mobile'], $userax['uid']); - } - - if ($nationalite) { - if ($userax['nationalite'] == 'Français') { - $userax['nationalite'] = 'FR'; - } - $globals->xdb->execute("UPDATE auth_user_md5 SET nationalite = {?} WHERE user_id = {?}", $userax['nationalite'], $userax['uid']); - } - if (is_array($del_address)) foreach($del_address as $adrid) { - $globals->xdb->execute("DELETE FROM adresses WHERE uid = {?} AND adrid = {?}", $userax['uid'], $adrid); - $globals->xdb->execute("DELETE FROM tels WHERE uid = {?} AND adrid = {?}", $userax['uid'], $adrid); - } - - if (is_array($del_pro)) foreach($del_pro as $entrid) { - $globals->xdb->execute("DELETE FROM entreprises WHERE uid = {?} AND entrid = {?}", $userax['uid'], $entrid); - } - - if (is_array($add_address)) { - - $res = $globals->xdb->query( - "SELECT adrid - FROM adresses - WHERE uid = {?} AND adrid >= 1 - ORDER BY adrid", - $userax['uid']); - $adrids = $res->fetchColumn(); - $i_adrid = 0; - $new_adrid = 1; - - foreach($add_address as $adrid) { - - $adr = $userax['adr'][$adrid]; - - // find the next adrid not used - while ($adrids[$i_adrid] == $new_adrid) { - $i_adrid++; - $new_adrid++; - } - - if ($adr['city']) { - - $res = $globals->xdb->query( - "SELECT a2 FROM geoloc_pays - WHERE pays LIKE {?} OR country LIKE {?}", - $adr['country'], $adr['country']); - - $a2 = $res->fetchOneCell(); - } - if (!$a2) { $a2 = '00'; } - - $globals->xdb->execute( - "INSERT INTO adresses - SET uid = {?}, adrid = {?}, - adr1 = {?}, adr2 = {?}, adr3 = {?}, - postcode = {?}, city = {?}, - country = {?}, - datemaj = NOW(), - pub = 'ax'", - $userax['uid'], $new_adrid, - $adr['adr1'], $adr['adr2'], $adr['adr3'], - $adr['postcode'], $adr['city'], - $a2); - // import tels - if ($adr['tel']) - $globals->xdb->execute( - "INSERT INTO adresses - SET uid = {?}, adrid = {?}, tel = {?}, - telid = 0, tel_type = 'Tel.', tel_pub = 'ax'", - $userax["uid"], $new_adrid, $adr['tel']); - if ($adr['fax']) - $globals->xdb->execute( - "INSERT INTO adresses - SET uid = {?}, adrid = {?}, tel = {?}, - telid = 1, tel_type = 'Fax', tel_pub = 'ax'", - $userax["uid"], $new_adrid, $adr['fax']); + $adrax['countrytxt'] = ucwords(strtolower($ancien->Pays($i))); + $adrax['pub'] = 'ax'; + if ($ancien->Tel($i) || $ancien->Fax($i)) { + $adrax['tels'] = array(); + if ($tel = $ancien->Tel($i)) + $adrax['tels'][] = array('tel' => $tel, 'tel_type' => 'Tél.', 'tel_pub' => 'ax'); + if ($tel = $ancien->Fax($i)) + $adrax['tels'][] = array('tel' => $tel, 'tel_type' => 'Fax', 'tel_pub' => 'ax'); } + if ($ancien->Mobile($i)) $userax['mobile'] = $ancien->Mobile($i); + $userax['adr'][$i] = $adrax; } - if (is_array($add_pro)) { +/* $userax['formation'] = array(); + for($i=$ancien->Num_formation() - 1; $i >= 0; $i--) + $userax['formation'][$i] = $ancien->Formation($i);*/ - $res = $globals->xdb->query( - "SELECT entrid FROM entreprises - WHERE uid = {?} AND entrid >= 1 ORDER BY entrid", - $userax['uid']); - $entrids = $res->fetchColumn(); - $i_entrid = 0; - $new_entrid = 1; - - $nb_entr = count($entrids); - - foreach($add_pro as $entrid) if ($nb_entr < 2) { - - $nb_entr++; - - $pro = $userax['adr_pro'][$entrid]; - - // find the next adrid not used - while ($entrids[$i_entrid] == $new_entrid) { - $i_entrid++; - $new_entrid++; - } - - if ($pro['country']) { - $res = $globals->xdb->query( - "SELECT a2 FROM geoloc_pays - WHERE pays LIKE {?} OR country LIKE {?}", - $pro['country'], $pro['country']); - $a2 = $res->fetchOneCell(); - } - if (!$a2) { $a2 = '00'; } - - $globals->xdb->execute( - "INSERT INTO entreprises - SET uid = {?}, entrid = {?}, - entreprise = {?}, poste = {?}, - adr1 = {?}, adr2 = {?}, adr3 = {?}, - postcode = {?}, city = {?}, - country = {?}, - tel = {?}, fax = {?}, - pub = 'ax', adr_pub = 'ax', tel_pub = 'ax'", - $userax['uid'], $new_entrid, - $pro['entreprise'], $pro['fonction'], - $pro['adr1'], $pro['adr2'], $pro['adr3'], - $pro['postcode'], $pro['city'], - $a2, - $pro['tel'], $pro['fax']); - } - } + return $userax; } -function copy_from_ax($uid) -{ - $uax = get_user_ax($uid); - import_from_ax($uax, false, true, null, array_keys($uax['adr']), null, array_keys($uax['adr_pro']), true); +function ax_synchronize($login, $uid) { + require_once('user.func.inc.php'); + require_once 'profil.func.inc.php'; + // get details from user, but looking only info that can be seen by ax + $user = get_user_details($login, $uid, 'ax'); + $userax= get_user_ax($user['matricule_ax']); + $diff = diff_user_details($userax, $user, 'ax'); + set_user_details($user['user_id'], $diff); } - // vim:set et sw=4 sts=4 sws=4: ?> diff --git a/include/user.func.inc.php b/include/user.func.inc.php index aa38c85..980d566 100644 --- a/include/user.func.inc.php +++ b/include/user.func.inc.php @@ -26,7 +26,7 @@ */ function user_clear_all_subs($user_id, $really_del=true) { - // keep datas in : aliases, adresses, applis_ins, binets_ins, contacts, groupesx_ins, homonymes, identification_ax, photo + // keep datas in : aliases, adresses, tels, applis_ins, binets_ins, contacts, groupesx_ins, homonymes, identification_ax, photo // delete in : auth_user_md5, auth_user_quick, competences_ins, emails, entreprises, langues_ins, mentor, // mentor_pays, mentor_secteurs, newsletter_ins, perte_pass, requests, user_changes, virtual_redirect, watch_sub // + delete maillists @@ -167,7 +167,7 @@ function get_user_details_pro($uid, $view = 'private') { global $globals; $sql = "SELECT e.entreprise, s.label as secteur , ss.label as sous_secteur , f.fonction_fr as fonction, - e.poste, e.adr1, e.adr2, e.adr3, e.postcode, e.city, + e.poste, e.adr1, e.adr2, e.adr3, e.postcode, e.city, e.entrid, gp.pays AS countrytxt, gr.name AS region, e.tel, e.fax, e.mobile, e.entrid, e.pub, e.adr_pub, e.tel_pub, e.email, e.email_pub, e.web FROM entreprises AS e @@ -185,21 +185,41 @@ function get_user_details_pro($uid, $view = 'private') unset($all_pro[$i]); else { if (!has_user_right($pro['adr_pub'], $view)) { - $all_pro[$i]['adr1'] = ''; - $all_pro[$i]['adr2'] = ''; - $all_pro[$i]['adr3'] = ''; - $all_pro[$i]['postcode'] = ''; - $all_pro[$i]['city'] = ''; - $all_pro[$i]['countrytxt'] = ''; - $all_pro[$i]['region'] = ''; + if ($pro['adr1'] == '' && + $pro['adr2'] == '' && + $pro['adr3'] == '' && + $pro['postcode'] == '' && + $pro['city'] == '' && + $pro['countrytxt'] == '' && + $pro['region'] == '') { + $all_pro[$i]['adr_pub'] = $view; + } else { + $all_pro[$i]['adr1'] = ''; + $all_pro[$i]['adr2'] = ''; + $all_pro[$i]['adr3'] = ''; + $all_pro[$i]['postcode'] = ''; + $all_pro[$i]['city'] = ''; + $all_pro[$i]['countrytxt'] = ''; + $all_pro[$i]['region'] = ''; + } } if (!has_user_right($pro['tel_pub'], $view)) { - $all_pro[$i]['tel'] = ''; - $all_pro[$i]['fax'] = ''; - $all_pro[$i]['mobile'] = ''; + // if no tel was defined, then the viewer will be able to write it + if ($pro['tel'] == '' && + $pro['fax'] == '' && + $pro['mobile'] == '') { + $all_pro[$i]['tel_pub'] = $view; + } else { + $all_pro[$i]['tel'] = ''; + $all_pro[$i]['fax'] = ''; + $all_pro[$i]['mobile'] = ''; + } } if (!has_user_right($pro['email_pub'], $view)) { - $all_pro[$i]['email'] = ''; + if ($pro['email'] == '') + $all_pro[$i]['email_pub'] = $view; + else + $all_pro[$i]['email'] = ''; } if ($all_pro[$i]['adr1'] == '' && $all_pro[$i]['adr2'] == '' && @@ -279,6 +299,7 @@ function &get_user_details($login, $from_uid = '', $view = 'private') a.alias AS forlife, a2.alias AS bestalias, c.uid IS NOT NULL AS is_contact, s.text AS section, p.x, p.y, p.pub AS photo_pub, + u.matricule_ax, m.expertise != '' AS is_referent FROM auth_user_md5 AS u @@ -302,11 +323,26 @@ function &get_user_details($login, $from_uid = '', $view = 'private') $user['section'] = ''; } // hide mobile - if (!has_user_right($user['mobile_pub'], $view)) $user['mobile'] = ''; + if (!has_user_right($user['mobile_pub'], $view)) { + if ($user['mobile'] == '') + $user['mobile_pub'] = $view; + else + $user['mobile'] = ''; + } // hide web - if (!has_user_right($user['web_pub'], $view)) $user['web'] = ''; + if (!has_user_right($user['web_pub'], $view)) { + if ($user['web'] == '') + $user['web_pub'] = $view; + else + $user['web'] = ''; + } // hide freetext - if (!has_user_right($user['freetext_pub'], $view)) $user['freetext'] = ''; + if (!has_user_right($user['freetext_pub'], $view)) { + if ($user['freetext'] == '') + $user['freetext_pub'] = $view; + else + $user['freetext'] = ''; + } $user['adr_pro'] = get_user_details_pro($uid, $view); $user['adr'] = get_user_details_adr($uid, $view); @@ -338,7 +374,9 @@ function &get_user_details($login, $from_uid = '', $view = 'private') ORDER BY ordre", $uid); $user['applis_fmt'] = Array(); + $user['formation'] = Array(); while (list($txt, $url, $type) = $res->next()) { + $user['formation'][] = $txt." ".$type; require_once('applis.func.inc.php'); $user['applis_fmt'][] = applis_fmt($type, $txt, $url); } @@ -358,8 +396,255 @@ function &get_user_details($login, $from_uid = '', $view = 'private') return $user; } +// }}} +// {{{ function add_user_address() +function add_user_address($uid, $adrid, $adr) { + global $globals; + $globals->xdb->execute( + "INSERT INTO adresses (`uid`, `adrid`, `adr1`, `adr2`, `adr3`, `postcode`, `city`, `country`, `datemaj`, `pub`) ( + SELECT u.user_id, {?}, {?}, {?}, {?}, {?}, {?}, gp.a2, NOW(), {?} + FROM auth_user_md5 AS u + LEFT JOIN geoloc_pays AS gp ON (gp.pays LIKE {?} OR gp.country LIKE {?} OR gp.a2 LIKE {?}) + WHERE u.user_id = {?} + LIMIT 1)", + $adrid, $adr['adr1'], $adr['adr2'], $adr['adr3'], $adr['postcode'], $adr['city'], $adr['pub'], $adr['countrytxt'], $adr['countrytxt'], $adr['countrytxt'], $uid); + if (isset($adr['tels']) && is_array($adr['tels'])) { + $telid = 0; + foreach ($adr['tels'] as $tel) if ($tel['tel']) { + add_user_tel($uid, $adrid, $telid, $tel); + $telid ++; + } + } +} +// }}} +// {{{ function update_user_address() +function update_user_address($uid, $adrid, $adr) { + global $globals; + // update address + $globals->xdb->execute( + "UPDATE adresses AS a LEFT JOIN geoloc_pays AS gp ON (gp.pays = {?}) + SET `adr1` = {?}, `adr2` = {?}, `adr3` = {?}, + `postcode` = {?}, `city` = {?}, a.`country` = gp.a2, `datemaj` = NOW(), `pub` = {?} + WHERE adrid = {?} AND uid = {?}", + $adr['country_txt'], + $adr['adr1'], $adr['adr2'], $adr['adr3'], + $adr['postcode'], $adr['city'], $adr['pub'], $adrid, $uid); + if (isset($adr['tels']) && is_array($adr['tels'])) { + $res = $globals->xdb->query("SELECT telid FROM tels WHERE uid = {?} AND adrid = {?} ORDER BY telid", $uid, $adrid); + $telids = $res->fetchColumn(); + foreach ($adr['tels'] as $tel) { + if (isset($tel['telid']) && isset($tel['remove']) && $tel['remove']) { + remove_user_tel($uid, $adrid, $tel['telid']); + if (isset($telids[$tel['telid']])) unset($telids[$tel['telid']]); + } else if (isset($tel['telid'])) { + update_user_tel($uid, $adrid, $tel['telid'], $tel); + } else { + for ($telid = 0; isset($telids[$telid]) && ($telids[$telid] == $telid); $telid++); + add_user_tel($uid, $adrid, $telid, $tel); + } + } + } +} +// }}} +// {{{ function remove_user_address() +function remove_user_address($uid, $adrid) { + global $globals; + $globals->xdb->execute("DELETE FROM adresses WHERE adrid = {?} AND uid = {?}", $adrid, $uid); + $globals->xdb->execute("DELETE FROM tels WHERE adrid = {?} AND uid = {?}", $adrid, $uid); +} +// }}} +// {{{ function add_user_tel() +function add_user_tel($uid, $adrid, $telid, $tel) { + global $globals; + $globals->xdb->execute( + "INSERT INTO tels SET uid = {?}, adrid = {?}, telid = {?}, tel = {?}, tel_type = {?}, tel_pub = {?}", + $uid, $adrid, $telid, $tel['tel'], $tel['tel_type'], $tel['tel_pub']); +} +// }}} +// {{{ function update_user_tel() +function update_user_tel($uid, $adrid, $telid, $tel) { + global $globals; + $globals->xdb->execute( + "UPDATE tels SET tel = {?}, tel_type = {?}, tel_pub = {?} + WHERE telid = {?} AND adrid = {?} AND uid = {?}", + $tel['tel'], $tel['tel_type'], $tel['tel_pub'], + $telid, $adrid, $uid); +} +// }}} +// {{{ function remove_user_tel() +function remove_user_tel($uid, $adrid, $telid) { + global $globals; + $globals->xdb->execute("DELETE FROM tels WHERE telid = {?} AND adrid = {?} AND uid = {?}", $telid, $adrid, $uid); +} +// }}} +// {{{ function add_user_pro() +function add_user_pro($uid, $entrid, $pro) { + global $globals; + $globals->xdb->execute( + "INSERT INTO entreprises (`uid`, `entrid`, `entreprise`, `poste`, `secteur`, `ss_secteur`, `fonction`, + `adr1`, `adr2`, `adr3`, `postcode`, `city`, `country`, `region`, `tel`, `fax`, `mobile`, `email`, `web`, `pub`, `adr_pub`, `tel_pub`, `email_pub`) + SELECT u.user_id, {?}, {?}, {?}, s.id, ss.id, f.id, + {?}, {?}, {?}, {?}, {?}, gp.a2, gr.region, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?} + FROM auth_user_md5 AS u + LEFT JOIN emploi_secteur AS s ON(s.label LIKE {?}) + LEFT JOIN emploi_ss_secteur AS ss ON(s.id = ss.secteur AND ss.label LIKE {?}) + LEFT JOIN fonctions_def AS f ON(f.fonction_fr LIKE {?} OR f.fonction_en LIKE {?}) + LEFT JOIN geoloc_pays AS gp ON (gp.country LIKE {?} OR gp.pays LIKE {?}) + LEFT JOIN geoloc_region AS gr ON (gr.a2 = gp.a2 AND gr.name LIKE {?}) + WHERE u.user_id = {?} + LIMIT 1", + $entrid, $pro['entreprise'], $pro['poste'], + $pro['adr1'], $pro['adr2'], $pro['adr3'], $pro['postcode'], $pro['city'], $pro['tel'], $pro['fax'], $pro['mobile'], $pro['email'], $pro['web'], $pro['pub'], $pro['adr_pub'], $pro['tel_pub'], $pro['email_pub'], + $pro['secteur'], $pro['sous_secteur'], $pro['fonction'], $pro['fonction'], + $pro['countrytxt'], $pro['countrytxt'], $pro['region'], + $uid); +} +// }}} +// {{{ function update_user_pro() +function update_user_pro($uid, $entrid, $pro) { + global $globals; + $join = ""; + $set = ""; + $args_join = array(); + $args_set = array(); + + $join .= "LEFT JOIN emploi_secteur AS s ON(s.label LIKE {?}) + LEFT JOIN emploi_ss_secteur AS ss ON(s.id = ss.secteur AND ss.label LIKE {?}) + LEFT JOIN fonctions_def AS f ON(f.fonction_fr LIKE {?} OR f.fonction_en LIKE {?})"; + $args_join[] = $pro['secteur']; + $args_join[] = $pro['sous_secteur']; + $args_join[] = $pro['fonction']; + $args_join[] = $pro['fonction']; + $set .= ", e.`entreprise` = {?}, e.`secteur` = s.id, e.`ss_secteur` = ss.id, e.`fonction` = f.id, e.`poste`= {?}, e.`web` = {?}, e.`pub` = {?}"; + $args_set[] = $pro['entreprise']; + $args_set[] = $pro['poste']; + $args_set[] = $pro['web']; + $args_set[] = $pro['pub']; + + if (isset($pro['adr1'])) { + $join .= "LEFT JOIN geoloc_pays AS gp ON (gp.country LIKE {?} OR gp.pays LIKE {?}) + LEFT JOIN geoloc_region AS gr ON (gr.a2 = gp.a2 AND gr.name LIKE {?})"; + $args_join[] = $pro['countrytxt']; + $args_join[] = $pro['countrytxt']; + $args_join[] = $pro['region']; + $set .= ", e.`adr1` = {?}, e.`adr2` = {?}, e.`adr3` = {?}, e.`postcode` = {?}, e.`city` = {?}, e.`country` = gp.a2, e.`region` = gr.region, e.`adr_pub` = {?}"; + $args_set[] = $pro['adr1']; + $args_set[] = $pro['adr2']; + $args_set[] = $pro['adr3']; + $args_set[] = $pro['postcode']; + $args_set[] = $pro['city']; + $args_set[] = $pro['adr_pub']; + } + + if (isset($pro['tel'])) { + $set .= ", e.`tel` = {?}, e.`fax` = {?}, e.`mobile` = {?}, e.tel_pub = {?}"; + $args_set[] = $pro['tel']; + $args_set[] = $pro['fax']; + $args_set[] = $pro['mobile']; + $args_set[] = $pro['tel_pub']; + } + if (isset($pro['email'])) { + $set .= ", e.`email` = {?}, e.`email_pub` = {?}"; + $args_set[] = $pro['email']; + $args_set[] = $pro['email_pub']; + } + $query = "UPDATE entreprises AS e ".$join." SET ".substr($set,1)." WHERE e.uid = {?} AND e.entrid = {?}"; + $args_where = array($uid, $entrid); + $args = array_merge(array($query), $args_join, $args_set, $args_where); + $globals->db->query($globals->xdb->_prepare($args)); +} +// }}} +// {{{ function remove_user_pro() +function remove_user_pro($uid, $entrid) { + global $globals; + $globals->xdb->execute("DELETE FROM entreprises WHERE entrid = {?} AND uid = {?}", $entrid, $uid); +} +// }}} +// {{{ function set_user_details() +function set_user_details_addresses($uid, $adrs) { + global $globals; + $res = $globals->xdb->query("SELECT adrid FROM adresses WHERE uid = {?} AND adrid >= 1 ORDER BY adrid", $uid); + $adrids = $res->fetchColumn(); + foreach ($adrs as $adr) { + if (isset($adr['adrid']) && isset($adr['remove']) && $adr['remove']) { + remove_user_address($uid, $adr['adrid']); + if (isset($adrids[$adr['adrid']])) unset($adrids[$adr['adrid']]); + } else if (isset($adr['adrid'])) { + update_user_address($uid, $adr['adrid'], $adr); + } else { + for ($adrid = 1; isset($adrids[$adrid-1]) && ($adrids[$adrid-1] == $adrid); $adrid++); + add_user_address($uid, $adrid, $adr); + $adrids[$adrid-1] = $adrid; + } + } + require_once 'geoloc.inc.php'; + localize_addresses($uid); +} +// }}} +// {{{ function set_user_details_pro() + +function set_user_details_pro($uid, $pros) +{ + global $globals; + $res = $globals->xdb->query("SELECT entrid FROM entreprises WHERE uid = {?} ORDER BY entrid", $uid); + $entrids = $res->fetchColumn(); + foreach ($pros as $pro) { + if (isset($pro['entrid']) && isset($pro['remove']) && $pro['remove']) { + remove_user_pro($uid, $pro['entrid']); + if (isset($entrids[$pro['entrid']])) unset($entrids[$pro['entrid']]); + } else if (isset($pro['entrid'])) { + update_user_pro($uid, $pro['entrid'], $pro); + } else { + for ($entrid = 0; isset($entrids[$entrid]) && ($entrids[$entrid] == $entrid); $entrid++); + add_user_pro($uid, $entrid, $pro); + } + } +} // }}} +// {{{ function set_user_details() +function set_user_details($uid, $details) { + global $globals; + if (isset($details['nom_usage'])) { + $globals->xdb->execute("UPDATE auth_user_md5 SET nom_usage = {?} WHERE user_id = {?}", strtoupper($details['nom_usage']), $uid); + } + if (isset($details['mobile'])) { + $globals->xdb->execute("UPDATE auth_user_quick SET profile_mobile = {?} WHERE user_id = {?}", $details['mobile'], $uid); + } + if (isset($details['nationalite'])) { + $globals->xdb->execute( + "UPDATE auth_user_md5 AS u + INNER JOIN geoloc_pays AS gp + SET u.nationalite = gp.a2 + WHERE (gp.a2 = {?} OR gp.nat = {?}) + AND u.user_id = {?}", $details['nationalite'], $details['nationalite'], $uid); + } + if (isset($details['adr']) && is_array($details['adr'])) + set_user_details_addresses($uid, $details['adr']); + if (isset($details['adr_pro']) && is_array($details['adr_pro'])) + set_user_details_pro($uid, $details['adr_pro']); + if (isset($details['binets']) && is_array($details['binets'])) { + $globals->xdb->execute("DELETE FROM binets_ins WHERE user_id = {?}", $uid); + foreach ($details['binets'] as $binet) + $globals->xdb->execute( + "INSERT INTO binets_ins (`user_id`, `binet_id`) + SELECT {?}, id FROM binets_def WHERE text = {?} LIMIT 1", + $uid, $binet); + } + if (isset($details['gpxs']) && is_array($details['gpxs'])) { + $globals->xdb->execute("DELETE FROM groupesx_ins WHERE user_id = {?}", $uid); + foreach ($details['gpxs'] as $groupex) { + if (preg_match('/([^<]+)/', $groupex, $a)) $groupex = $a[1]; + $globals->xdb->execute( + "INSERT INTO groupesx_ins (`user_id`, `binet_id`) + SELECT {?}, id FROM groupesx_def WHERE text = {?} LIMIT 1", + $uid, $groupex); + } + } + // applis + // medals +} +// }}} // {{{ function _user_reindex function _user_reindex($uid, $keys, $muls) { diff --git a/templates/admin/synchro_ax.tpl b/templates/admin/synchro_ax.tpl index f3bf34d..b8239f7 100644 --- a/templates/admin/synchro_ax.tpl +++ b/templates/admin/synchro_ax.tpl @@ -1,6 +1,6 @@ {**************************************************************************} {* *} -{* Copyright (C) 2003-2004 Polytechnique.org *} +{* Copyright (C) 2003-2006 Polytechnique.org *} {* http://opensource.polytechnique.org/ *} {* *} {* This program is free software; you can redistribute it and/or modify *} @@ -49,175 +49,95 @@ ATTENTION ! Cet utilisateur n'a pas accepté la synchronisation {/if} +
Les fiches de cet utilisateur : + +
+{if $diff} - - - - - - - - - - - - -{foreach from=$watch_champs item='i'} - {if $x[$i] or $ax[$i]} - +{foreach from=$diff key='k' item='i'} +{if ($k neq 'adr') and ($k neq 'adr_pro')} + - {/if} +{/if} {/foreach} -
champx.orgimporterAX
fiche - polytechnique.org - - - polytechniciens.com -
- {$i} + {$k} - {$x[$i]} + {$x[$k]} - {if $x[$i] eq $ax[$i]} - == - {else} - {if $ax[$i]} - - {/if} - {/if} - {$ax[$i]} + {$i}
- - - +{foreach from=$diff.adr item='adr'} + +{/foreach} {/if} - - - +{foreach from=$diff.adr_pro item='pro'} + +{/foreach} {/if} - -
-{if $ax.adr[0]} -{if $x.adr} -
- Supprimer les adresses suivantes : -
- - {foreach from=$x.adr item='adr'} - - - - - {/foreach} -
- - - {include file='geoloc/address.tpl' address=$adr no_div=1} -
-
- et les remplacer par les adresses suivantes de l'AX : -
+{if $diff.adr} +
+Adresses +
+{if $adr.remove} + Effacer l'adresse {$adr.adrid}. {else} -
- Importer les adresses AX suivantes : -
+ {if $adr.adrid}Modifier l'adresse {$adr.adrid} :{else}Ajouter l'adresse :{/if} + {include file='geoloc/address.tpl' address=$adr no_div=1} {/if} - - {foreach from=$ax.adr item='adr' key='adrid'} - - - - - {/foreach} -
- - - {include file='geoloc/address.tpl' address=$adr no_div=1} -
+
-{if $ax.adr_pro[0].entreprise} -{if $x.adr_pro} -
- Supprimer les emplois suivants : -
- - {foreach from=$x.adr_pro item='pro'} - {if ($pro.poste) or ($pro.fonction) or ($pro.entreprise)} - - - - - {/if} - {/foreach} -
- - - {if $pro.entreprise} -
- Entreprise/Organisme : {$pro.entreprise} -
- {/if} - {if $pro.secteur} -
- Secteur : - {$pro.secteur}{if $pro.ss_secteur} ({$pro.ss_secteur}){/if} -
- {/if} - {if $pro.fonction} -
- Fonction : {$pro.fonction} -
- {/if} - {if $pro.poste} -
- Poste : {$pro.poste} -
- {/if} - {include file='geoloc/address.tpl' address=$pro no_div=1} -
-
- et les remplacer par les emplois suivants de l'AX : -
+{if $diff.adr_pro} +
+Emplois +
+{if $pro.remove} + Effacer l'emploi {$pro.entrid}. {else} -
- Importer les emplois suivants depuis l'AX : -
-{/if} - - {foreach from=$ax.adr_pro item='pro' key='proid'} - {if ($pro.poste) or ($pro.fonction) or ($pro.entreprise)} - - - - + {if $pro.entrid || $pro.entrid === 0}Modifier l'emploi {$pro.entrid} :{else}Ajouter l'emploi :{/if} + {if $pro.entreprise} +
+ Entreprise/Organisme : {$pro.entreprise} +
{/if} - {/foreach} -
- - - {if $pro.entreprise} -
- Entreprise/Organisme : {$pro.entreprise} -
- {/if} - {if $pro.fonction} -
- Fonction : {$pro.fonction} -
- {/if} - {include file='geoloc/address.tpl' address=$pro no_div=1} -
+ {if $pro.secteur} +
+ Secteur : + {$pro.secteur}{if $pro.ss_secteur} ({$pro.ss_secteur}){/if} +
+ {/if} + {if $pro.fonction} +
+ Fonction : {$pro.fonction} +
+ {/if} + {if $pro.poste} +
+ Poste : {$pro.poste} +
+ {/if} + {include file='geoloc/address.tpl' address=$pro no_div=1} +{/if} +
- +
+{else} +
+ Le profil actuel est synchronisé avec les données de l'AX. +
+{/if} + {/if} diff --git a/templates/profil/general.tpl b/templates/profil/general.tpl index 3ce7be6..0429a4d 100644 --- a/templates/profil/general.tpl +++ b/templates/profil/general.tpl @@ -1,6 +1,6 @@ {**************************************************************************} {* *} -{* Copyright (C) 2003-2004 Polytechnique.org *} +{* Copyright (C) 2003-2006 Polytechnique.org *} {* http://opensource.polytechnique.org/ *} {* *} {* This program is free software; you can redistribute it and/or modify *} @@ -148,8 +148,16 @@ - - Le service annuaire de l'AX met à jour l'annuaire papier à partir des informations que tu lui envoies. Tu peux choisir ici de récupérer directement ces données pour l'annuaire en ligne. + +

+ Le service annuaire de l'AX met à jour l'annuaire papier à partir des informations que tu lui envoies. Tu peux choisir ici de récupérer directement ces données pour l'annuaire en ligne. +

+

+ La synchro prend en compte toutes les informations que tu as signalés à l'AX (en orange ou en vert). Elle peut alors effacer, modifier ou rajouter des informations selon ce qu'elle trouve sur ta fiche AX. +

+

+ +

@@ -160,7 +168,7 @@ - Autoriser la synchronisation depuis l'AX. + Autoriser la synchronisation depuis l'AX par des administrateurs ou des scripts automatiques. -- 2.1.4