Release plat/al core v1.1.13
[platal.git] / classes / pluser.php
index c4ae622..c974b7e 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -32,6 +32,17 @@ class UserNotFoundException extends Exception
     }
 }
 
+interface PlUserInterface
+{
+    public static function _default_user_callback($login, $results);
+
+    /**
+     * Determines if the @p login is an email address, and an email address not
+     * served locally by plat/al.
+     */
+    public static function isForeignEmailAddress($email);
+}
+
 /**
  * Represents an user of plat/al (without any further assumption), with a
  * special focus on always-used properties (identification fields, display name,
@@ -39,7 +50,7 @@ class UserNotFoundException extends Exception
  * NOTE: each implementation of plat/al-code MUST subclass PlUser, and name it
  * 'User'.
  */
-abstract class PlUser
+abstract class PlUser implements PlUserInterface
 {
     /**
      * User data enumerations.
@@ -61,14 +72,17 @@ abstract class PlUser
     protected $hruid = null;
 
     // User main email aliases (forlife is the for-life email address, bestalias
-    // is user-chosen preferred email address).
+    // is user-chosen preferred email address, email might be any email available
+    // for the user).
     protected $forlife = null;
     protected $bestalias = null;
+    protected $email = null;
 
     // Display name is user-chosen name to display (eg. in "Welcome
     // <display name> !"), while full name is the official full name.
     protected $display_name = null;
     protected $full_name = null;
+    protected $sort_name = null;
 
     // Other important parameters used when sending emails.
     protected $gender = null;  // Acceptable values are GENDER_MALE and GENDER_FEMALE
@@ -133,13 +147,30 @@ abstract class PlUser
         return $this->hruid;
     }
 
+    public function isMe($other)
+    {
+        if (!$other) {
+            return false;
+        } else if ($other instanceof PlUser) {
+            return $other->id() == $this->id();
+        } else {
+            return false;
+        }
+    }
+
     public function bestEmail()
     {
-        return $this->bestalias;
+        if (!empty($this->bestalias)) {
+            return $this->bestalias;
+        }
+        return $this->email;
     }
     public function forlifeEmail()
     {
-        return $this->forlife;
+        if (!empty($this->forlife)) {
+            return $this->forlife;
+        }
+        return $this->email;
     }
 
     public function displayName()
@@ -320,7 +351,7 @@ abstract class PlUser
             if (strlen(trim($logins)) == 0) {
                 return null;
             }
-            $logins = split("[; ,\r\n\|]+", $logins);
+            $logins = preg_split("/[; ,\r\n\|]+/", $logins);
         }
 
         if ($logins) {
@@ -337,7 +368,7 @@ abstract class PlUser
                     $list[$i] = $login;
                 }
             }
-            return $list;
+            return array_unique($list);
         }
         return null;
     }
@@ -371,17 +402,9 @@ abstract class PlUser
         return;
     }
 
-    abstract public static function _default_user_callback($login, $results);
-
-    /**
-     * Determines if the @p login is an email address, and an email address not
-     * served locally by plat/al.
-     */
-    abstract public static function isForeignEmailAddress($email);
-
     private static function stripBadChars($text)
     {
-        return str_replace(array(' ', "'"), array('-', ''),
+        return str_replace(array(' ', "'", '+'), array('-', '', '_'),
                            strtolower(stripslashes(replace_accent(trim($text)))));
     }
 
@@ -404,7 +427,7 @@ abstract class PlUser
     public static function makeHrid($firstname, $lastname, $category)
     {
         $cat = self::stripBadChars($category);
-        if (!cat) {
+        if (!$cat) {
             Platal::page()->kill("$category is not a suitable category.");
         }
 
@@ -432,5 +455,5 @@ abstract class PlUser
     }
 }
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
 ?>