summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/gallery/libraries/drivers/Identity.php175
-rw-r--r--modules/user/libraries/drivers/Identity/Gallery.php87
-rw-r--r--modules/user/models/user.php21
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
+}