Synchronize fiche from AX
authorx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Wed, 14 Jun 2006 22:51:02 +0000 (22:51 +0000)
committerx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Wed, 14 Jun 2006 22:51:02 +0000 (22:51 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@315 839d8a87-29fc-0310-9880-83ba4fa771e5

ChangeLog
htdocs/admin/synchro_ax.php
htdocs/profil.php
include/profil.func.inc.php
include/profil/assign_general.inc.php
include/profil/get_general.inc.php
include/profil/update_general.inc.php
include/synchro_ax.inc.php
include/user.func.inc.php
templates/admin/synchro_ax.tpl
templates/profil/general.tpl

index 043a063..4ec746e 100644 (file)
--- 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
index bb64663..45205aa 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  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   *
@@ -44,58 +44,18 @@ if (Env::has('mat')) {
 }
 
 if ($login) {
-    $new   = Env::get('modif') == 'new';
-    $user  = get_user_details($login, Session::getInt('uid'));
-    $userax= get_user_ax($user['user_id']);
-
-    if (Env::has('importe')) {
-
-        $adr_dels = array();
-        foreach ($user['adr'] as $adr) {
-            if (Env::has('del_address'.$adr['adrid'])) {
-                $adr_dels[] = $adr['adrid'];
-            }
-        }
-
-        $adr_adds = array();
-        foreach ($userax['adr'] as $i => $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();
 
index 8a968db..d8455df 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  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   *
@@ -29,8 +29,12 @@ require_once('profil.func.inc.php');
 
 if (Post::has('register_from_ax_question')) {
     $globals->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
index 6da490a..a20ce4c 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  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   *
@@ -45,4 +45,243 @@ function put_in_db($string){
     return trim($string);
 }
 
+// example of use for diff_user_details : get $b from database, $a from other site
+//  calculate diff $c and add $c in database (with set_user_details)            
+function diff_user_details(&$a, &$b, $view = 'private') { // compute $c = $a - $b
+//    if (!isset($b) || !$b || !is_array($b) || count($b) == 0)
+//        return $a;
+//    if (!isset($a) || !$a || !is_array($a))
+//        $c = array();
+//    else
+        $c = $a;
+    foreach ($b as $val => $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;
+}
+
 ?>
index ef2d1c7..0c7ed74 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  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   *
@@ -47,4 +47,5 @@ $page->assign('nouvellephoto', $nouvellephoto);
 $page->assign('nickname', $nickname);
 
 $page->assign('synchro_ax', $synchro_ax);
+$page->assign('matricule_ax', $matricule_ax);
 ?>
index c6c7e5a..cc78409 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  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   *
@@ -22,7 +22,7 @@
 // on ramène les données du profil connecté (uid paramètre de session)
 $sql = "SELECT  u.nom, u.prenom, u.nom_ini, u.prenom_ini, u.promo, u.promo_sortie, u.nom_usage, u.nationalite,
                q.profile_mobile, q.profile_mobile_pub, q.profile_web, q.profile_web_pub, q.profile_freetext, q.profile_freetext_pub, q.profile_nick,
-                q.profile_from_ax,
+                q.profile_from_ax, u.matricule_ax,
                 a1.aid, a1.type, a2.aid, a2.type
           FROM  auth_user_md5   AS u
     INNER JOIN  auth_user_quick AS q  USING(user_id)
@@ -33,7 +33,7 @@ $sql = "SELECT  u.nom, u.prenom, u.nom_ini, u.prenom_ini, u.promo, u.promo_sorti
 $result = $globals->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));
index 8921abc..0b3d818 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  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   *
index 3f78e2b..affab3c 100644 (file)
@@ -24,60 +24,60 @@ require_once("xorg.inc.php");
 
 require_once('user.func.inc.php');
 
-function get_user_ax($uid, $raw=false)
+function get_user_ax($matricule_ax, $raw=false)
 {
     require_once('webservices/ax/client.inc');
 
     global $globals;
 
-    $res = $globals->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:
 ?>
index aa38c85..980d566 100644 (file)
@@ -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('/<a href="[^"]*">([^<]+)</a>/', $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) {
index f3bf34d..b8239f7 100644 (file)
@@ -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  *}
 <strong>ATTENTION !  Cet utilisateur n'a pas accepté la synchronisation</strong>
 </div>
 {/if}
+<div>Les fiches de cet utilisateur :
+<ul>
+<li><a href='{rel}/fiche.php?user={$x.user_id}' class='popup2'>polytechnique.org</a></li>
+<li><a href='http://www.polytechniciens.com/index.php?page=AX_FICHE_ANCIEN&amp;anc_id={$x.matricule_ax}'>polytechniciens.com</a></li>
+</ul>
+</div>
+{if $diff}
 <table class="bicol" cellpadding="0" cellspacing="0" border="1">
-  <tr>
-    <th>champ</th>
-    <th style='width:50%'>x.org</th>
-    <th>importer</th>
-    <th style='width:50%'>AX</th>
-  </tr>
-  <tr class="impair">
-    <td>fiche</td>
-    <td>
-      <a href='{rel}/fiche.php?user={$x.user_id}' class='popup2'>polytechnique.org</a>
-    </td>
-    <td>
-    </td>
-    <td>
-      <a href='http://www.polytechniciens.com/index.php?page=AX_FICHE_ANCIEN&amp;anc_id={$x.matricule_ax}'>polytechniciens.com</a>
-    </td>
-  </tr>
-{foreach from=$watch_champs item='i'}
-  {if $x[$i] or $ax[$i]}
-    <tr class="{if ($x[$i] eq $ax[$i]) or !$ax[$i]}im{/if}pair">
+{foreach from=$diff key='k' item='i'}
+{if ($k neq 'adr') and ($k neq 'adr_pro')}
+    <tr class="pair">
       <td>
-        {$i}
+        {$k}
       </td>
       <td>
-        {$x[$i]}
+        {$x[$k]}
       </td>
       <td class='center'>
-        {if $x[$i] eq $ax[$i]}
-          ==
-        {else}
-          {if $ax[$i]}
-            <input style='flat:right' type='checkbox' name='{$i}' />
-          {/if}
-        {/if}
       </td>
       <td>
-        {$ax[$i]}
+        {$i}
       </td>
     </tr>
-  {/if}
+{/if}
 {/foreach}
-</table>
 
-<table>
-<tr>
-<td>
-{if $ax.adr[0]}
-{if $x.adr}
-<div>
-  Supprimer les adresses suivantes :
-</div>
-<table>
-    {foreach from=$x.adr item='adr'}
-      <tr style="padding:5px">
-        <td>
-          <input type='checkbox' name='del_address{$adr.adrid}' />
-        </td>
-        <td>
-          {include file='geoloc/address.tpl' address=$adr no_div=1}
-        </td>
-      </tr>
-    {/foreach}
-</table>
-<div>
-  et les remplacer par les adresses suivantes de l'AX :
-</div>
+{if $diff.adr}
+<tr><th>
+Adresses
+</th></tr>
+{foreach from=$diff.adr item='adr'}
+<tr><td>
+{if $adr.remove}
+    Effacer l'adresse {$adr.adrid}.
 {else}
-<div>
-  Importer les adresses AX suivantes :
-</div>
+    {if $adr.adrid}Modifier l'adresse {$adr.adrid} :{else}Ajouter l'adresse :{/if}
+  {include file='geoloc/address.tpl' address=$adr no_div=1}
 {/if}
-<table>
-    {foreach from=$ax.adr item='adr' key='adrid'}
-      <tr style='padding:5px'>
-        <td>
-          <input type='checkbox' name='add_address{$adrid}' />
-        </td>
-        <td>
-          {include file='geoloc/address.tpl' address=$adr no_div=1}
-        </td>
-      </tr>
-    {/foreach}
-</table>
+</td></tr>
+{/foreach}
 {/if}
-</td>
-
-<td>
-{if $ax.adr_pro[0].entreprise}
-{if $x.adr_pro}
-<div>
-  Supprimer les emplois suivants :
-</div>
-<table>
-    {foreach from=$x.adr_pro item='pro'}
-    {if ($pro.poste) or ($pro.fonction) or ($pro.entreprise)}
-      <tr style='padding:5px'>
-        <td>
-          <input type='checkbox' name='del_pro{$pro.entrid}' />
-        </td>
-        <td>
-        {if $pro.entreprise}
-        <div>
-          <em>Entreprise/Organisme : </em> <strong>{$pro.entreprise}</strong>
-        </div>
-        {/if}
-        {if $pro.secteur}
-        <div>
-          <em>Secteur : </em>
-          <strong>{$pro.secteur}{if $pro.ss_secteur} ({$pro.ss_secteur}){/if}</strong>
-        </div>
-        {/if}
-        {if $pro.fonction}
-        <div>
-          <em>Fonction : </em> <strong>{$pro.fonction}</strong>
-        </div>
-        {/if}
-        {if $pro.poste}
-        <div>
-          <em>Poste : </em> <strong>{$pro.poste}</strong>
-        </div>
-        {/if}
-        {include file='geoloc/address.tpl' address=$pro no_div=1}
-        </td>
-      </tr>
-    {/if}
-    {/foreach}
-</table>
 
-<div>
-  et les remplacer par les emplois suivants de l'AX :
-</div>
+{if $diff.adr_pro}
+<tr><th>
+Emplois
+</th></tr>
+{foreach from=$diff.adr_pro item='pro'}
+<tr><td>
+{if $pro.remove}
+    Effacer l'emploi {$pro.entrid}.
 {else}
-<div>
-  Importer les emplois suivants depuis l'AX :
-</div>
-{/if}
-<table>
-    {foreach from=$ax.adr_pro item='pro' key='proid'}
-    {if ($pro.poste) or ($pro.fonction) or ($pro.entreprise)}
-      <tr style='padding:5px'>
-        <td>
-          <input type='checkbox' name='add_pro{$proid}' />
-        </td>
-        <td>
-        {if $pro.entreprise}
-        <div>
-          <em>Entreprise/Organisme : </em> <strong>{$pro.entreprise}</strong>
-        </div>
-        {/if}
-        {if $pro.fonction}
-        <div>
-          <em>Fonction : </em> <strong>{$pro.fonction}</strong>
-        </div>
-        {/if}
-        {include file='geoloc/address.tpl' address=$pro no_div=1}
-        </td>
-      </tr>
+    {if $pro.entrid || $pro.entrid === 0}Modifier l'emploi {$pro.entrid} :{else}Ajouter l'emploi :{/if}
+    {if $pro.entreprise}
+    <div>
+      <em>Entreprise/Organisme : </em> <strong>{$pro.entreprise}</strong>
+    </div>
     {/if}
-    {/foreach}
-</table>
+    {if $pro.secteur}
+    <div>
+      <em>Secteur : </em>
+      <strong>{$pro.secteur}{if $pro.ss_secteur} ({$pro.ss_secteur}){/if}</strong>
+    </div>
+    {/if}
+    {if $pro.fonction}
+    <div>
+      <em>Fonction : </em> <strong>{$pro.fonction}</strong>
+    </div>
+    {/if}
+    {if $pro.poste}
+    <div>
+      <em>Poste : </em> <strong>{$pro.poste}</strong>
+    </div>
+    {/if}
+  {include file='geoloc/address.tpl' address=$pro no_div=1}
+{/if}
+</td></tr>
+{/foreach}
 {/if}
-</td>
-</tr>
 </table>
 <div class='center'>
-  <input type='hidden' name='user' value='{$ax.uid}' />
+  <input type='hidden' name='user' value='{$smarty.request.user}' />
   <input type='submit' name='importe' value='Importer' />
 </div>
+{else}
+<div class='center'>
+    Le profil actuel est synchronisé avec les données de l'AX.
+</div>
+{/if}
+
 </form>
 {/if}
 
index 3ce7be6..0429a4d 100644 (file)
@@ -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  *}
       </th>
     </tr>
     <tr>
-      <td class="col">
-        Le service annuaire de l'<a href='http://www.polytechniciens.com'>AX</a> 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.
+      <td>
+        <p>
+          Le service annuaire de l'<a href='http://www.polytechniciens.com'>AX</a> 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.
+        </p>
+        <p>
+          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 <a href="http://www.polytechniciens.com/index.php?page=AX_FICHE_ANCIEN&amp;anc_id={$matricule_ax}">fiche AX</a>.
+        </p>
+        <p class="center">
+          <a href="?synchro_ax=confirm" onclick="return confirm('Es-tu sûr de vouloir lancer la synchronisation ?')"><input type="button" value="Synchroniser"/></a>
+        </p>
       </td>
     </tr>
     <tr>
               <input type="checkbox" name="synchro_ax" {if $synchro_ax}checked="checked" {/if}/>
             </td>
             <td class="texte">
-              Autoriser la synchronisation depuis l'AX.
+              Autoriser la synchronisation depuis l'AX par des administrateurs ou des scripts automatiques.
             </td>
           </tr>
         </table>