X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fpluser.php;h=746ec593a955126cd819a8111994c0a2d58339a6;hb=663c7f8e9bdc2d3d3f36ad25a63e62913f3b25ce;hp=bd111babd409c40ab602cbfdebe08166d0e23f9a;hpb=2a683f7ff213da0d2a2fdd26f88b2025394c91d6;p=platal.git diff --git a/classes/pluser.php b/classes/pluser.php index bd111ba..746ec59 100644 --- a/classes/pluser.php +++ b/classes/pluser.php @@ -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. @@ -55,15 +66,17 @@ abstract class PlUser * false means the information is not available. */ - // user_id is internal user ID (potentially numeric), whereas hruid is a + // uid is internal user ID (potentially numeric), whereas hruid is a // "human readable" unique ID - protected $user_id = null; + protected $uid = null; 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 // !"), while full name is the official full name. @@ -94,8 +107,8 @@ abstract class PlUser // If the user id was not part of the known values, determines it from // the login. - if (!$this->user_id) { - $this->user_id = $this->getLogin($login); + if (!$this->uid) { + $this->uid = $this->getLogin($login); } // Preloads main properties (assumes the loader will lazily get them @@ -125,7 +138,7 @@ abstract class PlUser */ public function id() { - return $this->user_id; + return $this->uid; } public function login() @@ -133,13 +146,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() @@ -192,6 +222,15 @@ abstract class PlUser return property_exists($this, $name) || isset($this->data[$name]); } + public function __unset($name) + { + if (property_exists($this, $name)) { + $this->$name = null; + } else { + unset($this->data[$name]); + } + } + /** * Fills the object properties using the @p associative array; the intended * user case is to fill the object using SQL obtained arrays. @@ -272,7 +311,7 @@ abstract class PlUser public static function getWithUID($uid, $callback = false) { - return User::getWithValues(null, array('user_id' => $uid), $callback); + return User::getWithValues(null, array('uid' => $uid), $callback); } // Same as above, but using the silent callback as default. @@ -288,7 +327,7 @@ abstract class PlUser public static function getSilentWithUID($uid) { - return User::getWithValues(null, array('user_id' => $uid), array('User', '_silent_user_callback')); + return User::getWithValues(null, array('uid' => $uid), array('User', '_silent_user_callback')); } /** @@ -311,7 +350,7 @@ abstract class PlUser if (strlen(trim($logins)) == 0) { return null; } - $logins = split("[; ,\r\n\|]+", $logins); + $logins = preg_split("/[; ,\r\n\|]+/", $logins); } if ($logins) { @@ -362,18 +401,10 @@ 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('-', ''), - strtolower(stripslashed(replace_accent(trim($text))))); + strtolower(stripslashes(replace_accent(trim($text))))); } /** Creates a username from a first and last name @@ -402,7 +433,25 @@ abstract class PlUser return self::makeUserName($firstname, $lastname) . '.' . $cat; } + /** Reformats the firstname so that all letters are in lower case, + * except the first letter of each part of the name. + */ + public static function fixFirstnameCase($firstname) + { + $firstname = strtolower($firstname); + $pieces = explode('-', $firstname); + + foreach ($pieces as $piece) { + $subpieces = explode("'", $piece); + $usubpieces = ''; + foreach ($subpieces as $subpiece) { + $usubpieces[] = ucwords($subpiece); + } + $upieces[] = implode("'", $usubpieces); + } + return implode('-', $upieces); + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: