Merge commit 'origin/master' into hruid.
authorVincent Zanotti <vincent.zanotti@polytechnique.org>
Fri, 27 Jun 2008 21:16:19 +0000 (23:16 +0200)
committerVincent Zanotti <vincent.zanotti@polytechnique.org>
Fri, 27 Jun 2008 21:16:19 +0000 (23:16 +0200)
Branch hruid is now broken -- will be repaired shortly.

Conflicts:

classes/session.php
classes/xnetsession.php
include/user.func.inc.php
include/xorg/session.inc.php
modules/profile.php

Signed-off-by: Vincent Zanotti <vincent.zanotti@polytechnique.org>
16 files changed:
1  2 
include/banana/forum.inc.php
include/banana/hooks.inc.php
include/banana/moderate.inc.php
include/user.func.inc.php
include/validations/nomusage.inc.php
include/vcard.inc.php
modules/admin.php
modules/carnet.php
modules/forums.php
modules/googleapps.php
modules/lists.php
modules/marketing.php
modules/platal.php
modules/profile.php
modules/register.php
modules/xnetgrp.php

Simple merge
Simple merge
Simple merge
@@@ -97,61 -96,35 +96,61 @@@ function _silent_user_callback($login
      return;
  }
  
 +// Returns an unique identifier corresponding to the @p data. This piece of data
 +// can be a numerical id, an hruid, an email alias (any), or a redirection
 +// email address. If @p get_forlife is set to true, the user's forlife is
 +// returned, otherwise the user's hruid is returned.
 +// When no user is found, calls @p callback, and eventually returns false.
  function get_user_login($data, $get_forlife = false, $callback = '_default_user_callback')
  {
-     global $globals, $page;
+     global $globals;
  
 +    // In order to reduce the code size & complexity, we define once for all the
 +    // field to be returned. By convention if will be "u.hruid" for the hruid
 +    // (thus implying the auth_user_md5 will be aliased on u), and "a.alias" for
 +    // the forlife (thus implying the forlife aliases table will be aliased on a).
 +    $field = ($get_forlife ? "CONCAT(a.alias, '@" . $globals->mail->domain . "')" : "u.hruid");
 +
 +    // If $data is an integer, fetches directly the result.
      if (is_numeric($data)) {
 -        $res = XDB::query("SELECT alias FROM aliases WHERE type='a_vie' AND id={?}", $data);
 +        $res = XDB::query("SELECT  $field
 +                             FROM  auth_user_md5 AS u
 +                        LEFT JOIN  aliases AS a ON (a.id = u.user_id AND type = 'a_vie')
 +                            WHERE  u.user_id = {?}", $data);
          if ($res->numRows()) {
              return $res->fetchOneCell();
 -        } else {
 -            call_user_func($callback, $data);
 -            return false;
          }
 +
 +        call_user_func($callback, $data);
 +        return false;
      }
  
 -    $data = trim(strtolower($data));
 +    // Checks whether $data is a valid hruid or not.
 +    $res = XDB::query("SELECT  $field
 +                         FROM  auth_user_md5 AS u
 +                    LEFT JOIN  aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
 +                        WHERE  u.hruid = {?}", $data);
 +    if ($res->numRows()) {
 +        return $res->fetchOneCell();
 +    }
  
 +    // From now, $data can only by an email alias, or an email redirection.
 +    // If it doesn't look like a valid address, appends the plat/al's main domain.
 +    $data = trim(strtolower($data));
      if (strstr($data, '@')===false) {
 -        $data = $data.'@'.$globals->mail->domain;
 +        $data = $data . '@' . $globals->mail->domain;
      }
  
 +    // Checks if $data is a valid alias on the main domains.
      list($mbox, $fqdn) = explode('@', $data);
      if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) {
 -
 -        $res = XDB::query("SELECT  a.alias
 -                             FROM  aliases AS a
 -                       INNER JOIN  aliases AS b ON (a.id = b.id AND b.type IN ('alias', 'a_vie') AND b.alias={?})
 -                            WHERE  a.type = 'a_vie'", $mbox);
 +        $res = XDB::query("SELECT  $field
 +                             FROM  auth_user_md5 AS u
 +                       INNER JOIN  aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
 +                       INNER JOIN  aliases AS b ON (b.id = u.user_id AND b.type IN ('alias', 'a_vie'))
 +                            WHERE  b.alias = {?}", $mbox);
          if ($res->numRows()) {
 -            return $get_forlife ? $res->fetchOneCell() : $mbox;
 +            return $res->fetchOneCell();
          }
  
          if (preg_match('/^(.*)\.([0-9]{4})$/u', $mbox, $matches)) {
          $res = XDB::query("SELECT  redirect
                               FROM  virtual_redirect
                         INNER JOIN  virtual USING(vid)
 -                            WHERE  alias={?}", $mbox.'@'.$globals->mail->alias_dom);
 +                            WHERE  alias = {?}", $mbox . '@' . $globals->mail->alias_dom);
          if ($redir = $res->fetchOneCell()) {
 -            list($alias) = explode('@', $redir);
 -        } else {
 -            call_user_func($callback, $data);
 -            $alias = false;
 -        }
 -        return $alias;
 -    } else {
 -
 -        $res = XDB::query("SELECT  alias
 -                                       FROM  aliases AS a
 -                                 INNER JOIN  emails  AS e ON e.uid=a.id
 -                                      WHERE  e.email={?} AND a.type='a_vie'", $data);
 -        switch ($i = $res->numRows()) {
 -            case 0:
 -                call_user_func($callback, $data);
 -                return false;
 +            list($alias, $alias_fqdn) = explode('@', $redir);
 +            if ($get_forlife) {
 +                // It might happen that the "secondary" forlife alias (the one
 +                // based on the secondary domaine name) is used as a target; we
 +                // then need to canonicalize it to the main domain.
 +                if ($alias_fqdn == $globals->mail->domain2) {
 +                    return $alias . "@" . $globals->mail->domain;
 +                }
 +                return $redir;
 +            }
  
 -            case 1:
 +            // We now have a valid alias, which has to be translated to an hruid.
 +            $res = XDB::query("SELECT  u.hruid
 +                                 FROM  auth_user_md5 AS u
 +                            LEFT JOIN  aliases AS a ON (a.id = u.user_id AND a.type IN ('alias', 'a_vie'))
 +                                WHERE  a.alias = {?}", $alias);
 +            if ($res->numRows()) {
                  return $res->fetchOneCell();
 +            }
 +        }
  
 -            default:
 -                if (S::has_perms()) {
 -                    $aliases = $res->fetchColumn();
 -                    Platal::page()->trigError("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases));
 -                } else {
 -                    $res->free();
 -                }
 +        call_user_func($callback, $data);
 +        return false;
 +
 +    // Otherwise, we do suppose $data is an email redirection.
 +    } else {
 +        $res = XDB::query("SELECT  $field
 +                             FROM  auth_user_md5 AS u
 +                        LEFT JOIN  aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
 +                        LEFT JOIN  emails AS e ON (e.uid = u.user_id)
 +                            WHERE  e.email = {?}", $data);
 +        if ($res->numRows() == 1) {
 +            return $res->fetchOneCell();
 +        } else if ($res->numRows() > 0) {
 +            if (S::has_perms()) {
-                 $page->trigError("Il y a $user_count utilisateurs avec cette adresse mail : " . join(', ', $res->fetchColumn()));
++                Platal::page()->trigError("Il y a $user_count utilisateurs avec cette adresse mail : " . join(', ', $res->fetchColumn()));
 +            } else {
 +                $res->free();
 +            }
 +        } else {
 +            call_user_func($callback, $data);
          }
 +
 +        return false;
      }
  
      return false;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -42,9 -42,9 +42,9 @@@ class GoogleAppsModule extends PLModul
          require_once("googleapps.inc.php");
          $page->changeTpl('googleapps/index.tpl');
          $page->addJsLink('motdepasse.js');
-         $page->assign('xorg_title', 'Polytechnique.org - Compte Google Apps');
+         $page->setTitle('Polytechnique.org - Compte Google Apps');
  
 -        $account = new GoogleAppsAccount(S::v('uid'), S::v('forlife'));
 +        $account = new GoogleAppsAccount(S::user());
  
          // Fills up the 'is Google Apps redirection active' variable.
          $page->assign('redirect_active', false);
Simple merge
Simple merge
Simple merge
@@@ -213,7 -218,7 +214,7 @@@ class ProfileModule extends PLModul
          }
  
          if (S::logged()) {
-             $_SESSION['log']->log('view_profile', $login->login());
 -            S::logger()->log('view_profile', $login);
++            S::logger()->log('view_profile', $login->login());
          }
  
          $title = $user['prenom'] . ' ' . ( empty($user['nom_usage']) ? $user['nom'] : $user['nom_usage'] );
Simple merge
Simple merge