From 60219dc685c05de6e036a58e2da324c03ba10cad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Skej=C3=B8?= Date: Tue, 21 Jul 2009 20:09:53 +0200 Subject: [PATCH] User: Got User-module working. --- modules/User/User.php | 127 ++++++++++++++++++++++++++++++++++++++++------ modules/User/settings.php | 20 +++----- 2 files changed, 119 insertions(+), 28 deletions(-) rewrite modules/User/settings.php (97%) diff --git a/modules/User/User.php b/modules/User/User.php index cb7c589..491bd70 100644 --- a/modules/User/User.php +++ b/modules/User/User.php @@ -5,7 +5,7 @@ */ class User extends AOOSModule { - public function dependencies() { + static public function dependencies() { return array("Paginator", "Form", "Reciever"); } @@ -21,26 +21,52 @@ class User extends AOOSModule { public function dataModelDefinition() { // Current user model $m1 = new AOOSModel($this->core()); - $m1->setColumnIndex("username", "password", "email", "signature", "avatar", "active", "activationcode", "joined", "status"); + $m1->setSource("mysql"); + $m1->setTable("User"); + $m1->setColumnIndex(array("uid", "username", "password", "email", "signature", /*"avatar", */"active", "activationcode", "joined", "status", "groups", "level")); + + $m1->setProperties("uid", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_PRIMARY_KEY|AOOSMODEL_FLAG_GUI_PRIVATE); + $m1->setProperties("username", AOOSMODEL_TYPE_STRING, AOOSMODEL_FLAG_FROM_DATABASE, AOOSMODEL_PROP_ESCAPE|AOOSMODEL_PROP_NOHTML|AOOSMODEL_PROP_STRIP); $m1->addConstraint("username", "Match", "/[a-zA-Z0-9-_]+/"); $m1->addConstraint("username", "Length", 50); + $m1->setProperties("password", AOOSMODEL_TYPE_STRING, AOOSMODEL_FLAG_FROM_DATABASE, AOOSMODEL_PROP_HASH|AOOSMODEL_PROP_STRIP); + $m1->setProperties("email", AOOSMODEL_TYPE_STRING, AOOSMODEL_FLAG_FROM_DATABASE, AOOSMODEL_PROP_ESCAPE|AOOSMODEL_PROP_NOHTML|AOOSMODEL_PROP_STRIP); $m1->addConstraint("email", "Match", "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/"); // Match email + $m1->setProperties("signature", AOOSMODEL_TYPE_TEXT, AOOSMODEL_FLAG_FROM_DATABASE, AOOSMODEL_PROP_ESCAPE|AOOSMODEL_PROP_NOHTML); $m1->addConstraint("signature", "Length", 256); + // XXX $m1->setProperties("avatar", AOOSMODEL_TYPE_STRING, AOOSMODEL_FLAG_FROM_DATABASE, AOOSMODEL_PROP_ESCAPE); + $m1->setProperties("active", AOOSMODEL_TYPE_BOOLEAN, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_GUI_PRIVATE); - $m1->setProperties("activationcode", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE); - $m1->setProperties("joined", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE, AOOSMODEL_PROP_TIME); - $m1->setProperties("status", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE); // AOOSMODEL_TYPE_ENUM + $m1->setDefaultValue("active", false); + + $m1->setProperties("activationcode", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_GUI_PRIVATE); + + $m1->setProperties("joined", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_GUI_PRIVATE, AOOSMODEL_PROP_TIME); + + $m1->setProperties("status", AOOSMODEL_TYPE_INTEGER,AOOSMODEL_FLAG_GUI_PRIVATE); + $m1->setDefaultValue("status",0);// $this->getStatusValue("offline")); + + $m1->setProperties("groups", AOOSMODEL_TYPE_TEXT, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_GUI_PRIVATE); + + $m1->setProperties("level", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_GUI_PRIVATE); + + $m1->appendRow(); + $m1->getRow(0)->setFlag(0); // All users. Only the most important fields are fetched here $m2 = new AOOSModel($this->core()); - $m2->setColumnIndex("uid", "username"); + $m2->setSource("mysql"); + $m2->setTable("User"); + $m2->setColumnIndex(array("uid", "username", "status", "active", "activationcode")); $m2->setProperties("uid", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_PRIMARY_KEY); $m2->setProperties("username", AOOSMODEL_TYPE_STRING, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_UNIQUE, AOOSMODEL_PROP_ESCAPE|AOOSMODEL_PROP_NOHTML|AOOSMODEL_PROP_STRIP); + $m2->setProperties("active", AOOSMODEL_TYPE_BOOLEAN, AOOSMODEL_FLAG_FROM_DATABASE|AOOSMODEL_FLAG_GUI_PRIVATE); + $m2->setProperties("activationcode", AOOSMODEL_TYPE_INTEGER, AOOSMODEL_FLAG_FROM_DATABASE); $a = array("USER" => $m1, "USERLIST" => $m2); return $a; @@ -48,27 +74,96 @@ class User extends AOOSModule { public function show() { $this->dataModel("USERLIST")->populate(); - return null; + require_once("UserView.php"); + $this->_view = new UserView($this); + $p = $this->core()->getModule("Paginator"); + switch($p->getOption(0)) { + case("edit"): + return $this->_view->edit(); + break; + case("add"): + return $this->_view->add(); + break; + default: + return $this->_view->show(); + break; + } } - public function createUser() { - return null; + public function createUser($info) { + try { + $this->dataModel("USER")->appendRow($info->toArray()); + } catch (AOOSException $e) { + throw $e; + } + // Appending was succesful + $this->dataModel("USER")->save(); + return true; } - public function deleteUser() { - return null; + public function updateUser($row) { + if (!$this->online()) { + return false; + } + foreach ($row->toArray() as $key => $val) { + $this->dataModel("USER")->getRow(0)->$key = $val; + } + $this->dataModel("USER")->save(); + return true; } - public function updateUser() { + public function activateUser($row) { return null; } - public function activateUser() { - return null; + public function login($row) { + $dm = $this->dataModel("USER"); + $w = $row->toArray(); + $w["active"] = true; + $dm->populate($w); + if ($dm->rows() == 0) { + return false; + } + $dm->getRow(0)->status = 1;//$this->core()->getSetting("online", __class__); + return true; } - public function login() { - return null; + /* ---- Convinience functions ---- */ + public function status() { + return $this->dataModel("USER")->getRow(0)->status; + } + + public function getStatusValue($string) { + return $this->core()->getSetting("status_".$string, __class__); + } + + public function online() { + return $this->status() == 1;//$this->getStatusValue("online"); + } + + public function level() { + if (!$this->online()) { + return false; + } + return $this->dataModel("USER")->getRow(0)->level; + } + + public function groups() { + if (!$this->online()) { + return false; + } + return $this->dataModel("USER")->getRow(0)->groups; + } + + public function inGroup($group) { + if (!$this->online()) { + return false; + } + return in_array($group, $this->groups()); + } + + public function userInfo() { + return $this->dataModel("USER")->getRow(0); } } ?> diff --git a/modules/User/settings.php b/modules/User/settings.php dissimilarity index 97% index 71d1fc0..8859d31 100644 --- a/modules/User/settings.php +++ b/modules/User/settings.php @@ -1,12 +1,8 @@ - + -- 2.11.4.GIT