"required|length[1,32]", "full_name" => "length[0,255]", "email" => "required|valid_email|length[1,255]", "password" => "length[1,40]", "url" => "valid_url", "locale" => "length[2,10]"); public function __set($column, $value) { switch ($column) { case "hashed_password": $column = "password"; break; case "password": $value = user::hash_password($value); break; } parent::__set($column, $value); } /** * @see ORM::delete() */ public function delete($id=null) { $old = clone $this; module::event("user_before_delete", $this); parent::delete($id); module::event("user_deleted", $old); } /** * Return a url to the user's avatar image. * @param integer $size the target size of the image (default 80px) * @return string a url */ public function avatar_url($size=80, $default=null) { return sprintf("http://www.gravatar.com/avatar/%s.jpg?s=%d&r=pg%s", md5($this->email), $size, $default ? "&d=" . urlencode($default) : ""); } public function save() { if (!$this->loaded) { $created = 1; } parent::save(); if (isset($created)) { module::event("user_created", $this); } else { module::event("user_updated", $this->original(), $this); } return $this; } /** * Return the best version of the user's name. Either their specified full name, or fall back * to the user name. * @return string */ public function display_name() { return empty($this->full_name) ? $this->name : $this->full_name; } }