refactor code. get_user_login takes an uid, any alias, or any email address and gives...
authorPierre Habouzit (MadCoder <pierre.habouzit@m4x.org>
Sun, 12 Dec 2004 19:28:12 +0000 (19:28 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 26 Jun 2008 21:26:35 +0000 (23:26 +0200)
git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-69

htdocs/TESTS/xorg_errors.php [moved from htdocs/TESTS/xorg_errors.inc.php with 100% similarity]
htdocs/TESTS/xorg_user.php [new file with mode: 0644]
htdocs/admin/utilisateurs.php
include/user.func.inc.php
templates/alias.tpl

diff --git a/htdocs/TESTS/xorg_user.php b/htdocs/TESTS/xorg_user.php
new file mode 100644 (file)
index 0000000..1470e65
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+require_once("__init__.php");
+require_once("xorg.globals.inc.php");
+XorgGlobals::init();
+
+require_once('include/user.func.inc.php');
+
+class TestOfXOrgUsers extends UnitTestCase {
+    function TestOfXOrgUsers() {
+        $this->UnitTestCase('XOrg Users Test');
+    }
+
+    function test_get_user_login() {
+        global $page;
+
+        $login = get_user_login(18742);
+        $this->assertIdentical($login, 'pierre.habouzit.2000');
+        
+        $login = get_user_login(100000000);
+        $this->assertIdentical($login, false);
+
+
+        $login = get_user_login("madcoder@melix.org");
+        $this->assertIdentical($login, 'pierre.habouzit.2000');
+        
+        $login = get_user_login("madcoder@melix.net");
+        $this->assertIdentical($login, 'pierre.habouzit.2000');
+       
+
+        $login = get_user_login("madcoder@polytechnique.org");
+        $this->assertIdentical($login, 'madcoder');
+        
+        $login = get_user_login("madcoder@m4x.org");
+        $this->assertIdentical($login, 'madcoder');
+        
+        
+        $login = get_user_login("pierre.habouzit.2000");
+        $this->assertIdentical($login, 'pierre.habouzit.2000');
+       
+        $login = get_user_login("pierre.habouzit.2001");
+        $this->assertIdentical($login, false);
+        
+        
+        $login = get_user_login("madcoder@olympe.madism.org");
+        $this->assertIdentical($login, 'pierre.habouzit.2000');
+        
+        unset($page);
+    }
+}
+
+$test = &new TestOfXOrgUsers();
+$test->run(new HtmlReporter());
+?>
index 39c4e97..b192439 100644 (file)
@@ -22,6 +22,7 @@
 require_once("xorg.inc.php");
 new_admin_page('admin/utilisateurs.tpl');
 require_once("emails.inc.php");
+require_once("user.func.inc.php");
 
 /*
  * Already in SUID ?
@@ -31,23 +32,26 @@ if (isset($_SESSION['suid'])) {
     $page->kill("déjà en SUID !!!");
 }
 
+$login = isset($_REQUEST['login']) ? get_user_login($_REQUEST['login']) : false;
+
+
 /*
  * LOGS de l'utilisateur
  */
 
-if(isset($_REQUEST['logs_button'])) {
-    header("Location: logger.php?loguser={$_REQUEST['login']}&year=".date('Y')."&month=".date('m'));
+if(isset($_REQUEST['logs_button']) && $login) {
+    header("Location: logger.php?loguser=$login&year=".date('Y')."&month=".date('m'));
 }
 
 
 /*
  * SUID
  */
-if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SESSION['suid'])) {
-    $log_data = $_REQUEST['login']." by ".$_SESSION['forlife'];
+if(isset($_REQUEST['suid_button']) and $login and !isset($_SESSION['suid'])) {
+    $log_data = "login by ".$_SESSION['forlife'];
     $_SESSION['log']->log("suid_start",$log_data);
     $_SESSION['suid'] = $_SESSION;
-    $r=$globals->db->query("SELECT id FROM aliases WHERE alias='{$_REQUEST['login']}'");
+    $r=$globals->db->query("SELECT id FROM aliases WHERE alias='$login'");
     if(list($uid) = mysql_fetch_row($r)) {
        start_connexion($uid,true);
        header("Location: ../");
@@ -60,57 +64,16 @@ if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SE
  * LE RESTE
  */
 
-if (!empty($_REQUEST['login'])) {
-    $needle = strtolower($_REQUEST['login']);
-
-    if (strstr($needle, '@')!==false) {
-        list($mbox, $fqdn) = split('@', $needle);
-        if ($fqdn=='polytechnique.org' || $fqdn=='m4x.org') {
-            $login = $mbox;
-        } elseif ($fqdn =='melix.net' || $fqdn=='melix.org') {
-            $res = $globals->db->query("SELECT  redirect
-                                          FROM  virtual_redirect
-                                    INNER JOIN  virtual USING(vid)
-                                         WHERE  alias='$mbox@melix.net'");
-            if (list($redir) = mysql_fetch_row($res)) {
-                list($login) = split('@', $redir);
-            } else {
-                $page->trig("il n'y a pas d'utilisateur avec cet alias melix");
-            }
-            mysql_free_result($res);
-        } else {
-            $res = $globals->db->query("SELECT  alias
-                                          FROM  aliases AS a
-                                    INNER JOIN  emails  AS e ON e.uid=a.id
-                                         WHERE  e.email='$needle' AND a.type='a_vie'");
-            if (($i=mysql_num_rows($res))!=1) {
-                if ($i) {
-                    $aliases = Array();
-                    while (list($a) = mysql_fetch_row($res)) $aliases[] = $a;
-                    $page->trig("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases));
-                } else {
-                    $page->trig("il n'y a pas d'utilisateur avec cette adresse mail");
-                }
-            } else {
-                list($login) = mysql_fetch_row($res);
-            }
-            mysql_free_result($res);
-        }
+if ($login) {
+    $r=$globals->db->query("SELECT  *
+                              FROM  auth_user_md5 AS u
+                        INNER JOIN  aliases       AS a ON ( a.id = u.user_id AND a.alias='$login' AND type!='homonyme' )");
+    if ($tmp = mysql_fetch_assoc($r)) {
+        $mr =& $tmp;
     } else {
-        $login = $needle;
-    }
-
-    if (!empty($login)) {
-        $r=$globals->db->query("SELECT  *
-                                  FROM  auth_user_md5 AS u
-                            INNER JOIN  aliases       AS a ON ( a.id = u.user_id AND a.alias='$login' AND type!='homonyme' )");
-        if ($tmp = mysql_fetch_assoc($r)) {
-            $mr =& $tmp;
-        } else {
-            $page->trig("il n'y a pas d'utilisateur avec ce login (ou alors il a des homonymes)");
-        }
-        mysql_free_result($r);
+        $page->trig("il n'y a pas d'utilisateur avec ce login (ou alors il a des homonymes)");
     }
+    mysql_free_result($r);
 }
 
 if (!empty($_REQUEST['user_id'])) {
index e0879fc..aaea635 100644 (file)
@@ -67,6 +67,83 @@ function user_clear_all_subs($user_id, $really_del=true)
 }
 
 // }}}
+// {{{ function get_user_login()
 
+function get_user_login($data) {
+    global $globals, $page;
+
+    if (preg_match(',^[0-9]*$,', $data)) {
+        $res = $globals->db->query("SELECT alias FROM aliases WHERE type='a_vie' AND id=$data");
+        if (!mysql_num_rows($res)) {
+            $alias = false;
+        } else {
+            list($alias) = mysql_fetch_row($res);
+        }
+        mysql_free_result($res);
+        return $alias;
+    }
+
+    $data = trim(strtolower($data));
+
+    if (strstr($data, '@')===false) {
+        $data = $data.'@'.$globals->mail->domain;
+    }
+    
+    list($mbox, $fqdn) = split('@', $data);
+    if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) {
+
+        $res = $globals->db->query("SELECT COUNT(alias) FROM aliases WHERE alias='$mbox' AND type IN ('alias', 'a_vie')");
+        list($c) = mysql_fetch_row($res);
+        mysql_free_result($res);
+        if (!$c && $page) {
+            $page->trig("il n'y a pas d'utilisateur avec ce login");
+        }
+        return $c ? $mbox : false;
+
+    } elseif ($fqdn == $globals->mail->alias_dom || $fqdn == $globals->mail->alias_dom2) {
+    
+        $res = $globals->db->query("SELECT  redirect
+                                      FROM  virtual_redirect
+                                INNER JOIN  virtual USING(vid)
+                                     WHERE  alias='$mbox@{$globals->mail->alias_dom}'");
+        if (list($redir) = mysql_fetch_row($res)) {
+            list($alias) = split('@', $redir);
+        } else {
+            $page->trig("il n'y a pas d'utilisateur avec cet alias");
+            $alias = false;
+        }
+        mysql_free_result($res);
+        return $alias;
+
+    } else {
+
+        $res = $globals->db->query("SELECT  alias
+                                      FROM  aliases AS a
+                                INNER JOIN  emails  AS e ON e.uid=a.id
+                                     WHERE  e.email='$data' AND a.type='a_vie'");
+        switch ($i = mysql_num_rows($res)) {
+            case 0:
+                $page->trig("il n'y a pas d'utilisateur avec cette addresse mail");
+                $alias = false;
+                break;
+                
+            case 1:
+                list($alias) = mysql_fetch_row($res);
+                break;
+                
+            default:
+                $alias = false;
+                if (has_perms()) {
+                    $aliases = Array();
+                    while (list($a) = mysql_fetch_row($res)) $aliases[] = $a;
+                    $page->trig("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases));
+                }
+        }
+        mysql_free_result($res);
+        return $alias;
+    }
+}
+
+// }}}
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker:
 ?>
index e3fab2d..9d9893e 100644 (file)
@@ -19,8 +19,8 @@
  ***************************************************************************}
 
 
+{dynamic}
 {if $success}
-  {dynamic}
   <p>
   a demande de création des alias <strong>{$success}@{#globals.mail.alias_dom#}</strong> et
   <strong>{$success}@{#globals.mail.alias_dom2#}</strong> a bien été enregistrée. Après
@@ -29,7 +29,6 @@
   <p>
     Encore merci de nous faire confiance pour tes e-mails !
   </p>
-  {/dynamic}
 {else}
   <h1>
     Adresses e-mail personnalisées
@@ -45,7 +44,6 @@
     sans doute à toutes tes questions
   </p>
 
-  {dynamic}
   {if $actuel}
   <p>
   <strong>Note : tu as déjà l'alias {$actuel}, or tu ne peux avoir qu'un seul alias à la fois.
@@ -83,7 +81,7 @@
       </tr>
     </table>
   </form>
-  {/dynamic}
 {/if}
+{/dynamic}
 
 {* vim:set et sw=2 sts=2 sws=2: *}