X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fpluser.php;h=c4ae622cbfd51f9a4bc1287b152398f47030ef9f;hb=47e54924f278c96cf95770cf56854255154b24fb;hp=84bcc60a1ced299cb18f3abf06f01000c086bef8;hpb=0be5c71cbe61952dd302aa11d5acf1ace292aaf3;p=platal.git diff --git a/classes/pluser.php b/classes/pluser.php index 84bcc60..c4ae622 100644 --- a/classes/pluser.php +++ b/classes/pluser.php @@ -55,9 +55,9 @@ 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 @@ -94,8 +94,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 +125,7 @@ abstract class PlUser */ public function id() { - return $this->user_id; + return $this->uid; } public function login() @@ -192,6 +192,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 +281,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 +297,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')); } /** @@ -370,6 +379,22 @@ abstract class PlUser */ abstract public static function isForeignEmailAddress($email); + private static function stripBadChars($text) + { + return str_replace(array(' ', "'"), array('-', ''), + strtolower(stripslashes(replace_accent(trim($text))))); + } + + /** Creates a username from a first and last name + * @param $firstname User's firstname + * @param $lasttname User's lastname + * return STRING the corresponding username + */ + public static function makeUserName($firstname, $lastname) + { + return self::stripBadChars($firstname) . '.' . self::stripBadChars($lastname); + } + /** * Creates a user forlive identifier from: * @param $firstname User's firstname @@ -378,17 +403,33 @@ abstract class PlUser */ public static function makeHrid($firstname, $lastname, $category) { - assert(trim($category)); - $plainFirstname = replace_accent(trim($firstname)); - $plainLastname = replace_accent(trim($lastname)); - - $hrid = strtolower($plainFirstname . '.' . $plainLastname . '.' . trim($category)); - $hrid = str_replace(' ', '-', $hrid); - $hrid = str_replace("'", '', $hrid); - return $hrid; + $cat = self::stripBadChars($category); + if (!cat) { + Platal::page()->kill("$category is not a suitable category."); + } + + 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: