}
}
+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,
* 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.
* 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
// <display name> !"), while full name is the official full name.
// 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
*/
public function id()
{
- return $this->user_id;
+ return $this->uid;
}
public function login()
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()
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.
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.
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'));
}
/**
if (strlen(trim($logins)) == 0) {
return null;
}
- $logins = split("[; ,\r\n\|]+", $logins);
+ $logins = preg_split("/[; ,\r\n\|]+/", $logins);
}
if ($logins) {
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
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: