Merge x-org-id and from header.
[platal.git] / modules / profile.php
index a211b13..5abe009 100644 (file)
@@ -24,17 +24,28 @@ class ProfileModule extends PLModule
     function handlers()
     {
         return array(
-            'photo'         => $this->make_hook('photo',        AUTH_PUBLIC),
-            'photo/change'  => $this->make_hook('photo_change', AUTH_MDP),
+            'photo'        => $this->make_hook('photo',        AUTH_PUBLIC),
+            'photo/change' => $this->make_hook('photo_change', AUTH_MDP),
 
-            'profile/usage' => $this->make_hook('p_usage',      AUTH_MDP),
+            'fiche.php'        => $this->make_hook('fiche',      AUTH_PUBLIC),
+            'profile'          => $this->make_hook('profile',    AUTH_PUBLIC),
+            'profile/orange'   => $this->make_hook('p_orange',   AUTH_MDP),
+            'profile/referent' => $this->make_hook('p_referent', AUTH_MDP),
+            'profile/usage'    => $this->make_hook('p_usage',    AUTH_MDP),
 
-            'trombi'        => $this->make_hook('trombi',       AUTH_COOKIE),
+            'trombi'  => $this->make_hook('trombi', AUTH_COOKIE),
 
-            'vcard'         => $this->make_hook('vcard',        AUTH_COOKIE),
+            'vcard'   => $this->make_hook('vcard',  AUTH_COOKIE),
         );
     }
 
+    /* XXX COMPAT */
+    function handler_fiche(&$page)
+    {
+        return $this->handler_profile($page, Env::get('user'));
+    }
+
+
     function _trombi_getlist($offset, $limit)
     {
         global $globals;
@@ -144,6 +155,210 @@ class ProfileModule extends PLModule
         return PL_OK;
     }
 
+    function handler_profile(&$page, $x = null)
+    {
+        if (is_null($x)) {
+            return PL_NOT_FOUND;
+        }
+
+        global $globals;
+        require_once 'user.func.inc.php';
+
+        $page->changeTpl('fiche.tpl');
+        $page->assign('simple', true);
+
+        $view = 'private';
+        if (!logged() || Env::get('view') == 'public') $view = 'public';
+        if (logged() && Env::get('view') == 'ax')      $view = 'ax';
+
+        if (is_numeric($x)) {
+            $res = $globals->xdb->query(
+                    "SELECT  alias 
+                       FROM  aliases       AS a
+                 INNER JOIN  auth_user_md5 AS u ON (a.id=u.user_id AND a.type='a_vie')
+                      WHERE  matricule={?}", $x);
+            $login = $res->fetchOneCell();
+        } else {
+            $login = get_user_forlife($x);
+        }
+
+        if (empty($login)) {
+            return PL_NOT_FOUND;
+        }
+
+        $new   = Env::get('modif') == 'new';
+        $user  = get_user_details($login, Session::getInt('uid'), $view);
+        $title = $user['prenom'] . ' ' . empty($user['nom_usage']) ? $user['nom'] : $user['nom_usage'];
+        $page->assign('xorg_title', $title);
+
+        // photo
+
+        $photo = $globals->baseurl.'/photo/'.$user['forlife'].($new ? '/req' : '');
+
+        if(!isset($user['y']) and !isset($user['x'])) {
+            list($user['x'], $user['y']) = getimagesize("images/none.png");
+        }
+        if(!isset($user['y']) or $user['y'] < 1) $user['y']=1;
+        if(!isset($user['x']) or $user['x'] < 1) $user['x']=1;
+        if($user['x'] > 240){
+            $user['y'] = (integer)($user['y']*240/$user['x']);
+            $user['x'] = 240;
+        }
+        if($user['y'] > 300){
+            $user['x'] = (integer)($user['x']*300/$user['y']);
+            $user['y'] = 300;
+        }
+        if($user['x'] < 160){
+            $user['y'] = (integer)($user['y']*160/$user['x']);
+            $user['x'] = 160;
+        }
+
+        $page->assign('logged', has_user_right('private', $view));
+        if (!has_user_right($user['photo_pub'], $view)) {
+            $photo = "";
+        }
+
+        $page->assign_by_ref('x', $user);
+        $page->assign('photo_url', $photo);
+        // alias virtual
+        $res = $globals->xdb->query(
+                "SELECT alias
+                   FROM virtual
+             INNER JOIN virtual_redirect USING(vid)
+             INNER JOIN auth_user_quick  ON ( user_id = {?} AND emails_alias_pub = 'public' )
+                  WHERE ( redirect={?} OR redirect={?} )
+                        AND alias LIKE '%@{$globals->mail->alias_dom}'",
+                Session::getInt('uid'),
+                $user['forlife'].'@'.$globals->mail->domain,
+                $user['forlife'].'@'.$globals->mail->domain2);
+        $page->assign('virtualalias', $res->fetchOneCell());
+
+        $page->addJsLink('javascript/close_on_esc.js');
+
+        return PL_OK;
+    }
+
+    function handler_p_orange(&$page)
+    {
+        global $globals;
+
+        $page->changeTpl('orange.tpl');
+
+        require_once 'validations.inc.php';
+        require_once 'xorg.misc.inc.php';
+
+        $res = $globals->xdb->query(
+                "SELECT  u.promo,u.promo_sortie
+                   FROM  auth_user_md5  AS u
+                  WHERE  user_id={?}", Session::getInt('uid'));
+
+        list($promo,$promo_sortie_old) = $res->fetchOneRow();
+        $page->assign('promo_sortie_old', $promo_sortie_old);
+        $page->assign('promo',  $promo);
+
+        if (!Env::has('promo_sortie')) {
+            return PL_OK;
+        }
+
+        $promo_sortie = Env::getInt('promo_sortie');
+
+        if ($promo_sortie < 1000 || $promo_sortie > 9999) {
+            $page->trig('L\'année de sortie doit être un nombre de quatre chiffres');
+        }
+        elseif ($promo_sortie < $promo + 3) {
+            $page->trig('Trop tôt');
+        }
+        elseif ($promo_sortie == $promo_sortie_old) {
+            $page->trig('Tu appartiens déjà à la promotion correspondante à cette année de sortie.');
+        }
+        elseif ($promo_sortie == $promo + 3) {
+            $globals->xdb->execute(
+                "UPDATE  auth_user_md5 set promo_sortie={?} 
+                  WHERE  user_id={?}",$promo_sortie,Session::getInt('uid'));
+                $page->trig('Ton statut "orange" a été supprimé.');
+                $page->assign('promo_sortie_old', $promo_sortie);
+        }
+        else {
+            $page->assign('promo_sortie', $promo_sortie);
+
+            if (Env::has('submit')) {
+                $myorange = new OrangeReq(Session::getInt('uid'),
+                                          $promo_sortie);
+                $myorange->submit();
+                $page->assign('myorange', $myorange);
+            }
+        }
+
+        return PL_OK;
+    }
+
+    function handler_p_referent(&$page, $x = null)
+    {
+        global $globals;
+
+        require_once 'user.func.inc.php';
+
+        if (is_null($x)) {
+            return PL_NOT_FOUND;
+        }
+
+        $page->changeTpl('fiche_referent.tpl');
+        $page->assign('simple', true);
+
+        $res = $globals->xdb->query(
+                "SELECT  prenom, nom, user_id, promo, cv, a.alias AS bestalias
+                  FROM  auth_user_md5 AS u
+            INNER JOIN  aliases       AS a ON (u.user_id=a.id AND FIND_IN_SET('bestalias',a.flags))
+            INNER JOIN  aliases       AS a1 ON (u.user_id=a1.id
+                                                AND a1.alias = {?}
+                                                AND a1.type!='homonyme')", $x);
+
+        if ($res->numRows() != 1) {
+            return PL_NOT_FOUND;
+        }
+
+        list($prenom, $nom, $user_id, $promo, $cv, $bestalias) = $res->fetchOneRow();
+
+        $page->assign('prenom', $prenom);
+        $page->assign('nom',    $nom);
+        $page->assign('promo',  $promo);
+        $page->assign('cv',     $cv);
+        $page->assign('bestalias', $bestalias);
+        $page->assign('adr_pro', get_user_details_pro($user_id));
+
+        /////  recuperations infos referent
+
+        //expertise
+        $res = $globals->xdb->query("SELECT expertise FROM mentor WHERE uid = {?}", $user_id);
+        $page->assign('expertise', $res->fetchOneCell());
+
+        //secteurs
+        $secteurs = $ss_secteurs = Array();
+        $res = $globals->xdb->iterRow(
+                "SELECT  s.label, ss.label
+                   FROM  mentor_secteurs AS m
+              LEFT JOIN  emploi_secteur AS s ON(m.secteur = s.id)
+              LEFT JOIN  emploi_ss_secteur AS ss ON(m.secteur = ss.secteur AND m.ss_secteur = ss.id)
+                  WHERE  uid = {?}", $user_id);
+        while (list($sec, $ssec) = $res->next()) {
+            $secteurs[]    = $sec;
+            $ss_secteurs[] = $ssec;
+        }
+        $page->assign_by_ref('secteurs', $secteurs);
+        $page->assign_by_ref('ss_secteurs', $ss_secteurs);
+
+        //pays
+        $res = $globals->xdb->query(
+                "SELECT  gp.pays
+                   FROM  mentor_pays AS m
+              LEFT JOIN  geoloc_pays AS gp ON(m.pid = gp.a2)
+                  WHERE  uid = {?}", $user_id);
+        $page->assign('pays', $res->fetchColumn());
+
+        $page->addJsLink('javascript/close_on_esc.js');
+        return PL_OK;
+    }
+
     function handler_p_usage(&$page)
     {
         global $globals;
@@ -172,7 +387,7 @@ class ProfileModule extends PLModule
             // on vient de recevoir une requete, differente de l'ancien nom d'usage
             if ($nom_usage == $nom) {
                 $page->assign('same', true);
-            } else { // le nom de mariage est distinct du nom à l'X
+            } else { // le nom de mariage est distinct du nom à l'X
                 // on calcule l'alias pour l'afficher
                 $reason = Env::get('reason');
                 if ($reason == 'other') {