diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-10-06 11:20:51 -0700 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-10-06 11:20:51 -0700 |
commit | c0683845048a0610316b5f3aaa9111793273f420 (patch) | |
tree | d2f1f4cb15725b1d866dacce6ecb5ced252108c8 | |
parent | 194fba6fa8c87517ea70c41514f75ebc2d9bdf12 (diff) |
Encapsulate the user and group model in Gallery_User and Gallery_Group classes which extend the User_Definition and Group_Definition classes defined in the Identity API
-rw-r--r-- | modules/gallery/libraries/drivers/Identity.php | 175 | ||||
-rw-r--r-- | modules/user/libraries/drivers/Identity/Gallery.php | 87 | ||||
-rw-r--r-- | modules/user/models/user.php | 21 |
3 files changed, 248 insertions, 35 deletions
diff --git a/modules/gallery/libraries/drivers/Identity.php b/modules/gallery/libraries/drivers/Identity.php index 31bcfe39..558679be 100644 --- a/modules/gallery/libraries/drivers/Identity.php +++ b/modules/gallery/libraries/drivers/Identity.php @@ -126,4 +126,177 @@ interface Identity_Driver { * @return stdClass containing the rules */ public function get_edit_rules($object_type); -} // End User Driver
\ No newline at end of file +} // End Identity Driver Definition + +/** + * User Data wrapper + */ +abstract class User_Definition { + protected $user; + public function __get($column) { + switch ($column) { + case "id": + case "name": + case "full_name": + case "password": + case "login_count": + case "last_login": + case "email": + case "admin": + case "guest": + case "hash": + case "url": + case "locale": + return $this->user->$column; + case "hashed_password": + throw new Exception("@todo WRITE ONLY FIELD: $column"); + break; + default: + throw new Exception("@todo UNSUPPORTED FIELD: $column"); + break; + } + } + + public function __set($column, $value) { + switch ($column) { + case "id": + throw new Exception("@todo READ ONLY FIELD: $column"); + break; + case "name": + case "full_name": + case "hashed_password": + case "password": + case "login_count": + case "last_login": + case "email": + case "admin": + case "guest": + case "hash": + case "url": + case "locale": + return $this->user->$column; + default: + throw new Exception("@todo UNSUPPORTED FIELD: $column"); + break; + } + } + + public function __isset($column) { + return isset($this->user->$column); + } + + public function __unset($column) { + switch ($column) { + case "id": + throw new Exception("@todo READ ONLY FIELD: $column"); + break; + case "name": + case "full_name": + case "password": + case "login_count": + case "last_login": + case "email": + case "admin": + case "guest": + case "hash": + case "url": + case "locale": + unset($this->user->$column); + break; + case "hashed_password": + throw new Exception("@todo WRITE ONLY FIELD: $column"); + default: + throw new Exception("@todo UNSUPPORTED FIELD: $column"); + break; + } + } + + /** + * 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->user->email), $size, $default ? "&d=" . urlencode($default) : ""); + } + + /** + * 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->user->full_name) ? $this->user->name : $this->user->full_name; + } + + public function uncloaked() { + return $this->user; + } + + abstract public function save(); + abstract public function delete(); +} + +/** + * Group Data wrapper + */ +abstract class Group_Definition { + protected $group; + + public function __get($column) { + switch ($column) { + case "id": + case "name": + case "special": + case "users": + return $this->group->$column; + default: + throw new Exception("@todo UNSUPPORTED FIELD: $column"); + break; + } + } + + public function __set($column, $value) { + switch ($column) { + case "id": + case "users": + throw new Exception("@todo READ ONLY FIELD: $column"); + break; + case "name": + case "special": + $this->group->$column = $value; + default: + throw new Exception("@todo UNSUPPORTED FIELD: $column"); + break; + } + } + + public function __isset($column) { + return isset($this->group->$column); + } + + public function __unset($column) { + switch ($column) { + case "id": + case "users": + throw new Exception("@todo READ ONLY FIELD: $column"); + break; + case "name": + case "special": + unset($this->group->$column); + default: + throw new Exception("@todo UNSUPPORTED FIELD: $column"); + break; + } + } + + public function uncloaked() { + return $this->group; + } + + abstract public function save(); + abstract public function delete(); + abstract public function add($user); + abstract public function remove($user); +} diff --git a/modules/user/libraries/drivers/Identity/Gallery.php b/modules/user/libraries/drivers/Identity/Gallery.php index 5e201cb7..f8816644 100644 --- a/modules/user/libraries/drivers/Identity/Gallery.php +++ b/modules/user/libraries/drivers/Identity/Gallery.php @@ -29,7 +29,7 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return User_Model */ public function guest() { - return model_cache::get("user", 1); + return new Gallery_User(model_cache::get("user", 1)); } /** @@ -51,11 +51,11 @@ class Identity_Gallery_Driver implements Identity_Driver { $user->password = $password; // Required groups - $user->add(group::everybody()); - $user->add(group::registered_users()); + $user->add($this->everybody()->uncloaked()); + $user->add($this->registered_users()->uncloaked()); $user->save(); - return $user; + return new Gallery_User($user); } /** @@ -112,7 +112,7 @@ class Identity_Gallery_Driver implements Identity_Driver { public function lookup_user($id) { $user = model_cache::get("user", $id); if ($user->loaded) { - return $user; + return new Gallery_User($user); } return null; } @@ -127,7 +127,7 @@ class Identity_Gallery_Driver implements Identity_Driver { try { $user = model_cache::get("user", $value, $field_name); if ($user->loaded) { - return $user; + return new Gallery_User($user); } } catch (Exception $e) { if (strpos($e->getMessage(), "MISSING_MODEL") === false) { @@ -152,7 +152,7 @@ class Identity_Gallery_Driver implements Identity_Driver { $group->name = $name; $group->save(); - return $group; + return new Gallery_Group($group); } /** @@ -161,7 +161,7 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return Group_Model */ public function everybody() { - return model_cache::get("group", 1); + return new Gallery_Group(model_cache::get("group", 1)); } /** @@ -170,7 +170,7 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return Group_Model */ public function registered_users() { - return model_cache::get("group", 2); + return new Gallery_Group(model_cache::get("group", 2)); } /** @@ -181,7 +181,7 @@ class Identity_Gallery_Driver implements Identity_Driver { public function lookup_group($id) { $group = model_cache::get("group", $id); if ($group->loaded) { - return $group; + return new Gallery_Group($group); } return null; } @@ -195,7 +195,7 @@ class Identity_Gallery_Driver implements Identity_Driver { try { $group = model_cache::get("group", $name, "name"); if ($group->loaded) { - return $group; + return new Gallery_Group($group); } } catch (Exception $e) { if (strpos($e->getMessage(), "MISSING_MODEL") === false) { @@ -211,7 +211,12 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return array the group list. */ public function list_users($filter=array()) { - return $this->_do_search("user", $filter); + $results = $this->_do_search("user", $filter); + $users = array(); + foreach ($results->as_array() as $user) { + $users[] = new Gallery_User($user); + } + return $users; } @@ -221,7 +226,12 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return array the group list. */ public function list_groups($filter=array()) { - return $this->_do_search("group", $filter); + $results = $this->_do_search("group", $filter); + $groups = array(); + foreach ($results->as_array() as $group) { + $groups[] = new Gallery_Group($group); + } + return $groups; } /** @@ -255,4 +265,53 @@ class Identity_Gallery_Driver implements Identity_Driver { return $object->find_all(); } -} // End Identity Gallery Driver
\ No newline at end of file +} // End Identity Gallery Driver + +/** + * User Data wrapper + */ +class Gallery_User extends User_Definition { + /* + * Not for general user, allows the back-end to easily create the interface object + */ + function __construct($user) { + $this->user = $user; + } + + public function save() { + $this->user->save(); + } + + public function delete() { + $this->user->delete(); + } + +} + +/** + * Group Data wrapper + */ +class Gallery_Group extends Group_Definition { + /* + * Not for general user, allows the back-end to easily create the interface object + */ + function __construct($group) { + $this->group = $group; + } + + public function save() { + $this->group->save(); + } + + public function delete() { + $this->group->delete(); + } + + public function add($user) { + $this->group->add($user->uncloaked()); + } + + public function remove($user) { + $this->group->remove($user->uncloaked()); + } +} diff --git a/modules/user/models/user.php b/modules/user/models/user.php index 55562f34..1993bd05 100644 --- a/modules/user/models/user.php +++ b/modules/user/models/user.php @@ -51,16 +51,6 @@ class User_Model extends ORM { 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; @@ -73,13 +63,4 @@ class User_Model extends ORM { } 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; - } -}
\ No newline at end of file +} |