summaryrefslogtreecommitdiff
path: root/apps/um/models
diff options
context:
space:
mode:
Diffstat (limited to 'apps/um/models')
-rw-r--r--apps/um/models/Auth.class.php157
-rw-r--r--apps/um/models/ContactMethod.class.php29
-rw-r--r--apps/um/models/Group.class.php23
-rw-r--r--apps/um/models/User.class.php25
4 files changed, 234 insertions, 0 deletions
diff --git a/apps/um/models/Auth.class.php b/apps/um/models/Auth.class.php
new file mode 100644
index 0000000..39f627e
--- /dev/null
+++ b/apps/um/models/Auth.class.php
@@ -0,0 +1,157 @@
+<?php
+require_once('Model.class.php');
+require_once('Login.class.php');
+require_once('Database.class.php');
+
+require_once('Group.class.php');
+require_once('User.class.php');
+
+class Auth extends Model {
+ /**********************************************************************\
+ * Multiton stuff *
+ \**********************************************************************/
+ private static $users = array();
+ public static function getInstance($uid) {
+ if (!isset(self::$users[$uid])) {
+ $type = Database::getInstance()->getStatus($uid);
+ switch ($type) {
+ case 0: // unactivated user
+ case 1: // user
+ case 2: $obj = new User($uid); // admin
+ case 3: $obj = new Group($uid);
+ case 4: $obj = new Auth($uid); // deleted
+ }
+ self::$users[$uid] = $obj;
+ }
+ return self::$users[$uid];
+ }
+
+ /**********************************************************************\
+ * Static stuff *
+ \**********************************************************************/
+ public static function isNameLegal($name) {
+ // Current rules:
+ // * Not in "$illegal_names"
+ // * Does not contain '.'
+ // * Fewer than 256 characters
+ $illegal_names = array('', 'new', 'index', 'all');
+ return true
+ && (!in_array($name, $illegal_names))
+ && (strpos($name,'.')===false)
+ && (strpos($name,'!')===false)
+ && (strlen($name)<256);
+ }
+
+ /**********************************************************************\
+ * Class stuff *
+ \**********************************************************************/
+ protected $uid = false;
+ public function __construct($uid) {
+ parent::__construct();
+ $this->uid = $uid;
+ }
+ public function getUID() {
+ return $this->uid;
+ }
+
+ /**********************************************************************\
+ * The 'auth' table. *
+ \**********************************************************************/
+
+ // Row Type ////////////////////////////////////////////////////////////
+ /**
+ * @return 0=unverified 1=user 2=admin 3=group 4=deleted
+ */
+ protected function getType() {
+ $type = $this->db->getStatus($this->uid);
+ return $type;
+ }
+ protected function setType($type) {
+ $logged_in_uid = Login::isLoggedIn();
+ $logged_in_obj = Auth::getInstance($logged_in_uid);
+ $is_admin = $logged_in_obj->isAdmin();
+ if (!$is_admin) return false;
+ return $this->db->setStatus($this->uid, $type);
+ }
+ public function isUser() {
+ $type = $this->getType();
+ return ($type===1) || ($type===2);
+ }
+ public function isAdmin() {
+ $type = $this->getType();
+ return ($type===2);
+ }
+ public function isGroup() {
+ $type = $this->getType();
+ return ($type===3);
+ }
+ public function setUser($is_user) {
+ $is_user = ($is_user?true:false);
+ if ($this->isUser() != $is_user) {
+ $this->setType($is_user?1:0);
+ }
+ }
+ public function setAdmin($is_admin) {
+ $is_admin = ($is_admin?true:false);
+ $is_user = $this->isUser();
+ $this->setType($is_admin?2:($is_user?1:0));
+ }
+ public function delete() {
+ $this->setType(4);
+ }
+
+ // Permissions /////////////////////////////////////////////////////////
+ public function canRead() {
+ $logged_in_uid = Login::isLoggedIn();
+ $is_me = ($logged_in_uid === $this->uid);
+
+ $logged_in_obj = Auth::getInstance($logged_in_uid);
+ $is_user = $logged_in_obj->isUser();
+
+ return ($is_me || $is_user);
+ }
+ public function canEdit() {
+ $logged_in_uid = Login::isLoggedIn();
+ $is_me = ($logged_in_uid === $this->uid);
+
+ $logged_in_obj = Auth::getInstance($logged_in_uid);
+ $is_admin = $logged_in_obj->isAdmin();
+
+ return ($is_me || $is_admin);
+ }
+
+ // [user|group]name ////////////////////////////////////////////////////
+ public function getName() {
+ if ($this->db===null) {
+ return false;
+ } else {
+ return $this->db->getUsername($this->uid);
+ }
+ }
+ public function setName($new_name) {
+ if (!$this->canEdit()) return false;
+ if (!self::isNameLegal($new_name)) return false;
+ return $this->db->setUsername($this->uid, $new_name);
+ }
+
+ /**********************************************************************\
+ * The 'users' table. *
+ \**********************************************************************/
+
+ public function getConf($setting) {
+ if (!$this->canRead()) return false;
+ return $this->db->getUserConf($this->uid, $setting);
+ }
+ public function setConf($setting, $value) {
+ if (!$this->canEdit()) return false;
+ return $this->db->setUserConf($this->uid, $setting, $value);
+ }
+ public function getConfArray($setting) {
+ $string = $this->getConf($setting);
+ return $this->db->valueToArray($string);
+ }
+ public function setConfArray($setting, $list) {
+ $string = $this->db->arrayToValue($list);
+ return $this->setConf($setting, $string);
+ }
+}
diff --git a/apps/um/models/ContactMethod.class.php b/apps/um/models/ContactMethod.class.php
new file mode 100644
index 0000000..1dd40ee
--- /dev/null
+++ b/apps/um/models/ContactMethod.class.php
@@ -0,0 +1,29 @@
+<?php
+global $CONTACT_METHODS;
+if (!isset($CONTACT_METHODS)) {
+ $CONTACT_METHODS = array();
+}
+
+class ContactMethod extends Model {
+ public $verb_slug = ''; // sms
+ public $addr_slug = ''; // phone
+ public $verb_text = ''; // text message
+ public $addr_text = ''; // phone number
+
+ public $handler = null;
+
+ public function __construct($verb_slug, $addr_slug,
+ $verb_text, $addr_text)
+ {
+ $this->verb_slug = $verb_slug;
+ $this->addr_slug = $addr_slug;
+ $this->verb_text = $verb_text;
+ $this->addr_text = $addr_text;
+
+ global $CONTACT_METHODS;
+ $CONTACT_METHODS[$verb_slug] = $this;
+ }
+ public function setHandler($handler) {
+ $this->handler = $handler;
+ }
+}
diff --git a/apps/um/models/Group.class.php b/apps/um/models/Group.class.php
new file mode 100644
index 0000000..f981a4f
--- /dev/null
+++ b/apps/um/models/Group.class.php
@@ -0,0 +1,23 @@
+<?php
+require_once('Auth.class.php');
+
+class Group extends Auth {
+ public function __construct($uid) {
+ parent::__construct($uid);
+ }
+ public function getUID() {
+ return $this->uid;
+ }
+
+ /**********************************************************************\
+ * The 'auth' table. *
+ \**********************************************************************/
+
+ /**********************************************************************\
+ * The 'users' table. *
+ \**********************************************************************/
+
+ public function getMembers() {
+ return $this->db->getUsersInGroup($this->getName());
+ }
+}
diff --git a/apps/um/models/User.class.php b/apps/um/models/User.class.php
new file mode 100644
index 0000000..b6dbede
--- /dev/null
+++ b/apps/um/models/User.class.php
@@ -0,0 +1,25 @@
+<?php
+require_once('Auth.class.php');
+
+class User extends Auth {
+ public function __construct($uid) {
+ parent::__construct($uid);
+ }
+ public function getUID() {
+ return $this->uid;
+ }
+
+ /**********************************************************************\
+ * The 'auth' table. *
+ \**********************************************************************/
+
+ public function setPassword($password) {
+ if (!$this->canEdit()) return false;
+ return $this->db->setPassword($this->uid, $password);
+ }
+
+ /**********************************************************************\
+ * The 'users' table. *
+ \**********************************************************************/
+
+}