summaryrefslogtreecommitdiff
path: root/modules/gallery/libraries/drivers
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2009-10-06 11:20:51 -0700
committerTim Almdal <tnalmdal@shaw.ca>2009-10-06 11:20:51 -0700
commitc0683845048a0610316b5f3aaa9111793273f420 (patch)
treed2f1f4cb15725b1d866dacce6ecb5ced252108c8 /modules/gallery/libraries/drivers
parent194fba6fa8c87517ea70c41514f75ebc2d9bdf12 (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
Diffstat (limited to 'modules/gallery/libraries/drivers')
-rw-r--r--modules/gallery/libraries/drivers/Identity.php175
1 files changed, 174 insertions, 1 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);
+}